如何将Android库项目转换为外部JAR?

21

我有一个Android库项目,一直工作得很好,但现在我想将它“转换”为外部JAR文件。

我应该如何做?

任何Android库项目都可以转换为外部JAR文件吗?如果不能,有什么限制或限制条件吗?

2个回答

29
任何 Android 库项目都可以转换为外部 JAR 吗?
目前不行。
如果不能,有什么限制或约束吗?
如果你的库只是纯 Java 代码,没有资源文件,你可以像普通的 Java 一样,将.class 文件打成 JAR 包。
如果你的库使用了资源文件,你仍然可以按照上述方法创建一个 JAR 包。但是,你需要通过反射或 getIdentifier() 方法查找 R 值(例如 R.layout.main),而且你的资源文件不会被包含在 JAR 包中,必须单独分发。
未来,构建工具应该支持将库项目创建为可分发的 JAR 文件,包括资源文件在内。目前的构建工具确实会创建 JAR 文件,但它们并不是设计用于分发的,而是内部构建产物。

2
谢谢。我理解得对吗,将.class文件打成JAR包就像这样简单jar cf jar-file input-files?此外,您能详细说明一下通过getIdentifier()访问的资源如何分别分发吗? - uTubeFan
1
@uTubeFan:“我理解得对吗,将.class文件打包成JAR文件只需要使用jar cf jar-file input-files命令?” - 大概是这样。 我自己使用Ant的<jar>任务。 “此外,您能详细解释一下通过getIdentifier()访问的资源如何分别分发吗?” - 嗯,如果它们不在JAR文件中,而且JAR的重用者需要这些文件,则重用者需要以某种方式获取那些文件。 我建议使用包含JAR和'res/'树的ZIP归档。 - CommonsWare
嗨@uTubeFan,假设考虑一个名为MyTranslator的项目,我正在翻译一些文本,为此我已经导入了一个名为xyztranslator.jar的jar文件。现在我想将MyTranslator项目转换为一个**.jar文件,以便我可以使用MyTranslator项目中的所有类以及xyztranslator.jar中的所有类。简单地说,我的问题是如何将已经导入jar文件的Android应用程序导出为.jar文件**。 - KK_07k11A0585
我已经将Android库导出为jar文件,如何使用proguard进行混淆保护? - Crossle Song
@Hades:现在的重点更多地放在Gradle for Android计划中用于库项目的AAR上。要为不使用资源的库项目创建JAR,您需要添加自己的Gradle任务。 - CommonsWare

2

谢谢。在同一页中,还有一条款规定:“您需要 SDK 工具 r14 或更高版本才能使用新的库项目功能,该功能将每个库项目生成为其自己的 JAR 文件。”这是不是意味着如果我使用 SDK r14(或更新版本),您引用的限制就不存在了? - uTubeFan
2
说实话,我不确定。那个措辞似乎与我从下面引用的部分相矛盾,但这可能只是措辞不当。 - Sinjo
r14 为了能够导出 JAR 包重新设计了库项目的处理方式,但我仍然无法弄清楚如何在保留生成的资源的同时进行导出。 - Nathan Schwermann
我将 Android Library Project 打包成 jar 文件,如何使用 Proguard 进行混淆? - Crossle Song

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接