gpt4 book ai didi

Android Maven 插件 apklib Mojo 在生成的 apklib 中不包含已编译的 R

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:10:14 28 4
gpt4 key购买 nike

我正在尝试将 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-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 插件 apklib Mojo 在生成的 apklib 中不包含已编译的 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8823392/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com