Android 混淆Tips

Android混淆的重要性不用多说,操作指南网络上也有很多,不再赘述。分享几个我在混淆过程中search蛮久的问题,帮助大家减少花费在混淆过程中的时间。



1. 报"....can't find referenced class..." warning 的解决方式:

当我们使用-keep 将相关文件声明为不混淆之外,当我们确信对相应的文件混淆没有问题时,还需要使用-dontwarn 声明相应的文件,Grade在检查的时候才不会报出Warning.

例子:

#Keep Okhttp3
-keep class okhttp3.** {  *;}
-keep interface okhttp3.* { *;}
-dontwarn okhttp3.*

这样子Gradle在检查okhttp包名下的文件时才不会报出Warning. 


2. 对于大量引用第三方库,jar, project时,如何处理混淆文件的编写呢?

(1). 第三方库,典型是通过Gradle引入的,比如Okhttp3, Picasso之类的库,这些库的原作者已经帮我们写好了相应的混淆文件,在项目中找找或者Google一下便可以找到,直接拷贝过来使用。

(2). .jar文件:我们经常会被一些第三方库打包成.jar文件,然后放到/libs/文件夹下使用,尤其是当项目从Eclipse迁移到AS之后,这样子的情况特别多。对于这种情况,我的解决方案时,在混淆文件中通过-keep和-dotwarn 来解除对这些第三方库的混淆和报警,

例子:

    compile files('libs/ShareSDK-Core-2.6.2.jar')
    compile files('libs/ShareSDK-Email-2.6.2.jar')
    compile files('libs/ShareSDK-QQ-2.6.2.jar')
    compile files('libs/ShareSDK-QZone-2.6.2.jar')
    compile files('libs/ShareSDK-ShortMessage-2.6.2.jar')
    compile files('libs/ShareSDK-SinaWeibo-2.6.2.jar')
    compile files('libs/ShareSDK-Wechat-2.6.2.jar')
    compile files('libs/ShareSDK-Wechat-Core-2.6.2.jar')
    compile files('libs/ShareSDK-Wechat-Favorite-2.6.2.jar')
    compile files('libs/ShareSDK-Wechat-Moments-2.6.2.jar')

我这个项目里使用了mob的ShareSDK, 其中需要引入大量的.jar文件,以下是我如何对此编写混淆文件的:

-keep class cb.sharesdk.** { *;}
-dontwarn cn.sharesdk.**
(3). 引入的工程文件,这类的第三方库在Build.Gradle中会以compile project('XXXX')这样的形式展现,比如:

    compile project(':lib_afinal')
对于这种方式引入的第三方库,最好的作法是跑到这些第三方库的Build.Gradle文件中写如下列的句式:

<span style="white-space:pre">	</span>consumerProguardFiles 'proguard-rules.txt'
我在lib_afinal中build.gradle的代码片段会是:

    defaultConfig {
        minSdkVersion 5
        targetSdkVersion 17
        consumerProguardFiles 'proguard-rules.txt'
    }
为什么这样设置呢?因为Gradle会为我们自动完成这些工程文件的混淆,不需要我们再去手动设置。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值