不能使用名称中给定版本的maven构建apk

时间:2012-01-27 14:48:55

标签: android maven build apk

我尝试使用属性文件来读取属性,以便在使用maven构建时将这些值设置为apk。

我已经使用了 - >>>>>>

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.0-alpha-1</version>
            <executions>
                <execution>
                    <phase>initialize</phase>
                    <goals>
                        <goal>read-project-properties</goal>
                    </goals>
                    <configuration>
                        <files>
                            <file>${basedir}/buildNumber.properties</file>
                        </files>
                    </configuration>
                </execution>
            </executions>
        </plugin>


<build>
    <sourceDirectory>src</sourceDirectory>
    <finalName>myapk.${majorversion}.${minor_version}.${patch_version}.${maven.build.timestamp}</finalName>

文件:buildNumber.properties

major_version=01
minor_version=00
patch_version=00

这生成myapk.01.00.00.20120127-2010.jar但apk是myapk。$ {major_version} .a。$ {minor_version}。$ {patch_version} .20120127-2010.apk

让我知道我在这里缺少什么..?

1 个答案:

答案 0 :(得分:0)

我不知道确切的原因,但看起来properties-maven-plugin可以替换pom.xml中properties属性下正确定义的属性值,maven只能识别pom.xml中显式定义的属性名称,下面的pom对我有用:

<properties>
  <!-- use property name defined in your buildNumber.properties -->
  <external.build.version>${major_version}</external.build.version>
</properties>

... ...

<build>
  <sourceDirectory>src</sourceDirectory>
  <!-- use property name defined earlier in this pom.xml -->
  <finalName>myapk.${external.build.version}</finalName>

... ...

修改
从我的角度来看,maven的预定义构建生命周期是相当独特的,特别是当与其他构建工具(如ADT)集成时,用于生成apk的pom版本受到限制,此外,来自plugin documentation,当前版本的android-maven-plugin没有提供任何用于在apk目标期间自定义最终apk名称的配置。发布的类似讨论here最终得出的答案并不那么完美。

作为最后一个镜头,android-maven-plugin提供了在zipalign目标期间自定义最终apk名称的选项:

<plugin>
  <groupId>com.jayway.maven.plugins.android.generation2</groupId>
  <artifactId>android-maven-plugin</artifactId>
  <extensions>true</extensions>
  <configuration>
    <sdk>
      <platform>13</platform>
    </sdk>
    <undeployBeforeDeploy>true</undeployBeforeDeploy>
    <zipalign>
      <verbose>true</verbose>
      <inputApk>${project.build.directory}/${project.artifactId}-${project.version}.apk</inputApk>
      <!-- directly use property name defined in external properties file here -->
      <outputApk>${project.build.directory}/${project.artifactId}-${major_version}-aligned.apk</outputApk>
    </zipalign>
  </configuration>
  <executions>
    <execution>
      <id>alignApk</id>
      <phase>package</phase>
      <goals>
        <goal>zipalign</goal>
      </goals>
    </execution>
  </executions>
</plugin>

这可能是一个解决方案如果您使用maven zipalign你的最终apk(我想你这样做),你将获得所有三个输出文件(.ap_和.apk和.jar)以默认的$ {project.version}结束加上另一个带有$ {major_version} -aligned的apk结尾,但只有那三个默认的$ {project.version}将安装在maven中央存储库中。