版权声明:本文为 宇不语 原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35064774/article/details/52871521
如有转载,请申明:
转载至 http://blog.csdn.net/qq_35064774/article/details/52871521
写这篇博客的理由
前段时间用Android Studio混淆打包的时候,碰到一些问题,网上找了很多资料,发现很多都是Copy Paste,找了许久没有找到有用的资料,然后在Stack Overflow中找到了部分答案。所以决定自己写一篇“有用的博客”。
启用混淆打包
在Android Studio中只需要打开build.gradle文件,找到如下一段,把minifyEnabled 设置为 true,就开启了混淆打包。
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
混淆配置
混淆配置文件介绍
- AS中支持默认配置+自定义配置,比如上面的设置中,默认配置文件是
proguard-android.txt
,自定义配置文件是proguard-rules.pro
。 - 默认配置文件一般都是在Android SDK目录下,比如
E:\Android\sdk\tools\proguard
。
自定义配置文件一般在工程目录下,在Android视图下的,Gradle Scripts
中就能找到。 - 默认配置文件一般不用改,能满足大部分项目打包需求。
但大部分项目可能都会用到第三方jar包,这个时候,就需要有自定义的配置。因为大部分jar包发布时就已经做了混淆处理,所以再次混淆必然会报错。
自定义配置忽略第三方jar包
首先我们要知道项目引入了多少jar包。
在AS中也非常简单。打开build.gradle
,找到dependencies
,比如我的项目中是这样的:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile files('libs/RootTools.jar')
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:support-v4:23.4.0'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.squareup.okio:okio:1.10.0'
compile 'com.google.code.gson:gson:2.7'
compile 'com.android.support:support-vector-drawable:23.4.0'
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha9'
testCompile 'junit:junit:4.12'
}
在这里可以清晰的看到compile
中引用的库,除了官方的support
库,其他都是需要自己在配置文件中取消混淆的。
接着是自定义文件配置。打开proguard-rules.pro
,在里面加入-keep class com.xxx.**{*;}
这样的忽略指定包名的语句。比如我的配置如下:
-keep class com.squareup.okio.**{*;}
-keep class com.squareup.okhttp3.**{*;}
-keep class com.google.code.gson.**{*;}
-keep class com.squareup.okio.**{*;}
-keep class com.stericson.RootTools.**{*;}
当然这样配置之后,可能你的项目依旧报错,那可能是你也使用了okio
库。只需要在附加上这样一句。
-dontwarn okio.**
如果加上之后依旧报错,可以试着加上
-keepattributes EnclosingMethod
最后如果还是有错误,那么请复制错误自行百度或谷歌。