Android(安卓)混淆打包
16lz
2021-01-24
有些时候我们希望我们自己的apk包不能被别人反编译而获取自己的源代码。这就需要我们通过Android提供的混淆打包技术来完成。
一、没有引用外部包的情况:
这种情况下代码混淆的方式相对简单:
1)只需要复制一份proguard.cfg文件到项目主目录中(不需要做任何改动)
2)修改project.properties文件,向文件中加上一段代码:proguard.config=proguard.cfg即可
到此第一种情况的混淆结束。
二、再我们引用了外部包的情况下,例如:google的gson.jar,微信,人人,地图等外部引用包时,我们就需要对这些包做特殊处理了。
1)在proguard.cfg文件中引入这些jar文件。例如:
-libraryjars libs/activation.jar-libraryjars libs/additionnal.jar-libraryjars libs/alipay.jar-libraryjars libs/android-support-v4.jar-libraryjars libs/gson-2.2.4.jar-libraryjars libs/libammsdk.jar-libraryjars libs/mail.jar
2)指定这些包中的类不被混淆
-keep class com.google.**{ *; }-keep class com.alipay.android.** { *; }-keep class com.sun.activation.registries.** { *; }-keep class javax.activation.** { *; }-keep class com.tencent.mm.** { *; }-keep class com.sum.mail.** { *; }-keep class javax.mail.** { *; }-keep class myjava.awt.datatransfer.** { *; }-keep class org.apache.harmony.** { *; }
3)去除警告
-dontwarn com.google.**-dontwarn javax.activation.**-dontwarn com.alipay.android.**-dontwarn com.sun.activation.registries.**-dontwarn com.tencent.mm.**-dontwarn com.sun.mail.**-dontwarn javax.mail.**-dontwarn myjava.awt.datatransfer.**-dontwarn org.apache.harmony.**
4)修改project.properties文件,向文件中加上一段代码:proguard.config=proguard.cfg
5)到此为止任务完成,混淆编译后就是你想要的效果。
特别说明:当你在用到Google提供的包gson.jar时,除了要对该jar包做特殊处理外还需要对你项目中的JavaBean最特殊处理(保证这些JavaBean不被反编译)
假如你项目中的JavaBean为com.test.Order.java(订单)、com.test.User(用户)等。
那么在你的proguard.cfg文件中就需要加上如下代码:
-keep class com.test.** {*;}
然后再加上下面的这段代码:
-keepattributes Signature -keep class sun.misc.Unsafe { *; }-keep class com.google.gson.examples.android.model.** { *; }
具体为什么这样做,下面我将给出解释:
因为客户端代码中的 JavaBean(实体类)的字段名称必须与服务端返回json字符串中的key要一致,才能进行解析,而混淆编 译之后,客户端代码中的JavaBean(实体类)的类名与其字段名称全部变成了a、b、c、d等等字符串,这与服务端返回的json字符串中的key不一致,导致解析失败。所以,解决的办法是:在进行混淆编译进行打包apk的时候,过滤掉存放所有JavaBean(实体类)的包不进行混淆编译。 下面给出网上查到的一段代码:在proguard.cfg文件中添加:# removes such information by default, so configure it to keep all of it. -keepattributes Signature # Gson specific classes -keep class sun.misc.Unsafe { *; } #-keep class com.google.gson.stream.** { *; } # Application classes that will be serialized/deserialized over Gson -keep class com.google.gson.examples.android.model.** { *; }//这句非常重要,主要是滤掉 com.bgb.scan.model包下的所有.class文件不进行混淆编译-keep class com.bgb.scan.model.** {*;}
更多相关文章
- Android(安卓)studio使用NDK编译和调试(生成so文件)
- 在线看Android系统源码,AndroidXRef的简易使用方法
- Service与Android系统设计(2)
- Android(安卓)自定义绚丽的进度条(类似H5实现的一种效果)
- Android基础入门教程——8.3.10 Paint API之—— ColorFilter(颜
- ORB_SLAM2在android studio上用cmake编译
- 带你一步一步手动实现Android热更新
- Android从0到完整项目(1)使用Android(安卓)studio 创建项目
- Android实现两个Activity界面的跳转并传值