2012-05-29 9 views
8

Tengo el manifiesto de actualización de objetivo maven trabajando en mi proyecto y actualizando los atributos que quiero cambiar según el perfil con el que estoy empaquetando; Lamentablemente, cambia el manifiesto que está en control de fuente. Me gustaría que cambie el manifiesto que está empaquetado, pero deje la versión maestra sola. No veo una versión de AndroidManifest como objetivo/a la que pueda apuntar. Estoy utilizando la versión plugin de android-Maven 3.2cómo puedo cambiar mi AndroidManifest ya que está empaquetado por maven

Respuesta

20

Si utiliza configuraciones como manifestVersionCode o manifestVersionName para actualizar manifiesto, esta es la forma en que se diseña y se supone que funciona, escribe los cambios en el AndroidManifest.xml originales.

Parece que lo que realmente necesita es un manifiesto de filtro en lugar de un manifiesto de actualización. El filtrado de recursos es otro escenario de uso soportado por android-maven-plugin y de uso frecuente.

AndroidManifest.xml muestra:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.mycompany.myapp" 
    android:versionCode="${app.version.code}" 
    android:versionName="${app.version.name}"> 
... ... 

pom.xml muestra:

<!-- value to be substituted in manifest --> 
<properties> 
    <app.version.code>1</app.version.code> 
    <app.version.name>1.0.0-SNAPSHOT</app.version.name> 
</properties> 

... ... 

<build> 
    <resources> 
    <!-- filter manifest and put filtered file in target/filtered-manifest/ --> 
    <resource> 
     <directory>${project.basedir}</directory> 
     <filtering>true</filtering> 
     <targetPath>${project.build.directory}/filtered-manifest</targetPath> 
     <includes> 
     <include>AndroidManifest.xml</include> 
     </includes> 
    </resource> 
    </resources> 

    ... ... 

    <plugins> 
    <plugin> 
     <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
     <artifactId>android-maven-plugin</artifactId> 
     <extensions>true</extensions> 
     <configuration> 
     <undeployBeforeDeploy>true</undeployBeforeDeploy> 
     <!-- tell build process to use filtered manifest --> 
     <androidManifestFile>${project.build.directory}/filtered-manifest/AndroidManifest.xml</androidManifestFile> 
     </configuration> 
    </plugin> 

    ... ... 

Ahora android-maven-plugin se utilice el AndroidManifest.xml filtrada y dejar el AndroidManifest.xml originales sin cambios.

Espero que esto ayude.

Actualización:

que puede hacerle falta esto también:

<plugin> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.5</version> 
     <executions> 
      <execution> 
       <phase>initialize</phase> 
       <goals> 
        <goal>resources</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 
+0

no parece poner en marcha el filtrado antes de que llegue a la etapa en la que necesita el manifiesto filtrada .. Todavía depuración necesaria – danb

+0

esto: maven-recursos-plugin 2.5 inicializar recursos danb

+0

@danb, sí, gracias por la respuesta de edición. – yorkw

10

me recomiendan usar manifiesta actualización objetivo de experto-android-plugin de lograr esto:

<plugins> 
    <plugin> 
     <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
     <artifactId>android-maven-plugin</artifactId> 
     <version>3.3.2</version> 
     <!-- This is for maven update properties in AndroidManifest file. Working outside eclipse. --> 
     <executions> 
      <execution> 
       <id>update-manifest</id> 
       <phase>process-resources</phase> 
       <goals> 
        <goal>manifest-update</goal> 
       </goals> 
       <configuration> 
        <manifest> 
         <versionCode>${project.codeVersion}</versionCode> 
         <versionName>${project.version}</versionName> 
        </manifest> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
</plugins> 

es necesario definir también project.codeVersion:

<properties> 
    <project.codeVersion>1</project.codeVersion> 
</properties> 

Y Maven actualizar su AndroidManifest.xml:

[INFO] --- android-maven-plugin:3.3.2:manifest-update (update-manifest) @ myapp --- 
[INFO] Attempting to update manifest d:\dsv\project\MyApp\AndroidManifest.xml 
[INFO] Setting android:versionName to 0.0.4 
[INFO] Setting android:versionCode to 1 
[INFO] Made changes to manifest file, updating d:\...\MyApp\AndroidManifest.xml 

Más información sobre Android: manifiesta actualización objetivo here, se puede encontrar algunos parámetros útiles allí.

Nota importante: Esta soluciónsólo obras de línea de comandos, la ejecución de plugins todavía no está soportado por M2e-androide (ver este issue).

+2

Totalmente erróneo, esto modifica el archivo XML original. –

+0

Esto realmente me sirve aunque modifique de esta forma el archivo XML original – acntwww

+0

No necesariamente es incorrecto. En algunos casos, modificar el archivo XML original es exactamente lo que uno quiere que suceda. – Matthias

Cuestiones relacionadas