美文网首页Android Roadasandroid常见问题
打aar混淆包和集成aar的方法

打aar混淆包和集成aar的方法

作者: 韦东锏 | 来源:发表于2016-04-23 10:28 被阅读9002次

最近项目中有用到发布混淆aar的需求,网上有很多方法,但都不够全面,这里把自己整理的结果做个汇总,避免重复收集浪费时间

环境要求

android studio(该方法是针对AS的)

初始需求

把你项目中的某一个模块,打包成一个混淆的aar,集成到其他的项目中,同事暴露的接口不混淆,你这个aar的依赖库跟其他项目的依赖库不能冲突

需求详情

假设目前的项目有三个module,A, B, C,A是application类型,B, C是library,关系是A依赖B,B依赖C,现在要把B模块打包成一个混淆的aar发布给其他的项目使用,其他项目拿到B的aar以后,集成要OK,并且依赖没问题

好,背景情况介绍完了,下面是解决方法

1 依赖关系剥离
把B模块中的一些依赖的库全部移到C中,比如网络库,图片库和其他第三方的库,统统剥离,放到C中,B只是一个纯粹的实现某个需求一个模块库,不包含其他任何第三方依赖库,这种剥离是为了方便后期其他项目的接入

2 配置B的混淆

  • 把B的入口方法统一到一个类中,在混淆文件中加上keep的方法,让这个类不被混淆,同事R文件也能混淆,配置方式如下:
    -keep class *.R -keepclasseswithmembers class **.R$* { public static <fields>;}
    其他的混淆配置看项目具体的情况了,一般实力类不混淆,不属于这个主题,不多介绍了
  • build.gradle配置
    要配置对应生成aar的那个模块的build.gradle,其他的模块的不要改动,配置方式如下:
    buildTypes {
    release {
    minifyEnabled true
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    }
    没看错,只要配置release就可以了,把minifyEnabled设置成ture就可以了

3 生成aar
*生成aar非常简单,只要运行项目,在对应的build路径下会自动生成aar,比如我这个demo项目的aar路径是:

E:\practise\AarDemo\mylibrary\build\outputs\aar
里面有两个aar,一个是debug,一个是release,拿release那个,debug那个是没有混淆的

4 发布aar

  • 把你要发布的aar,和该aar说依赖第三方的库整理好,一起给要新的项目,新的项目如果已经有依赖那些第三方的库,则无需重新依赖,对于没有依赖的,就要配置依赖关系,这个就是第一步剥离依赖的好处,避免多余的依赖
  • 在新的项目的application模块的libs文件夹下面放上该aar文件,同事在该模块对应的build.gralde中加上下面的配置
    dependencies {
    compile(name:'mylibrary-release', ext:'aar')
    }
    repositories{
    flatDir{
    dirs 'libs'
    }
    }

结束语

aar的依赖其实网上很多了,我这里只是针对我目前的这个需求,做了一个整理,避免以后有同样的需求,还盲目的查找资料

我传了一个demo到github上面,可以参考下。

相关文章

  • 打aar混淆包和集成aar的方法

    最近项目中有用到发布混淆aar的需求,网上有很多方法,但都不够全面,这里把自己整理的结果做个汇总,避免重复收集浪费...

  • 组件化踩坑记录

    混淆问题 butterknife 资源冲突,覆盖问题 打aar包需要注意的事项 混淆问题 推荐两种混淆方式 @ke...

  • aar和apk的区别

    aar 和 apk的区别,aar代码没有混淆、jar包而不是Dex、资源id是个引用,还没有转化为固定的int值、

  • 解决Unity导入aar或jar出现的Program type

    原因:当Unity导入的aar或jar包名和项目包名一样的话,BuildConfig会出现冲突。解决方法:在aar...

  • android studio生成aar包并在其他工程引用aar包

    aar包 打包android工程中src、res、lib后生成的aar文件,aar包导入其他android stu...

  • 关于aar包

    aar的使用方法: 1.生成aar包:将依赖库作为module导入android studio的project,G...

  • Andorid app和aar包混淆

    (以下内容参照网络博文加上自己的部分填坑。如有侵权,请联系我删除,谢谢!!) app和aar包混淆: 先把 min...

  • 无标题文章

    我使用android studio 2.2.3混淆生成aar,但是aar里面并没有classes.jar文件,有人...

  • 博润广告sdk

    1. aar包导入 再AndroidStudio中通过import aar导入qknode_admob.aar 2...

  • Android aar中增加独立的混淆配置

    1、为什么要在AAR中独立配置混淆文件 我们的工程中有很多的aar,我们希望别人在使用我们的aar的时候不用像使用...

网友评论

  • 421f3ec11bd8:讲真需要整理一下文章,不说语法, 错别字这一块我想给你打赏都下不去手。
  • 马处长:我这边试的结果时B项目的AAR不会包含C项目的代码与资源
    如果A想要整理好的AAR,还需要手动合并B和C吧?
    否则把B单独提供给别人,是不完整的。
    814a285d1ca2:@Anshay 试试 aar 放到 Jcenter上就无需考虑这么多依赖关系了。
    421f3ec11bd8:还可以合并??不是嵌套的话都要重新再引入吗?
  • openGL小白:如果我想把aar中的一些类隐藏,不想给外问使用aar的项目调用,但因为在aar中其它包路径下也要使用这个类,不能设置public之类的修饰符,请问还有什么好办法.只在aar中是Public的,外部app是不能调用访问的.
  • 闻风小蛮牛:稍微整理一下文章吧,错别字太多了:sweat:
  • 北方南山:把你要发布的aar,和该aar说依赖第三方的库整理好,一起给要新的项目,新的项目如果已经有依赖那些第三方的库,则无需重新依赖,对于没有依赖的,就要配置依赖关系,这个就是第一步剥离依赖的好处,避免多余的依赖

    语句不通,就不愿意看了。
    814a285d1ca2:Library内部依赖的三方库,新项目同时也需要依赖。
    或者将Library直接部署到 Maven or JCenter。(新项目可通过 compile 'com.test:testlibrary:1.0.0' 类似方式引入,无需再次依赖此Library内部引用第三方库)
    Freerain:理解起来 还是没问题的 博主不容易 支持一下啦 反正是解决了我的疑惑 哈哈
  • 11185d6e3d8c:我运行了你的demo,但是还是只生成debug包
  • 11185d6e3d8c:请问下,我按照你的做法做了,但是生成AAR包时,路径下方只有一个debug包,没有release包,请问应该怎么解决
    ltshxyyi: @11185d6e3d8c 在Terminal窗口使用gradlew assembleRelease,就会生成release的aar
  • 猫狗爪抓:你的demo ok的,但你的mylibrary里只有一个Activity,混淆没问题。
    可是我的library module里没有Activity,而全是一些工具类,不会去混淆那些类 :joy:
    怎么解?大哥
  • 759a7e91643b:你好,能否加下q 我现在有一个关于aar的问题 想要请教 谢谢 347568193
  • hui朝晖:不是很明白aar是干嘛的,和jar有什么区别
    韦东锏:@作死小能手 跟jar比,能够带资源文件

本文标题:打aar混淆包和集成aar的方法

本文链接:https://www.haomeiwen.com/subject/cuixrttx.html