2012-05-29 5 views
8

Ho l'obiettivo maven update-manifest che funziona nel mio progetto e aggiorno gli attributi che desidero modificare in base al profilo con cui sto confezionando; Sfortunatamente cambia il manifest che si trova nel controllo del codice sorgente. Vorrei cambiare il manifest che è impacchettato, ma lasciare la versione master da solo. Non vedo una versione di AndroidManifest sotto target/su cui posso puntarla. Sto usando l'androide-maven plug versione 3.2come faccio a modificare il mio AndroidManifest mentre è in fase di confezionamento da parte di Maven

risposta

20

Se si utilizzano configurazioni come manifestVersionCode o manifestVersionName per aggiornare manifesta, è così che è stato progettato e dovrebbe funzionare, scrive le modifiche alla AndroidManifest.xml originale.

Sembra che ciò di cui si ha veramente bisogno sia il manifest di filtro piuttosto che l'aggiornamento manifest. Il filtraggio delle risorse è un altro scenario di utilizzo supportato da Android-maven-plugin e frequentemente utilizzato.

AndroidManifest.xml Esempio:

<?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}"> 
... ... 

Esempio pom.xml:

<!-- 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> 

    ... ... 

Ora android-maven-plugin utilizzerà l'AndroidManifest.xml filtrata e lasciare l'AndroidManifest.xml originale invariata.

Spero che questo aiuti.

Aggiornamento:

si potrebbe essere necessario anche questo:

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

non sembra dare il via alla filtraggio prima che arrivi la fase in cui è necessario il manifesto filtrato .. ancora debug – danb

+0

bisogno di questo: Maven-risorse-plugin 2.5 inizializzare risorse danb

+0

@danb, sì, grazie per l'editing risposta. – yorkw

10

vi consiglio di usare manifesta-aggiornamento obiettivo di Maven-android-plug per raggiungere questo obiettivo:

<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> 

è necessario definire anche project.codeVersion:

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

E Maven aggiornerà il tuo 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 

Maggiori informazioni su Android: manifesti-update obiettivo here, è può trovare alcuni parametri utili lì.

Nota importante: Questa soluzione solo opere provenienti da riga di comando, il plugin di esecuzione non è ancora supportato da M2E-Android (si veda questo issue).

+2

Completamente sbagliato, questo modifica il file XML originale. –

+0

Questo è davvero lavoro per me anche se in questo modo modifica il file XML originale – acntwww

+0

Non necessariamente sbagliato. In alcuni casi la modifica del file XML originale è esattamente ciò che si vuole che accada. – Matthias

Problemi correlati