我正在尝试将Android文件夹提取到一个单独的项目中,该项目作为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项目中将其作为依赖项列出。这是可能的吗?如果有,我怎样才能做到呢?
发布于 2012-01-11 21:15:07
这是android 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只是所有src和res文件夹的压缩,这些文件夹具有Android/Eclipse项目的标准目录结构布局(src/com/...而不是src/main/java/com/...)。其原因是支持在其他非mavenlized项目中使用apklib (有关详细信息,请参阅ApkLib文档 )。您不是将库添加为编译后的jar依赖项,而是将库依赖项添加为源代码和资源,只需从zip文件中添加即可。
在执行mvn clean install时,在android-maven-plugin:3.0.0:generate-sources目标中,Android plugin将解压缩apklib依赖项,并在编译项目之前将源代码和资源合并到主项目中;这就是Android项目的工作方式。“图书馆项目”不仅仅是编译所有的东西。为了节省内存和磁盘空间,只有使用过的部分被复制并编译到最终的apk中。您可以轻松地覆盖主项目中的资源,因为它们只是在最终编译之前的合并步骤中替换库内容。
这是丑陋的,但这是目前的工作方式,Android团队目前正在进行这方面的工作,并将在未来支持jar依赖,可能在r17中(我认为这也需要android插件更改/升级),更多细节在他们的官方博客帖子"对Android工具中的库项目的更改,r14“中。
https://stackoverflow.com/questions/8823392
复制相似问题