signed

QiShunwang

“诚信为本、客户至上”

SDK接入踩坑注意点:忘记加入代码防混淆配置

2020/8/20 15:45:24   来源:

最近项目涉及到个人网盘业务,所以自然的就接入了三方的SDK,这其中涉及到了SDK防混淆以及阿里框架ARouter防混淆配置,当时手头活比较多,都是想着先实现功能,打包那是最后最后的事情了,所以把当时想这块放在最后做,于是最后也忘了。debug包自测所有功能一切都正常,但是当打release包发给测试人员测试时,点击事件效果全无、功能不正常。于是开启了找bug过程......

刚开始怀疑是服务端的测试环境代码没有拷贝到生产环境上,但同事说release包用的就是测试环境,这个自然排除。下面就是怀疑.......,哎,还是无意间提到,“是不是没有加SDK代码防混淆配置?”,然后突然想起来这档子事,于是就加了:

#aar防混淆配置
-keep class com.chinamobile.mcloud.sdk.backup.**{*;}
-keep class com.chinamobile.mcloud.sdk.base.**{*;}
-keep class com.huawei.cloud.sdk.**{*;}
-keep class com.chinamobile.mcloud.sdk.common.**{*;}
-keep class com.chinamobile.mcloud.community.**{*;}
-keep class com.cmic.corenetwork.**{*;}
-keep class com.chinamobile.mcloud.sdk.family.**{*;}
-keep class com.chinamobile.mcloud.sdk.file.**{*;}
-keep class com.chinamobile.mcloud.sdk.main.**{*;}
-keep class com.chinamobile.mcloud.sdk.sharegroup.**{*;}
-keep class com.chinamobile.mcloud.sdk.trans.**{*;}
-keep class com.chinamobile.icloud.im.**{*;}
-keep class com.chinamobile.contacts.sdk.**{*;}
#ARouter防混淆配置
-keep public class com.alibaba.android.arouter.routes.**{*;}
-keep public class com.alibaba.android.arouter.facade.**{*;}
-keep class * implements com.alibaba.android.arouter.facade.template.ISyringe{*;}

然后打release包,测试,一切恢复正常!

一些区别总结一下:

用Android studio直接跑的包,程序是不会经过混淆代码、加秘钥等操作的,而打包的过程会进行代码混淆、加秘钥等安全加固措施的,如果接入的一些第三方的SDK你没有加入防混淆的代码,那么在程序打包编译时,会进行类名、方法等的加密、混淆处理,在代码中调用的SDK的类名、方法名等实现的功能自然就被混淆找不到了。所以一定要加防混淆配置!

另外值得了解Apk的整个流程:

1. aapt工具将res中的资源生成 R.java文件和resources.arsc文件;

2. 如果有aidl,那么aidl工具会将aidl接口转化为java类;

3. javac将所有的java类编译为class文件;

4. 如果有代码混淆,则会加入代码混淆;

5. dx.bat将所有的class文件转化为classes.dex文件;

6. ApkBuild将所有的资源(assets、so、jni)、resources.arcs以及上一步生成的dex文件,打包生成一个apk文件;

7. 对上一步生成的apk进行签名;

8. 使用Zipalign对签名后的apk进行优化。

这个打包的整个流程走下来会很慢,根据我实际打包体验,MacBook os系统  i7处理器 16GB内存 64位 打一个75M的APP大概在17-25分钟左右。

写给入门的新手,少走弯路,快速成长吧!