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

Posted

技术标签:

【中文标题】如何将 Android 库项目转换为外部 JAR?【英文标题】:How to Convert an Android Library Project to an External JAR? 【发布时间】:2011-12-19 21:41:40 【问题描述】:

我有一个运行良好的 android 库项目,但现在我有兴趣将其“转换”为外部 JAR。

我该怎么做?

可以将任何 Android 库项目转换为外部 JAR 吗?如果不是,有什么限制或限制?

【问题讨论】:

【参考方案1】:

任何 Android 库项目都可以转换为外部 JAR 吗?

现在不行。

如果不是,有什么限制或限制?

如果您的库是纯 Java 代码,没有资源,您可以使用 .class 文件创建 JAR,就像使用常规 Java 一样。

如果您的库使用资源,您仍然可以像上面那样创建 JAR。但是,您需要通过反射或getIdentifier() 查找R 值(例如R.layout.main),并且您的资源不会打包在JAR 中,而是必须单独分发。

在未来,构建工具应该支持从库项目中创建可分发的 JAR 文件,并包含资源。当前的构建工具确实会创建 JAR,但它们并不是为分布式而设计的,而是目前的内部构建工件。

【讨论】:

谢谢。我是否正确理解从 .class 文件创建 JAR 就像 jar cf jar-file input-files 一样简单?另外,能否详细说明一下getIdentifier()访问的资源是如何分开分配的? @uTubeFan:“我是否正确理解从 .class 文件创建 JAR 就像 jar cf jar-file input-files 一样简单?” ——大概。我自己使用 Ant <jar> 任务。 “另外,你能详细说明一下通过 getIdentifier() 访问的资源是如何分开分布的吗?” -- 嗯,好吧,如果它们不在 JAR 文件中,并且 JAR 的重用者需要这些文件,那么重用者需要以某种方式获取这些文件。我推荐一个包含 JAR 和 res/ 树的 ZIP 存档。 嗨@uTubeFan 假设考虑一个我正在翻译一些文本的项目MyTranslator,因为我已经导入了一个jar 文件xyztranslator.jar。现在我想将 MyTranslator 项目转换为 .jar 文件,这样我就可以使用 MyTranslator 项目中的所有类以及xyztranslator.jar。只是我的问题是如何将 android 应用程序导出到已经导入 jar 文件的 .jar 文件 我已经将Android库导出到jar,如何保护它? @Hades:作为 Gradle for Android 计划的一部分,现在的重点更多地放在库项目的 AAR 上。要为不使用资源的库项目创建 JAR,您需要添加自己的 Gradle 任务。【参考方案2】:

http://developer.android.com/guide/developing/projects/index.html#LibraryProjects 声称您不能将这些导出到外部 JAR。具体报价:

同样,您不能将库项目导出到独立的 JAR 文件,就像您对真正的库所做的那样。相反,您必须 通过引用库中的库间接编译库 依赖应用程序并构建该应用程序。

【讨论】:

谢谢。在同一页面中,还有一个条款说:“您需要 SDK Tools r14 或更新版本才能使用新的库项目功能,该功能将每个库项目生成到自己的 JAR 文件中。”这是否意味着如果我使用 SDK r14(或更高版本),您引用的限制不再存在? 说实话,我不确定。该措辞似乎与我从下层引用的部分相矛盾,尽管它可能只是措辞不佳。 r14 重新设计了他们处理库项目的方式,以便能够导出 jar,但我仍然不知道如何在保留生成的资源的同时做到这一点。 我已经将 Anroid Libary Project 打包到 jar 中,如何保护它?

以上是关于如何将 Android 库项目转换为外部 JAR?的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio - 导入外部库/Jar

如何使用 Eclipse 中包含的外部库创建 jar?

如何将 AAR 转换为 JAR

如何使用外部库运行 jar

在 IntelliJ IDEA 中将外部库添加到工件 jar

如何在 Android 项目中使用外部 JAR?