Android Studio混淆打包忽略第三方jar包配置

版权声明:本文为 宇不语 原创文章,未经博主允许不得转载。 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'
    }
}


混淆配置

混淆配置文件介绍

  1. AS中支持默认配置+自定义配置,比如上面的设置中,默认配置文件是proguard-android.txt,自定义配置文件是proguard-rules.pro
  2. 默认配置文件一般都是在Android SDK目录下,比如 E:\Android\sdk\tools\proguard
    自定义配置文件一般在工程目录下,在Android视图下的,Gradle Scripts中就能找到。
  3. 默认配置文件一般不用改,能满足大部分项目打包需求。
    但大部分项目可能都会用到第三方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

最后如果还是有错误,那么请复制错误自行百度或谷歌。

猜你喜欢

转载自blog.csdn.net/qq_35064774/article/details/52871521
今日推荐