【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
配置文件build.gradle android {
signingConfigs {
release {
keyAlias 'XXX'
keyPassword 'XXX'
storeFile file('../key/XXX.jks') // 位置:xxApplication/key/XXX.jks'
storePassword 'XXX'
}
}
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.XXX.XXX"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
//日志
buildConfigField "boolean", "LOG_DEBUG", "true"
//混淆
minifyEnabled true
//Zipalign优化
zipAlignEnabled true
//移除无用的resource文件
shrinkResources true
//签名
signingConfig signingConfigs.release
//的混淆文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
buildConfigField "boolean", "LOG_DEBUG", "true"
versionNameSuffix "-debug"
zipAlignEnabled false
shrinkResources false
minifyEnabled false
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
混淆文件proguard-rules.pro
#保护注解
-keepattributes *Annotation*
#避免混淆泛型
-keepattributes Signature
-keepattributes EnclosingMethod
#删除日志
-assumenosideeffects class android.util.Log{
public static boolean isLoggable(java.lang.String, int);
public static int v(...);
public static int d(...);
public static int i(...);
public static int w(...);
public static int e(...);
}
# 保持哪些类不被混淆(第三方)
-keep class com.amap.api.** {*;}
-dontwarn com.amap.api.**
#实体类不被混淆
-keep public class com.xxx.xxx.xxx.entity.** {
public void set*(***);
public *** get*();
}
#### 此处用 *; 替代,因为Gson解析内部类会实例化不了
-keep public class com.xxx.xxx.xxx.entity.** {
*;
}
#jackson
-keepnames class com.fasterxml.jackson.** { *; }
-dontwarn com.fasterxml.jackson.databind.**
-keep class org.codehaus.** { *; }
-keepclassmembers public final enum org.codehaus.jackson.annotate.JsonAutoDetect$Visibility {
public static final org.codehaus.jackson.annotate.JsonAutoDetect$Visibility *; }
#gson
-keep class com.google.gson.** { *; }
-keep class com.google.gson.stream.** { *; }
#butterknife
-keep class butterknife.** { *; }
混淆生成的文件
1.dump.txt apk包内所有class的内部结构
2.mapping.txt 混淆前后的映射
3.seeds.txt 未混淆的类和成员
4.usage.txt 列出从apk中删除的代码
还原混淆后的代码
GUI 工具:proguardgui 位于 <android-sdk>/tools/proguard/bin/ 目录
1) 运行 proguardgui.bat
2) 从左边的菜单选择 “ReTrace”
3) 在上面的 mapping 文件中选择你的 mapping 文件 ,在下面输入框输入要还原的代码
4) 点击 “ReTrace!” 按钮
命令行工具:retrace.bat,
1)把 mapping 文件和要还原的堆栈信息保存在 stacktrace 文件中
2)把这两个文件复制到 retrace.bat 目录下,运行如下命令即可。
3)retrace.bat -verbose mapping.txt stacktrace.txt > out.txt
参考
google android 文档 https://developer.android.com/studio/build/shrink-code.html
android混淆出现的问题与思考? https://www.zhihu.com/question/33184477
安卓集成发布详解(二) http://frank-zhu.github.io/android/2015/06/15/android-release_app_build_gradle/
AndroidStudio 混淆打包 http://www.cnblogs.com/permanent2012moira/p/5126276.html
Android程序保护与破解浅析 http://www.cnblogs.com/waylife/p/3675684.html
ProGuard基础语法和打包配置 http://blog.csdn.net/weizaishouex2010/article/details/49865523
来源:oschina
链接:https://my.oschina.net/u/2501904/blog/698520