如何解决proguard,因为它需要libs运行,但说"重复"如果他们提供

时间:2014-03-11 19:02:24

标签: proguard

自上次更新后出现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>

1 个答案:

答案 0 :(得分:0)

不要在任何配置文件中使用-injars或-library jar指定其他输入;构建过程已经为您指定了这些选项。您只会收到很多关于重复类文件的警告。

ProGuard确实会将您自己的代码与库一起处理。这就是它如何显着减小应用程序代码的大小。