大佬教程收集整理的这篇文章主要介绍了android – 使用maven构建时,APK缺少一些类,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我特定构建环境的一些背景知识:
我正在使用Android maven plugin和this示例项目.该项目由父pom.xml组成,然后是三个子模块(项目)中每个子模块的pom.xml.每个子模块将父级定义为父级.
当我在原始下载的项目上运行mvn clean install时,它会在手机上构建和安装/运行.
但我没有将源添加到Eclipse中,它运行良好,使mvn构建脚本不再起作用(即apk较小且缺少类).
关于如何解决这个问题的任何想法将不胜感激.
这是父项的POM文件,之后是应用程序项目的POm.很抱歉发布这么大的代码块,但我不确定问题出在哪里.
更新对于遇到类似问题的人,我已经开始在位于here的Google Group [Maven Android Developers]进行转换.我可能会先得到答案.
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="@R_262_10107@://maven.apache.org/POM/4.0.0" xmlns:xsi="@R_262_10107@://www.w3.org/2001/XML@R_262_10906@ma-instance" xsi:@R_262_10906@maLOCATIOn="@R_262_10107@://maven.apache.org/POM/4.0.0 @R_262_10107@://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.simpligility.android.morse</groupId> <artifactId>morseflash-parent</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>pom</packaging> <name>MorseFlash - Parent</name> <properties> <server_@R_262_10906@ma>@R_262_10107@</server_@R_262_10906@ma> </properties> <dependencymanagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.1</version> </dependency> <dependency> <groupId>com.google.android</groupId> <artifactId>android</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>com.google.android</groupId> <artifactId>android-test</artifactId> <version>2.3.1</version> </dependency> </dependencies> </dependencymanagement> <build> <pluginManagement> <plugins> <plugin> <artifactId>maven-jarsigner-plugin</artifactId> <version>1.2</version> </plugin> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>2.5</version> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <version>3.4.1</version> <configuration> <sdk> <platform>10</platform> </sdk> <emulator> <avd>23</avd> <wait>10000</wait> <!--<options>-no-skin</options> --> </emulator> <zipalign> <verbose>true</verbose> </zipalign> <undeployBeforeDeploy>true</undeployBeforeDeploy> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-Helper-maven-plugin</artifactId> <version>1.5</version> </plugin> <!--This plugin's configuration is used to store Eclipse m2e setTings only. It has no influence on the Maven build itself. --> <plugin> <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId> <version>1.0.0</version> <configuration> <lifecycleMappingMetadata> <pluginEXECUTIONS> <pluginExecution> <pluginExecutionFilter> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <versionRange>[3.2.0,)</versionRange> <goals> <goal>manifest-update</goal> </goals> </pluginExecutionFilter> <action> <execute /> </action> </pluginExecution> </pluginEXECUTIONS> </lifecycleMappingMetadata> </configuration> </plugin> </plugins> </pluginManagement> </build> <profiles> <profile> <!-- the standard profile runs the instrumentation tests --> <id>standard</id> <activation> <activeByDefault>true</activeByDefault> </activation> <modules> <module>morse-lib</module> <module>morseflash-app</module> <module>morseflash-instrumentation</module> </modules> <properties> <!-- when i will try to enter this address the app will start :) --> <!-- for development i want to use my local host --> <!-- server @R_262_10906@ma is defined globally for all profiles but can be overridden here for the local profile --> <!-- this properties are good for all the maven modules --> <server_host>192.168.1.12</server_host> <server_path></server_path> </properties> </profile> <profile> <!-- the release profile does sign,proguard,zipalign ... but does not run instrumentation tests --> <id>release</id> <!-- via this activation the profile is automatically used when the release is done with the maven release plugin --> <activation> <property> <name>performRelease</name> <value>true</value> </property> </activation> <modules> <module>morse-lib</module> <module>morseflash-app</module> </modules> <properties> <!-- when i will try to enter this address the app will start :) --> <!-- for release i want to use my git --> <!-- server @R_262_10906@ma is defined globally for all profiles but can be overridden here for the local profile --> <!-- this properties are good for all the maven modules --> <server_host>github.com</server_host> <server_path>/jayway/maven-android-plugin-samples</server_path> </properties> </profile> </profiles> </project>
现在为app项目:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="@R_262_10107@://maven.apache.org/POM/4.0.0" xmlns:xsi="@R_262_10107@://www.w3.org/2001/XML@R_262_10906@ma-instance" xsi:@R_262_10906@maLOCATIOn="@R_262_10107@://maven.apache.org/POM/4.0.0 @R_262_10107@://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.simpligility.android.morse</groupId> <artifactId>morseflash-parent</artifactId> <version>1.0.0-SNAPSHOT</version> </parent> <artifactId>morseflash-app</artifactId> <packaging>apk</packaging> <name>MorseFlash - App</name> <properties> <environment>development</environment> </properties> <dependencies> <dependency> <groupId>com.simpligility.android.morse</groupId> <artifactId>morse-library</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.google.android</groupId> <artifactId>android</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.google.android</groupId> <artifactId>android-test</artifactId> <scope>provided</scope> </dependency> </dependencies> <build> <!-- <sourceDirectory>src</sourceDirectory> --> <finalName>${project.artifactID}</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <EXECUTIONS> <execution> <!-- use the copy resources instead of resources,which adds it to the eclipse buildpath --> <phase>initialize</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${project.basedir}/res</outputDirectory> <resources> <resource> <directory>${project.basedir}/src/templates/res</directory> <targetPath>${project.basedir}/res</targetPath> <filtering>true</filtering> </resource> </resources> </configuration> </execution> </EXECUTIONS> </plugin> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <extensions>true</extensions> <configuration> <manifest> <debuggable>true</debuggable> </manifest> </configuration> <EXECUTIONS> <execution> <id>manifestupdate</id> <phase>process-resources</phase> <goals> <goal>manifest-update</goal> </goals> </execution> <execution> <id>alignApk</id> <phase>package</phase> <goals> <goal>zipalign</goal> </goals> </execution> </EXECUTIONS> </plugin> </plugins> </build> <profiles> <profile> <id>development</id> <!-- using this since activeByDefault does not work well with multiple profiles --> <activation> <property> <name>environment</name> <value>!production</value> </property> </activation> <properties> <deployment.stage>In Development</deployment.stage> </properties> </profile> <profile> <id>production</id> <properties> <deployment.stage>In Production</deployment.stage> </properties> </profile> <profile> <id>release</id> <!-- via this activation the profile is automatically used when the release is done with the maven release plugin --> <activation> <property> <name>performRelease</name> <value>true</value> </property> </activation> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jarsigner-plugin</artifactId> <EXECUTIONS> <execution> <id>signing</id> <goals> <goal>sign</goal> <goal>verify</goal> </goals> <phase>package</phase> <inherited>true</inherited> <configuration> <removeExisTingSignatures>true</removeExisTingSignatures> <archiveDirectory /> <includes> <include>${project.build.directory}/${project.artifactID}.apk</include> </includes> <keystore>${sign.keystorE}</keystore> <alias>${sign.alias}</alias> <storepass>${sign.storepass}</storepass> <keypass>${sign.keypass}</keypass> <verbose>true</verbose> </configuration> </execution> </EXECUTIONS> </plugin> <!-- the signed apk then needs to be zipaligned and we activate proguard and we run the manifest update --> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <inherited>true</inherited> <configuration> <sign> <debug>false</debug> </sign> <zipalign> <skip>false</skip> <verbose>true</verbose> <inputApk>${project.build.directory}/${project.artifactID}.apk</inputApk> <outputApk>${project.build.directory}/${project.artifactID}-signed-aligned.apk </outputApk> </zipalign> <manifest> <debuggable>false</debuggable> <versionCodeAutoIncrement>true</versionCodeAutoIncrement> </manifest> <proguard> <skip>false</skip> </proguard> </configuration> <EXECUTIONS> <execution> <id>manifestupdate</id> <phase>process-resources</phase> <goals> <goal>manifest-update</goal> </goals> </execution> <execution> <id>alignApk</id> <phase>package</phase> <goals> <goal>zipalign</goal> </goals> </execution> </EXECUTIONS> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-Helper-maven-plugin</artifactId> <configuration> <artifacts> <artifact> <file>${project.build.directory}/${project.artifactID}-signed-aligned.apk</file> <type>apk</type> <classifier>signed-aligned</classifier> </artifact> <artifact> <file>${project.build.directory}/proguard/mapping.txt</file> <type>map</type> <classifier>release</classifier> </artifact> </artifacts> </configuration> <EXECUTIONS> <execution> <id>attach-signed-aligned</id> <phase>package</phase> <goals> <goal>attach-artifact</goal> </goals> </execution> </EXECUTIONS> </plugin> </plugins> </build> </profile> </profiles> </project>
参考this样本项目.@R_481_10673@下工作,以便在Eclipse和Maven中完成所有工作.
> cd进入每个项目{morse-lib,morseflash-app,morseflash-instrumentation}并运行mvn eclipse:eclipse.
>在Eclipse中单独导入每个项目.
不是* -app和* -instrumentation是Android项目而* -lib是一个
Java项目.所有项目都应设置为Java编译器1.6.
>对于Eclipse中的每个项目,右键单击 – >配置 – >转换为Maven
>对于项目{* -app,* -instrumentation},target / generated-sources / r – >右键单击 – >属性 – >资源 – >资源过滤器 – >添加组 – > {排除所有,文件和文件夹,所有子项(递归)}
>清理所有项目然后构建所有项目
>您现在应该能够将morseflash-app项目作为Android应用程序运行.
>从morseflash文件夹中的命令行(包含* -lib,* -app,* -instrumentation),你应该能够执行mvn clean install android:deploy来获取手机上的应用程序.
希望这有助于其他人.如果没有,请给我.
以上是大佬教程为你收集整理的android – 使用maven构建时,APK缺少一些类全部内容,希望文章能够帮你解决android – 使用maven构建时,APK缺少一些类所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。