java - 我能否以某种方式包含和使用给定 .jar 库的多个版本?

标签 java android

我明白这听起来可能很荒谬,但是是否有可能将两个不同版本的 .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/

相关文章:

android - Android:将音频和视频文件分组

java - 如果不是直接依赖项,我可以模拟对被测系统的依赖项吗?

java - Log4j 性能和对象创建

java - 单元测试异步操作

java:运行时相当于数字类型之间的转换

android - 如何获取水平 ScrollView 焦点元素的索引

android - 将 viewpager 与特定 fragment 一起使用

java - 在 imageview JavaFx 上显示图像

android - 是否可以在某些屏幕尺寸上支持两个方向,而在其他屏幕尺寸上不支持?

android - 如果单击复选框,我的 list 应该保存在 Xml 中如何?