开启混淆后编译失败。
提示
Caused by: org.gradle.tooling.BuildException: Warnings found during shrinking, please use -dontwarn or -ignorewarnings to suppress them.
在build文件加入一行
useProguard true
就可以解决
buildTypes {
debug {
// 显示Log
buildConfigField "boolean","LOG_DEBUG","true"
versionNameSuffix "-debug"
minifyEnabled true
shrinkResources true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-ules.pro'
}
...
}
转载:来自https://www.jianshu.com/p/9919caec54f6
=========================================================================================
原文如下:
最近升级了Android Studio 3.1.2,还没沉浸在欢乐中,就当头一棒,更新项目没事,但是运行项目就报错。错误信息如下:
Caused by: org.gradle.tooling.BuildException: Warnings found during shrinking, please use -dontwarn or -ignorewarnings to suppress them.
具体详情是:
错误
对于我这种英文战五渣,费老鼻子劲了,各种翻译,还是没有发现问题的关键。但是问题还是要解决,不然项目都run不起了。
然后各种尝试,突然想起我的app下的build.gradle文档配置信息可能有问题,于是查看该文件,发现是这样写的:
buildTypes {
debug {
// 显示Log
buildConfigField "boolean","LOG_DEBUG","true"
versionNameSuffix "-debug"
minifyEnabled true //混淆打包
shrinkResources true // 删除无效资源
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-ules.pro'
}
...
}
我灵机一动,觉得可能是shrinkResources true这个导致的(没办法,以前Android Studio 2.3.2打包的时候遇到过这个坑),于是,我把shrinkResources 的值改成了false,再run,发现log显示:
Warnings found during shrinking, please use -dontwarn or -ignorewarnings to suppress them.
果然,报错不一样了,又是英文,老办法,翻译呗,猜想是混淆打包的锅。翻译出来是:
在收缩期间发现的警告,请使用DOWTWARN或-ICONRIONG警告来抑制它们。
what?什么玩意儿,不过-dontwarn or -ignorewarnings 都是混淆打包才有的专业术语,于是,修改minifyEnabled false,最后如下:
buildTypes {
debug {
// 显示Log
buildConfigField "boolean","LOG_DEBUG","true"
versionNameSuffix "-debug"
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-ules.pro'
}
...
}
再运行,debug版本运行成功!
不过虽然解决了,但是Android Studio 2.3.2 也是这样配置的,并没有出问题呀?而且minifyEnabled 和shrinkResources 的release版本值都是true,debug版本出问题,我担心release版本打包后也会出问题,于是,打包尝试了下,发现,居然没出问题,成功打包,什么情况?并且能运行起来,简单看了下,也没报错。
这么邪门的3.1.2版本,我已经无语了,这里记录下。
最后,经过不懈努力,终于,我还是找到了解决办法(我就是想使用混淆代码!!!),代码如下:
buildTypes {
debug {
// 显示Log
buildConfigField "boolean","LOG_DEBUG","true"
versionNameSuffix "-debug"
minifyEnabled true
shrinkResources true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-ules.pro'
}
...
}
没错,追加一行useProguard true这个设置,报错就奇迹般没了,没了,没了!!!
查找资料,useProguard true是开启混淆的意思,这样,程序就好了。
好了,完美解决,结束!