美文网首页
Android 混淆Tips

Android 混淆Tips

作者: wusp | 来源:发表于2016-05-17 18:53 被阅读512次

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

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

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

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

    这样写了之后,"can't find referenced class okhttp3.XX.XXX" 的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.**
    

    关键是找到ShareSDK-XXX 这些包所对应的类所在的包名, -keep and -dontwarn 之。
    (3). 引入的工程文件,这类的第三方库在Build.Gradle中会以compile project('XXXX')这样的形式展现,比如:

    compile project(':lib_afinal')
    

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

    consumerProguardFiles 'proguard-rules.txt'
    

    我在lib_afinal中build.gradle的代码片段会是:

        defaultConfig {
            minSdkVersion 5
            targetSdkVersion 17
            consumerProguardFiles 'proguard-rules.txt'
        }
    

    为什么这样设置呢?因为Gradle会为我们自动完成这些工程文件的混淆,不需要我们再去手动设置。

    相关文章

      网友评论

          本文标题:Android 混淆Tips

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