我明白这听起来可能很荒谬,但是是否有可能将两个不同版本的 .jar 库放入一个 Android 项目中(其中两个版本显然具有相同或重叠的包和类名称),并以某种方式明确指向一个在将库的类导入到我自己的 Java 源代码中时,它们有多少?
我的开发环境是带有 Gradle 的 Android Studio。
我考虑这样做的原因(如果可能的话)是因为我依赖于我的 Android 应用程序所使用的 USB 设备的闭源供应商提供的 .jar 驱动程序库。该供应商在其最新驱动程序中增加了对较新芯片版本的支持,但同时他们也放弃了对较旧芯片版本的支持。这是他们出于自己的充分理由做出的决定,而且不太可能被覆盖。我的一个想法是以某种方式在我的应用程序中携带库的旧版本和新版本,以便我可以继续支持旧硬件。
我想这样的事情在理论上是可行的,但这是一件复杂的事情,可能需要反编译一个 .jar 并更改包名称?
最佳答案
令我惊讶的是,我使用 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
是转换后的 .
关于java - 我能否以某种方式包含和使用给定 .jar 库的多个版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30110421/