2011-12-22 18 views
5

Mi piacerebbe creare due versioni della mia applicazione Android utilizzando un file Apache ant. Il problema è che entrambe le versioni sono identiche tranne la pubblicità nella versione lite. Ho letto sull'uso di Configurations con le versioni di debug di formiche a build.Ant Ant Android

La seguente classe definisce alcune costanti a cui è possibile fare riferimento all'interno dell'applicazione.

public class Config { 
    // Whether or not to include logging in the app. 
    public final static boolean LOGGING = true; 
} 

E qui è un esempio su come utilizzare queste costanti per determinare se la registrazione è abilitata o meno.

if (Config.LOGGING) { 
    Log.d(TAG, "[onCreate] Success"); 
} 

Ora posso abilitare e disabilitare la registrazione nel mio file di proprietà.

# Turn on or off logging. 
config.logging=true 

che non funziona, perché prima di utilizzare questo config devo creare un secondo file di configurazione e utilizzare filterset e la copia.

public class Config { 
    // Whether or not to include logging in the app. 
    public final static boolean LOGGING = @[email protected]; 
} 

Questo è piuttosto facile, ma come potrei usarlo per costruire due versioni della mia applicazione con e senza pubblicità. E come posso cambiare i nomi dei pacchetti usando formica, quindi lo android market accetta entrambi i pacchetti (completo e Lite).


Grazie, per i suggerimenti, ma ho ancora qualche problema.

Sono riuscito a scrivere alcuni obiettivi di base che ripuliscono le mie build e copiare tutti i file necessari per creare l'applicazione in due cartelle/full e/lite. Quindi ho due directory con lo stesso contenuto. Ora rinominare tutte le corrispondenze del nome del pacchetto delle applicazioni in tutti i file * .java e AndroidManifest (preparazione del target).

Per creare realmente due versioni diverse, ora dovrei includere il codice dal mio primo post. Ma come devo fare questo e come posso costruire entrambe le versioni nel target di rilascio e scrivere i file * .apk risultanti nel comando di compilazione?

Infine ... Questo è tutto ciò che devo fare per creare * .apks funzionanti che sarebbero accettati dal mercato Android?

