【问题标题】:Build library project构建库项目
【发布时间】:2012-03-27 13:10:57
【问题描述】:

全部。 我创建了一个 android 库项目,当我从主项目中引用它时它可以完美运行。但是当我单独构建库项目时,它不包含 R.java 和资源。有没有办法用资源和 R.java 构建一个库项目?

【问题讨论】:

  • 如何分开构建库项目?
  • 我使用 NetBeans IDE 进行开发。右键单击项目并选择构建。构建的结果与使用主项目构建相同 - 库项目的bin目录下的jar文件没有r文件。

标签: android jar android-library


【解决方案1】:

现在不可能。

现在我们可以通过以下步骤创建一个纯二进制库项目:

  1. 使用您的源代码等创建一个 Android 库项目 - 这是您的主项目,您将从中创建一个版本 用于分发的图书馆项目
  2. 编译 Java 源代码(例如,ant compile)并将其转换为 JAR 文件
  3. 创建一个分发Android库项目,同 资源作为主库项目,但没有源代码
  4. 将JAR文件放入分发Android库项目的libs/ 目录 生成的分发 Android 库项目将拥有一切 主项目需要,只是没有源代码。

这个解决方案有一些限制:

  1. 我们仍然需要运送资源。
  2. 我们必须重写代码以避免使用 R. 值,因为它们 会错的。我们将不得不使用查找所有资源 ID getResources().getIdentifier() 和/或反射。

【讨论】:

    【解决方案2】:

    我使用 Eclipse 并且从未独立手动构建我的 Android 库项目,但我认为官方开发指南 here 中所述的开发注意事项应该可以回答您的问题:

    每个库项目都创建自己的 R 类

    当您构建依赖的应用程序项目时,库项目将被编译并与应用程序项目合并。每个库都有自己的 R 类,根据库的包名称命名。从主项目和库项目生成的R类在所有需要的包中创建,包括主项目的包和库的包。

    更新引用官方开发指南Library Projects的另一条注释:

    但是,库项目与标准 Android 应用程序项目的不同之处在于,您无法将其直接编译为自己的 .apk 并在 Android 设备上运行。同样,您不能将库项目导出到自包含的 JAR 文件,就像对真正的库所做的那样。相反,您必须通过在依赖应用程序中引用库并构建该应用程序来间接编译库。

    【讨论】:

    • 谢谢。但是 R 文件在主项目中创建,而不是在库的 jar 中。并且资源不会被打包到这个jar中。
    • @RomanBlack,除了宿主项目之外的库 jar 文件真的没有任何意义。 Android 库项目在运行时不作为 jar 文件引用,而是在构建宿主项目时编译其源(java、res、AndroidManifest.xml 等)并合并到宿主项目中(通过这样做使 Android SDK 仅过滤将使用的部分放入最终的 apk,从而减少 apk 文件大小并节省内存空间),在 Eclipse 等 IDE 中,构建宿主项目时会自动生成带有它编译类的 R.java。
    • @RomanBlack,Android 开发团队目前正在改进 Android 库项目设计,并承诺在下一个版本中支持将库项目导出为 jar 文件,查看here 了解更多详情。
    • 是的,我知道。但我必须创建带有封闭源代码的 android 库作为 jar 文件。创建包含 R 文件和资源的库并共享它是不可能的。现在我找到了一种分享编译源代码的方法,但是我的资源是开源的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 2011-08-20
    • 2011-11-06
    • 2011-03-27
    • 2018-02-19
    • 2016-06-19
    • 1970-01-01
    相关资源
    最近更新 更多