tablettes - Android-plusieurs versions personnalisées de la même application




programmation android pour les nuls pdf (6)

Ce que j'ai fait pour quelque chose de similaire, c'est simplement utiliser une tâche antlib, puis parcourir tous les fichiers java et xml pour remplacer mon ancienne chaîne de package par la nouvelle chaîne de package. Peu importait que les fichiers ne soient pas dans les chemins src corrects selon le paquet. Faire juste un remplacement de regex pour tous les fichiers était suffisant pour que cela fonctionne ...

Par exemple pour le remplacer dans tous vos fichiers java sous le répertoire src:

 <replaceregexp flags="g" byline="false">
    <regexp pattern="old.package.string" /> 
    <substitution expression="new.package.string" />
    <fileset dir="src" includes="**/*.java" /> 
 </replaceregexp>

Quel est le meilleur moyen de déployer plusieurs versions personnalisées d'une application Android?

Actuellement, j'ai un script pour échanger le dossier de ressources afin d'obtenir une version personnalisée de mon application. Cela fonctionne très bien, mais toutes les versions personnalisées ont toujours le même nom de package dans le fichier AndroidManifest.xml. Par conséquent, il n'est pas possible d'installer deux versions personnalisées de l'application en même temps.

C'est une solution à ce problème, mais cela doit être fait à la main

Pouvez-vous penser à une solution plus simple ou à la manière dont cela pourrait être intégré à un script?

(d'ailleurs: ce n'est pas pour une application porno / spam / quelle que soit l'application, pas même une application payante)


J'utilise le plugin maven-android- pour y parvenir. Spécifiez un fichier AndroidManifest.xml pour l'objectif des sources générées et un autre fichier AndroidManifest.xml pour l'objectif de l'apk final. Ainsi, le projet de code source conserve le nom du package de code source réel lors de la génération de la classe R et de la phase de construction, tandis que le nom du package de manifeste adapté au marché se trouve dans le deuxième fichier AndroidManifest.xml, inclus dans le fichier apk final.


Je pense que le meilleur moyen est de créer un nouveau projet et de copier le contenu. étapes, - créer un nouveau projet Android sans classe - créer un package (le nom du package doit correspondre à celui du fichier manifeste), ou simplement copier le nom du package dans le dossier 'gen' - copier les fichiers de mise en page - copier tout autre fichier utilisé dans votre projet - copier les données du fichier manifeste

cela a été plus simple pour moi pour la tâche


La solution liée à ne doit pas être faite à la main. N'oubliez pas que l'attribut package dans l'élément <manifest> ne doit pas nécessairement se trouver là où réside le code, tant que vous épelez les classes pleinement qualifiées ailleurs dans le manifeste (par exemple, activity android:name="com.commonsware.android.MyActivity" plutôt que l' activity android:name=".MyActivity" ). Écris ton changement de manifeste et utilise Ant pour créer un nouvel APK. Autant que je sache, cela devrait fonctionner.


Soutenir plusieurs partenaires Préparer config.xml

Projet de construction pour partenaire différent

<!--partner.dir, pkg.name, ver.code, ver.name are input from command line when execute 'ant' -->

<!-- set global properties for this build -->
<property name="build.bin" location="bin"/>
<property name="build.gen" location="gen"/>
<property name="src" location="src"/>
<property name="res" location="res"/>

<target name="preparefiles" description="Prepare files for different partner" >
    <delete dir="${build.bin}" />
    <delete dir="${build.gen}" />

    <copy todir="${res}" overwrite="true" />
        <fileset dir="${partner.dir}/res" /> 
    </copy>

    <!-- change the import in all Java source files -->
    <replaceregexp file="AndroidManifest.xml"
        match='android.versionCode="(.*)"'
        replace='android.versionCode="${ver.code}"'
        byline="false">

    <replaceregexp file="AndroidManifest.xml"
        match='android.versionName="(.*)"'
        replace='android.versionName="${ver.name}"'
        byline="false">

    <replaceregexp file="AndroidManifest.xml"
        match='package="(.*)"'
        replace='package="${pkg.name}"'
        byline="false">

    <!-- change the package name in AndroidManifest -->
    <replaceregexp flags="g" byline="false">
        <regexp pattern="import(.*)com.myproject.com.R;" /> 
        <substitution expression="import com.${pkg.name}.R;" />
        <fileset dir="${src}" includes="**/*.java" /> 
    </replaceregexp>

    <replaceregexp flags="g" byline="false">
        <regexp pattern="(package com.myproject.com;)" /> 
        <substitution expression="\1&#10;import com.${pkg.name}.R;" />
        <fileset dir="${src}" includes="**/*.java" /> 
    </replaceregexp>
</target>

Préparer les fichiers $ ant -f config.xml -Dpartner.dir = "xxx" -Dpkg.name = "xxx" -Dver.code = "xxx" -Dver.name = "xxx" preparefiles

Créer build.xml Construire $ ant debug ou version $ ant


Vous voulez certainement utiliser les saveurs Gradle qui sont proposées nativement, voire encouragées, sur Android Studio.

Cela semble expliquer très bien toutes les bases. Je viens de terminer la conversion à Gradle aujourd'hui, et cela fonctionne très bien. Icônes d'applications personnalisées, noms et chaînes, etc.

Comme l'explique le site Web, une partie du but de cette conception était de la rendre plus dynamique et de permettre plus facilement la création de plusieurs fichiers APK avec essentiellement le même code, ce qui semble similaire à ce que vous faites.

Je n'ai probablement pas expliqué le mieux possible, mais ce site Web fait un très bon travail.







automation