<?xml version="1.0" encoding="UTF-8"?> 
<project name="my.application" default="help" basedir="."> 
    <!-- Load the custom property files --> 
    <property file="build.properties" /> 
    <property file="passwords.properties" /> 

    <!-- Set global properties for this build --> 
    <property name="my.application.pkg" value="my.application"/> 
    <property name="my.application.pkg.full" value="my.application.full"/> 
    <property name="my.application.pkg.lite" value="my.application.lite"/> 

    <property name="my.application" location="."/> 
    <property name="my.application.build" location="build"/> 
    <property name="my.application.src" location="src"/> 
    <property name="my.application.res" location="res"/> 
    <property name="my.application.gen" location="gen"/> 

    <property name="my.application.full" location="full"/> 
    <property name="my.application.full.src" location="full/src"/> 
    <property name="my.application.full.res" location="full/res"/> 
    <property name="my.application.full.gen" location="full/gen"/> 
    <property name="my.application.full.build" location="full/build"/> 

    <property name="my.application.lite" location="lite"/> 
    <property name="my.application.lite.build" location="lite/build"/> 
    <property name="my.application.lite.src" location="lite/src"/> 
    <property name="my.application.lite.res" location="lite/res"/> 
    <property name="my.application.lite.gen" location="lite/gen"/> 

    <!-- Create and update the local.properties file --> 
    <loadproperties srcFile="local.properties" /> 

    <!-- Load the ant.properties file --> 
    <property file="ant.properties" /> 

    <!-- Load the project.properties file --> 
    <loadproperties srcFile="project.properties" /> 

    <!-- Quick check on sdk.dir. --> 
    <fail 
     message="sdk.dir is missing." 
     unless="sdk.dir" /> 

    <!-- Version-tag: 1 --> 
    <import file="${sdk.dir}/tools/ant/build.xml" /> 

    <target name="release" depends="report, prepare"> 
     <echo>Building the target!</echo> 
    </target> 

    <target name="prepare" depends="cleanup" > 
     <!-- Copy the Manifest.xml to the full copy --> 
     <copyfile src="${my.application}/AndroidManifest.xml" 
      dest="${my.application.full}/AndroidManifest.xml" /> 

     <!-- Copy the source files to the full copy --> 
     <copy todir="${my.application.full.src}" overwrite="true"> 
      <fileset dir="${my.application.src}" /> 
     </copy> 

     <!-- Copy the resources to the full copy --> 
     <copy todir="${my.application.full.res}" overwrite="true"> 
      <fileset dir="${my.application.res}" /> 
     </copy> 

     <!-- Copy the generated to the full copy --> 
     <copy todir="${my.application.full.gen}" overwrite="true"> 
      <fileset dir="${my.application.gen}" /> 
     </copy> 

     <!-- Replace the package name in the full manifest file --> 
     <replaceregexp file="${my.application.full}/AndroidManifest.xml" 
      match='package="(.*)"' 
      replace='package="${my.application.pkg.full}"' 
      byline="false" /> 

     <!-- Change the package name in all Java files --> 
     <replaceregexp flags="g" byline="false"> 
      <regexp pattern="${my.application.pkg}" /> 
      <substitution expression="${my.application.pkg.full}" /> 
      <fileset dir="${my.application.full.src}" includes="**/*.java" /> 
     </replaceregexp> 

     <!-- Copy the Manifest.xml to the lite copy --> 
     <copyfile src="${my.application}/AndroidManifest.xml" 
      dest="${my.application.lite}/AndroidManifest.xml" /> 

     <!-- Copy the source files to the lite copy --> 
     <copy todir="${my.application.lite.src}" overwrite="true"> 
      <fileset dir="${my.application.src}" /> 
     </copy> 

     <!-- Copy the resources to the lite copy --> 
     <copy todir="${my.application.lite.res}" overwrite="true"> 
      <fileset dir="${my.application.res}" /> 
     </copy> 

     <!-- Copy the generated to the lite copy --> 
     <copy todir="${my.application.lite.gen}" overwrite="true"> 
      <fileset dir="${my.application.gen}" /> 
     </copy> 

     <!-- Replace the package name in the lite manifest file --> 
     <replaceregexp file="${my.application.lite}/AndroidManifest.xml" 
      match='package="(.*)"' 
      replace='package="${my.application.pkg.lite}"' 
      byline="false" /> 

     <!-- Change the package name in all Java files --> 
     <replaceregexp flags="g" byline="false"> 
      <regexp pattern="${my.application.pkg}" /> 
      <substitution expression="${my.application.pkg.lite}" /> 
      <fileset dir="${my.application.lite.src}" includes="**/*.java" /> 
     </replaceregexp> 
    </target> 

    <!-- Deletes all directories, not needed anymore after compiling the source files --> 
    <target name="cleanup"> 
     <!-- Delete the full version build dir --> 
     <delete dir="${my.application.full}"/> 
     <!-- Delete the lite version build dir --> 
     <delete dir="${my.application.lite}"/> 
     <!-- Delete the *.apk file --> 
     <delete file="my.application.full.apk"/> 
     <!-- Delete the *.apk file --> 
     <delete file="my.application.lite.apk"/> 
    </target> 
</project> 
+0

Hai trovato qualche soluzione? Sono bloccato sullo stesso problema. Per favore, potresti condividere se hai riparato questo? – Mac

+0

Non proprio. Ho distribuito il programma senza una versione leggera. Ma sarei felice di trovare una soluzione funzionante. – Phidelux

risposta

3

Ci sono diversi modi in cui è possibile ottenere ciò che si richiede.

Qui ci sono un paio di idee che ho usato in passato,

1) Avere due 'teste' applicazione che tirano in una libreria Android comune. Ogni testa inizializza i dati statici che configurano la libreria in modo che si comporti come lite o come versione completa dell'applicazione. Questo ha il vantaggio che è possibile eseguire la build dai progetti Eclipse e con Ant.

2) Avere due obiettivi di compilazione separati che condividono obiettivi di compilazione comuni per creare due file apk separati. Nello script di build Ant ha creato due versioni dell'APK. Uno che è la versione completa e poi l'altro che costruisce la versione lite. La differenza tra i due obiettivi è che essi costruiscono usando file leggermente diversi (copiando, indirizzando a directory diverse o modificando con script).

Questo può essere fatto in Ant usando obiettivi e proprietà.

Se al livello più alto della tua build hai un obiettivo di rilascio a seconda di altri due bersagli.

ad es.

<target name="release" 
    depends="release-Full, release-Lite"> 
</target> 

<target name="release-Full"> 
    <ant antfile="thisbuild.xml" inheritAll="true" target="full"> 
    <property name="MyCustomProperty" value="Full" /> 
    </ant> 
</target> 



<target name="release-Lite"> 
    <ant antfile="thisbuild.xml" inheritAll="true" target="lite"> 
    <property name="MyCustomProperty" value="Lite" /> 
    </ant> 
</target> 

È quindi possibile utilizzare questi obiettivi e le proprietà di modificare la build di fare qualunque cosa avete bisogno per costruire ciascuno dei file APK.