混淆:
这里只在Android studio中做示例:
在Build.gradle文件中修改release的编译属性:
release { minifyEnabled true // proguardFiles getDefaultProguardFile('proguard-android.txt'), "proguard-rules.pro" proguardFile 'proguard-android.txt' }
proguard-android.txt
该文件就是混淆配置文件
主要需要注意的是以下几点:
1.第三方的库需要使用:
-injars libs -injars libs/ext -injars libs/libs或者是:
#-libraryjars libs/zxing.jar #-libraryjars libs/aoe.jar #-libraryjars libs/libs/umeng-update-v2.6.0.1.jar #-libraryjars libs/umeng-analytics-v5.6.1.jar #-libraryjars libs/ext/cling-core-2.1.0.jar
将第三方库标示出来,进行编译,第三方的库通常情况下不会进行混淆。
2.对于第三方库以及部分系统库,需要使用-dontwarn标签进行标注,标示相关的类的warn不影响混淆编译。
-dontwarn org.fourthline.cling.** -dontwarn org.seamless.** -dontwarn org.eclipse.jetty.** -dontwarn android.support.v4.** -dontwarn android.support.design.widget.** -dontwarn org.junit.**
3.使用-keep标签进行标注,第三方库的方法不进行混淆,如:
-keep class org.fourthline.cling.** { *; } -keep class org.seamless.** { *;} -keep class org.eclipse.jetty.** { *;} -keep class android.support.v4.** { *; } -keep class org.junit.** { *; }
一般来说这样就可以根据签名生成混淆后的apk.
反编译:
拿到apk还是没有办法确认是否混淆,这里转发一篇文章:
http://www.2cto.com/kf/201501/366447.html
按照该文章的步骤操作后,你会发现代码已经被混淆了。
最后:混淆只是增加代码阅读的复杂度,真正需要做到安全还有很多路要走。