【问题标题】:Android Maven Plugin apklib Mojo doesn't include compiled R in resulting apklibAndroid Maven 插件 apklib Mojo 在生成的 apklib 中不包含已编译的 R
【发布时间】:2012-01-11 17:02:19
【问题描述】:

我正在尝试将 Android /res 文件夹提取到一个单独的项目中,该项目作为 apklib 依赖项包含在我的主项目中。问题是虽然/res 的内容包含在生成的.apklib 中,但编译后的R.class 却没有。更令人困惑的是mvn clean install命令生成.apklib以及.jar文件,而jar文件有R.class,但没有/res文件夹的内容。如何生成包含我的所有资源以及已编译类的单个包(.jar 或 .apklib)?

pom.xml

<packaging>apklib</packaging>
...
<plugin>
  <groupId>com.jayway.maven.plugins.android.generation2</groupId>
  <artifactId>android-maven-plugin</artifactId>
  <configuration>
    <attachSources>true</attachSources>
    <sdk>
      <platform>12</platform>
    </sdk>
  </configuration>
<plugin>

生成以下内容

.jar

./morseflash-resources.jar
  com/.../R.class    

.apklib

./morseflash-resorces.apklib
  META-INF
  AndroidManifest.xml
  res/
      layout/
      values/

我希望将所有这些内容放在一个文件中,并且希望能够将其列为我的主要 Android 项目中的依赖项。这可能吗?如果可以,我该如何实现?

【问题讨论】:

    标签: android maven apk


    【解决方案1】:

    android-maven-plugin 应该是这样工作的,要将库项目添加为主项目的依赖项,请将以下依赖项添加到主项目的 pom.xml 中:

    <dependencies>
      <dependency>
        <groupId>com.company.common.lib</groupId>
        <artifactId>common-lib</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <type>apklib</type>
      </dependency>
    </dependencies>
    

    请注意,这与常规 jar 依赖项不同,apklib 只是您所有 srcres 文件夹的压缩包,具有 Android/Eclipse 库项目的标准目录结构布局(src/com/... 而不是src/main/java/com/...)。这样做的原因是支持在其他非 mavenlized 项目中使用 apklib(查看ApkLib documentation 了解详细信息)。您不会将库添加为已编译的 jar 依赖项,而是将库依赖项添加为源代码和资源,只需来自 zip 文件。

    在做mvn clean install时,在android-maven-plugin:3.0.0:generate-sources目标中,android-maven-plugin会解压你的apklib依赖,并在编译你的项目之前将源代码和资源合并到你的主项目中;这就是 Android 库项目应该如何工作的。图书馆项目不仅仅是简单地编译所有内容。为了节省内存和磁盘空间,仅将使用过的部分复制并编译到最终的 apk 中。您可以在主项目中轻松覆盖资源,因为它们只是在最终编译之前的合并步骤替换库内容。

    这很丑陋,但目前情况就是这样,Android 开发团队目前正在处理这个问题,并将在未来支持 jar 依赖项,可能在 r17 中(我想这也需要 android-maven-plugin 更改/升级),更多详情请参阅他们的官方博客文章“Changes to Library Projects in Android SDK Tools, r14 ”。

    【讨论】:

    • 谢谢。这比我在 android-maven-plugin 文档或关于 Android 任务的 Sonatype 文档中找到的任何内容都更有帮助。
    • 来自链接文档:“弃用。您应该改用 Android 存档资源 (AAR)。apklib 是作为权宜之计引入的,以允许有限的捆绑和共享 Android 库资源。现在 Android 团队已经发布了包含编译代码的 AAR 格式,您应该改用它。"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 2011-11-22
    • 2013-05-23
    • 2012-06-17
    • 1970-01-01
    相关资源
    最近更新 更多