【问题标题】:How reusable Android libraries operate (development, deployment etc)可重用的 Android 库如何运作(开发、部署等)
【发布时间】:2011-05-28 06:48:00
【问题描述】:

我正在尝试为我的 Android 项目创建可重用的库。图书馆将包括资源。不幸的是,我找不到关于 Android 库如何运作的任何体面的解释。

Android 参考只是说明了如何设置 Eclipse 项目和 Ant 项目。我正在使用 Maven 和 IntelliJ。如果我能找到任何关于所有部分如何协同工作的合适描述,我会想出如何设置它们。

所以我想知道是否有人想选择并尝试解释它。以下是我的一些未决问题。

假设我有一个项目AndroidApp,它有AndroidManifest.xml 和包app.foo 并产生AndroidApp.apk

我也有项目AndroidLib 和包app.barAndroidManifest.xml 中的 AndroidLib 需要什么?只是声明包就足够了还是应该有其他东西?

现在,我想同时拥有这两个资源,并从AndroidApp 引用AndroidLib 中的资源。我只是打电话给lib.bar.R吗?一些帖子表明不会有 id 冲突。是真是假?

AndroidLib 的可交付工件是什么?难道也是apk?如何部署两者?或者更重要的是,我可以生成包含AndroidAppAndroidLib 的单个apk 吗?

项目在开发环境中如何相互关联?例如,在 IntelliJ 中,我尝试只在 AndroidApp 中包含带有 AndroidLib 的模块,但它只是将资源编译到 AndroidApp 中。 (可能我错过了uses-libary)。如果我使用 javac 和 Android 工具,顺序是什么?

还有什么值得知道的吗?

无论如何。如果有人能分享这方面的知识库,我将不胜感激。

【问题讨论】:

    标签: java android compilation libraries


    【解决方案1】:

    我已经写了一篇详细的帖子:Android Application, Android Libraries and Jar Libraries

    如果你想模仿原始 Android 构建系统的行为方式,那么最好的方法是运行

    ant debug -d
    

    在使用 Android 库(或 Android 库)的项目上。

    这将为您提供所有命令行 ant 运行以创建 R.java 文件、编译代码并打包最终的 .apk 文件。这基本上是您现在可以找到的最佳参考。但请注意,Android 的构建系统正在不断发展,您需要使您的构建系统与原始系统保持同步。

    【讨论】:

    • 很棒的博文!正是我想要的。
    • 本篇博文与《Pro Android 3》一书(起始页387)完美结合,讲解Android Library
    【解决方案2】:

    好的,我不是这方面的专家,但这是我的想法(可能是错误的):

    据我所知,严格来说,Android 上并没有真正的“库”之类的东西。基本上有三种选择:

    1. 让“Lib”项目成为“普通”Java 项目,并将该项目添加到“App”项目的构建路径中。然后,“Lib”只能包含 Java 代码,这些代码被正常编译并添加到“App”的 APK 中。由于在设备上运行的应用程序无法访问另一个应用程序的代码,如果您想在第二个 Android 应用程序中重用“Lib”,则必须在其 APK 中包含(编译的)lib 代码的副本。这也意味着lib不能包含任何资源,因为它们需要在“App”项目的相应目录中。

    2. 与 #1 类似,但您将 Lib 代码编译为常规 Java 库 (jar),然后将其复制/编译到“App”项目的 lib 目录中。除此之外,它具有与 #1 相同的限制,因此您创建的任何应用都必须在其 APK 中包含 JAR 的副本。

    3. 让“Lib”项目成为一个成熟的独立应用程序,并使用自定义 Intent 定义一个 API,让“Lib”和“App”之间的所有通信都运行在它们之上。这需要单独分发“Lib”和“App”,以便用户需要手动安装两者。但是,这允许您创建额外的应用程序,这些应用程序可以重用“Lib”应用程序的功能,而无需包含重复代码。

    【讨论】:

    • 感谢您的回答。 the lib can contain any resources 你的意思是can't?在那之前你说The "Lib" can then only contain Java code
    • 是的,这是一个错字。已更正。
    【解决方案3】:

    我最近在 Maven Android 插件的示例项目中合并了库项目支持。只需查看它们的设置方式,即可了解它们是如何工作的。

    https://github.com/jayway/maven-android-plugin-samples

    【讨论】:

    • 我昨天刚试过。 beta-4 坏了,我什至提交了一个错误。但是我从代码编译的最新快照很好。插件很棒!谢谢。
    • 我们计划尽快发布新版本,以便届时解决您的问题;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 2021-11-30
    相关资源
    最近更新 更多