自上次更新后出现proguard问题。 (项目和sdk,API 19)
首先,com.android.dex.DexException:多个dex文件定义Lcom / google / gson / JsonSerializer; 好的,访问bin / proguard和unjarring obfuscated.jar我确实看到com / google / gson / JsonSerializer在那里声明了。为什么?它应该只在lib中。
这就是问题的症结所在,为什么Proguard会在libs罐子里复制到""""
什么是""无论如何? Progaurd没有说这个课程是用gcm和""来定义的。什么是""?在运行构建之前,该类仅在libs / gcm.jar中定义,而在其他任何地方都没有。
更长版本,我将其添加到我的proguard配置中:
-libraryjars libs(!gson-2.1.jar,!RSAMobileSDK-1.01.jar;)
看不到它做任何事情。关于StackOverflow的其他问题和答案,我编辑android build.xml。
我这样做:(因为事实证明配置文件中的-libraryjars没有通过传递)
-libraryjars ${project.target.classpath.value};libs/gson-2.1.jar
仍然说文件是多重定义的。如果我可以让proguard忽略它,那么就不会在那里定义它。所以,我在build.xml中尝试这个: 替换这个:
-injars ${project.all.classes.value}
用这个:
-injars bin\proguard\original.jar
那会怎么样? 有用! 那么,为什么我必须在< proguard> android build.xml中的元素,我怎么能用配置文件做到这一点?
-injars <b>bin\proguard\original.jar</b>
-libraryjars ${project.target.classpath.value}<b>;libs/gson-2.1.jar</b>
答案 0 :(得分:0)
不要在任何配置文件中使用-injars或-library jar指定其他输入;构建过程已经为您指定了这些选项。您只会收到很多关于重复类文件的警告。
ProGuard确实会将您自己的代码与库一起处理。这就是它如何显着减小应用程序代码的大小。