Android代码混淆时报错"transformClassesAndResourcesWithProguardForRelease"的解决方案

一、 问题日志

  • Run tasks中:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':xxxx:transformClassesAndResourcesWithProguardForRelease'.
  • Java compiler中:
Warning: there were 4 instances of library classes depending on program classes.

二、 原因分析

gradle依赖的库和引用这个库的代码,其中一个被混淆一个没有被混淆,导致引用时不一致。


三、 解决方案

网上一些解决方案是忽略该warning,这种方法肯定是存在隐患的,并不能真正解决问题,既然一个混淆,一个没混淆,那么这里给出两种思路,要么都混淆,要么都保留:

1. 不混淆报错的二者

-dontwarn xxx.**
-keep class xxx.**{*;}  // 表示保留该类及其所有方法
  • 如果是要保留通过gradle依赖的开源库或者从外部导入的jar,在"proguard-rules.pro"文件中保留:
-keep class com.example.demo.**{*;}  // com.example.demo为xxxx.jar中的包名,这里表示保留它下面所有的内容

2. 混淆依赖的库

  • 如果是通过gradle依赖的开源库需要被混淆,在"build.gradle"文件中混淆该库:
dependencies {
    compile "com.org.example:demo:1.0.0"
    proguard "com.org.example:demo:1.0.0"
}
  • 如果是从外部导入的jar包,由于很多jar包已经混淆过,所以二次混淆很可能会出问题

四、 参考文献

发布了91 篇原创文章 · 获赞 39 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/zy13608089849/article/details/81476239