在android打包发布的时候,需要对app进行压缩,混淆,去除无效文件等,以保证发布出去的app占用资源尽可能的小。因此需要我们对gradle进行必要的配置(以android studio打包为例)。
1、build.gradle 配置
buildTypes{
debug {
//多余的参数
minifyEnabled false
zipAlignEnabled false
shrinkResources false
signingConfig signingConfigs.debug
// 显示Log
buildConfigField "boolean", "LOG_DEBUG", "true"
}
release {
minifyEnabled true //混淆
zipAlignEnabled true //Zipalign优化
shrinkResources false //删除无用资源
signingConfig signingConfigs.release
// 显示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
release版本为发布版本,因此设置了minifyEnabled true,zipAlignEnabled true,shrinkResources true。其中proguard-rules.pro是需要我们自己根据项目编写的混淆文件。
2、proguard-rules.pro混淆文件编写(网上都有,就不贴了)
3、常见transformClassesAndResourcesWithProguardForRelease’.错误
这个问题是在说你在混淆打包的时候有些类有可能找不着,所以会报错,和warning
解决的办法:
找到报warning的类都给他在你的proguard-rules.pro混淆器文件中
添加代码-dontwarn 包名+类名.**;
给取消掉warning就可以了,如果你不想那个类被混淆,那就添加代码:-keep class 包名+类名{;}或者包名.*{*;}
当然也可以在proguard-rules.pro添加-ignorewarning ,这个是“屏蔽所有警告” 。
因此打出的包可能会出现必要代码被混淆导致项目奔溃而无法正常运行,因此个人建议,最好不要加这句代码,遇到什么错误什么警告,对应去解决即可,解决完了自然可以打包成功了。
4、解决 The same input jar is specified twice 问题
在 Android Studio 中, build.gradle 中声明了对这个 jar 包的依赖,所以不需要在混淆配置文件中继续声明。
将proguard-rules.pro中所有的 -libraryjars libs/*.jar 注释掉以后,项目就可以正常混淆了。
5、最后还有一个小问题,混淆后打开包含百度地图的app时,报如下错误
No pending exception expected: java.lang.NoSuchMethodError: no static method "Lcom/baidu/vi/VMsg;.postMessage(IIIJ)V
解决方法如下:原因是启用了代码混淆引起的报错。
修改android/app/proguard-rules.pro 文件,在里面增加如下两行
-keep class com.baidu.** { *;}
-keep class vi.com.gdi.bgl.**{*;}