Android release:transformClassesAndResourcesWithProguardForRelease

Android 打包编译报错:Execution failed for task ‘:mobile:transformClassesAndResourcesWithProguardForRelease’.

我在开发过程中从没有报这个错,但是当我要发布应用的时候突然打包失败,日志并没有指出实在什么地方,只是说找不到类,下面是具体的日志:

Execution failed for task ':mobile:transformClassesAndResourcesWithProguardForRelease'.
...
Caused by: java.lang.RuntimeException: Job failed, see logs for details
	at com.android.build.gradle.internal.transforms.ProGuardTransform.transform(ProGuardTransform.java:209)
	at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239)
	at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235)
	at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
	at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:230)
	...
Caused by: java.io.IOException: Can't write [D:\lijing\sgreen\mobile\build\intermediates\transforms\proguard\release\0.jar]
 (Can't read [D:\lijing\sgreen\mobile\build\intermediates\javac\release\compileReleaseJavaWithJavac\classes(;;;;;;;**.class)]
  (Can't read [com]  (Can't read [xh] (Can't read [sgreen] (Can't read [BuildConfig.class] (Duplicate jar entry [com/xh/sgreen/a.class]))))))
	at proguard.OutputWriter.writeOutput(OutputWriter.java:202)
	...
Caused by: java.io.IOException: Duplicate jar entry [com/xh/sgreen/a.class]
	at proguard.io.ZipOutput.createOutputStream(ZipOutput.java:155)
	at proguard.io.ZipOutput.createOutputStream(ZipOutput.java:120)
	at proguard.io.JarWriter.createOutputStream(JarWriter.java:137)
	...

一点办法都没有,怎么突然就Can’t read呢?仔细阅读log,发现一只可疑单词Duplicate,提示说 Duplicate jar entry [com/xx/xxxx/a.class],意思就是有多个com/xx/xxxx/a.class,于是项目重头到尾检查一下项目,发现我依赖的一个module的包名和项目的包名一致,抱着试一试的想法,把这个module的包名改成别的,咦!解决了,一头雾水,怎么就可以了,我还不知道为啥?
必须要找到原因,不然咋睡也睡不着。

这是在Stack overflow上找的答案,
Ok, I got the solution.

The Why-

I compared the build steps in gradle console at API22(build OK) and API16(build fails). At API22, the console said-

+Instant Run: Proguard is not compatible with instant run. It has been disabled for debug

+Instant Run: Resource shrinker automatically disabled for debug

…and the build was successful. When i disabled InstantRun, it failed on API22 also.

The Reason-

The problem was in proguard configuration. The BuildConfig.class of coolLib.jar was defined to be kept in proguard-project.txt , so it was keeping all the .class files in that package but BuildConfig.class must be modified at build time according to the Main Project.

The Solution-

I removed that -keep statement and it works like a charm.

此处是源地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值