我很欣赏这听起来很荒谬,但是有可能将.jar库的两个不同版本放到一个Android项目中(两个版本显然都有相同或重叠的包和类名),并以某种方式明确指向一个将库的类导入我自己的Java源代码时,它们是什么?
我的开发环境是带有Gradle的Android Studio。
我考虑这样做的原因(如果可能的话)是因为我依赖一个闭源供应商提供的.jar驱动程序库,用于我的Android应用程序使用的USB设备。该厂商在其最新的驱动程序中增加了对更新芯片版本的支持,但与此同时,他们已经放弃了对旧版芯片的支持。这是他们为自己的理由做出的决定,不太可能被逆转。我的想法是以某种方式在我的应用程序中携带新旧版本的库,以便我可以继续支持旧硬件。
我认为这样的事情在理论上是可行的,但是一个复杂的事情,可能需要一个.jar被反编译并且包名称改变了?
答案 0 :(得分:6)
令我惊讶的是,我很快就使用CommonsWare建议的jarjar
实用程序取得了成功。
理解如何做到这一点的关键是本质量保证:
Hand Edit A Jar to Change Package Names
我使用上面给出的指示重命名了我的.jar
之一,现在让他们在我的项目中并排坐着。
我不想复制SO内容,但为了完整起见,我做了以下内容:
获取最新版本的jarjar。
创建了一个名为rules.txt
的配置文件,其中包含一行:
rule uk.co.dog.** uk.co.cat.@1
这只是一个例子。给定包uk.co.dog.*
的.jar后,dog
将更改为cat
。显然,改变它以适应您的实际情况。
然后使用命令行:
java -jar jarjar.jar process rules.txt in.jar out.jar
in.jar
的来源是.jar,而out.jar
是转化的。