首页 文章

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

提问于
浏览
1

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

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

为了说明一点:

  • client1在jar1中获取我的jar ==> decompress ==> package .class文件

  • client2在jar2中获取我的jar ==> decompress ==> package .class文件

  • App需要jar1和jar2 ==>问题!多个类的定义 .

我该如何预防呢?

1 回答

  • 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基本相同 . 这样做的另一个好处是让人们更难以对他们(和你的)代码进行逆向工程 .

相关问题