Android Java - 如何防止多个dex定义?

时间:2014-08-15 03:54:15

标签: java android compiler-construction jar multiple-definition-error

基本上,我的产品是一个jar文件,我希望我的客户端解压缩它并将.class文件打包到他们的jar文件中,然后将他们的jar文件分发给他们的应用程序客户端。

因此,应用程序最终可能会使用包含相同类定义的两个不同jar文件。因此java编译器(或Android上的dex)会抱怨。

再说明一点:

  1. client1接受我的jar ==>解压缩==> jar1中的.class文件包
  2. client2带我的jar ==>解压缩==> jar2中的.class文件包
  3. App需要jar1和jar2 ==>问题!多个类的定义。
  4. 我该如何预防?

1 个答案:

答案 0 :(得分:1)

这里有一些方法:

1)不要这样做!通常,依赖关系不会以这种方式重新打包。相反,client1会为他们的客户提供你的jar(带版本号)和你的jar。对于client2也是如此。现在,如果client3正在使用client1和client2,他可以看到他们期望软件的版本是否匹配。如果没有,他们就麻烦了。

2)为每个客户端重新打包jar文件中的类。这就是当你把你的jar发给client1之前把所有的类放在com.my.package.client1中然后你把它们交给他们并让他们在访问你的jar时解决这个问题。这意味着可能重复使用client3和client2的客户端代码,但是您的软件的多个版本可以共存。

3)让client1和client2使用proguard重新打包jar中的所有类,然后再分发它们。这与proguard自动执行重写的答案2基本相同。这样做的另一个好处是让人们更难以对他们(和你的)代码进行逆向工程。