1

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

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

为了进一步说明:

  1. client1 将我的 jar ==> 解压缩 ==> 将 .class 文件打包到 jar1 中
  2. client2 将我的 jar ==> 解压缩 ==> 将 .class 文件打包到 jar2 中
  3. 应用程序需要 jar1 和 jar2 ==> 问题!类的多个定义。

我该如何防止呢?

4

1 回答 1

1

这里有几种方法:

1)不要这样做!通常依赖项不会以这种方式重新打包。相反,client1 会将您的 jar(带有版本号)和您的 jar 交付给他们的客户。客户端 2 也一样。现在,如果 client3 正在使用 client1 和 client2,他可以查看他们期望的软件版本是否匹配。如果没有,他们就有麻烦了。

2) 为每个客户端重新打包 jar 文件中的类。那就是当您将 jar 给 client1 时,将所有类放在 com.my.package.client1 中,然后再将其提供给它们,并在访问您的 jar 时让它们从该包中工作。这意味着使用 client1 和 client2 的 client3 可能存在重复代码,但您的软件的多个版本可以共存。

3)让client1和client2在分发它们之前使用proguard从你的jar中重新打包所有类。这与答案 2 基本相同,只是由 proguard 自动进行重写。这还有一个额外的好处,就是让人们更难对他们(和你的)代码进行逆向工程。

于 2014-08-15T08:33:17.940 回答