打aar混淆包和集成aar的方法
ejhg7221
8年前
<p>最近项目中有用到发布混淆aar的需求,网上有很多方法,但都不够全面,这里把自己整理的结果做个汇总,避免重复收集浪费时间</p> <h2>环境要求</h2> <blockquote> <p>android studio(该方法是针对AS的)</p> </blockquote> <h2>初始需求</h2> <blockquote> <p>把你项目中的某一个模块,打包成一个混淆的aar,集成到其他的项目中,同事暴露的接口不混淆,你这个aar的依赖库跟其他项目的依赖库不能冲突</p> </blockquote> <h2>需求详情</h2> <blockquote> <p>假设目前的项目有三个module,A, B, C,A是application类型,B, C是library,关系是A依赖B,B依赖C,现在要把B模块打包成一个混淆的aar发布给其他的项目使用,其他项目拿到B的aar以后,集成要OK,并且依赖没问题</p> </blockquote> <p>好,背景情况介绍完了,下面是解决方法</p> <h2>1 依赖关系剥离</h2> <p>把B模块中的一些依赖的库全部移到C中,比如网络库,图片库和其他第三方的库,统统剥离,放到C中,B只是一个纯粹的实现某个需求一个模块库,不包含其他任何第三方依赖库,这种剥离是为了方便后期其他项目的接入</p> <h2>2 配置B的混淆</h2> <ul> <li>把B的入口方法统一到一个类中,在混淆文件中加上keep的方法,让这个类不被混淆,同事R文件也能混淆,配置方式如下:<br> <code>-keep class *.R -keepclasseswithmembers class **.R$* { public static <fields>;}</code><br> 其他的混淆配置看项目具体的情况了,一般实力类不混淆,不属于这个主题,不多介绍了</li> <li>build.gradle配置<br> <strong>要配置对应生成aar的那个模块的build.gradle</strong>,其他的模块的不要改动,配置方式如下: <pre> <code>buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }</code></pre> 没看错,只要配置release就可以了,把minifyEnabled设置成ture就可以了</li> </ul> <h2>3 生成aar</h2> <p>生成aar非常简单,只要运行项目,在对应的build路径下会自动生成aar,比如我这个demo项目的aar路径是:</p> <blockquote> <p>E:\practise\AarDemo\mylibrary\build\outputs\aar<br> 里面有两个aar,一个是debug,一个是release,拿release那个,debug那个是没有混淆的</p> </blockquote> <h2>4 发布aar</h2> <ul> <li>把你要发布的aar,和该aar说依赖第三方的库整理好,一起给要新的项目,新的项目如果已经有依赖那些第三方的库,则无需重新依赖,对于没有依赖的,就要配置依赖关系,这个就是第一步剥离依赖的好处,避免多余的依赖</li> <li>在新的项目的<strong>application模块</strong>的libs文件夹下面放上该aar文件,同事在<strong>该模块对应的build.gralde</strong>中加上下面的配置 <pre> <code>dependencies { compile(name:'mylibrary-release', ext:'aar') } repositories{ flatDir{ dirs 'libs' } }</code></pre> </li> </ul> <h2>结束语</h2> <p>aar的依赖其实网上很多了,我这里只是针对我目前的这个需求,做了一个整理,避免以后有同样的需求,还盲目的查找资料</p> <p><a href="/misc/goto?guid=4959671485293975748">我传了一个demo到github上面,可以参考下。</a></p> <p><a href="/misc/goto?guid=4959671485374958626">文/韦东锏</a></p>