web-dev-qa-db-fra.com

Comment changer le nom du package d'application Android lors de l'assemblage avec Gradle?

Est-il possible de changer le nom du package d'une application Android en utilisant Gradle?

Je dois compiler deux copies de la même application, avec un nom de package unique (afin de pouvoir publier deux fois sur le marché).

45
Seraphim's

Vous pourriez donc quelque chose comme ça

Android {
    ...

    defaultConfig {
        minSdkVersion 8
        versionCode 10
    }

    flavorDimensions "flavor1", "flavor2"

    productFlavors {
        flavor1 {
            applicationId "com.example.flavor1"
            versionCode 20
        }

        flavor2 {
            applicationId "com.example.flavor2"
            minSdkVersion 14
        }
    }
}

Vous pouvez également modifier le champ Android.defaultConfig.applicationId si vous voulez faire des builds uniques.

Tiré de: http://tools.Android.com/tech-docs/new-build-system/user-guide#TOC-Product-Flavor-Configuration

53
Ethan

Comme alternative plus simple à l'utilisation de versions du produitcomme dans la réponse d'Ethan , vous pouvez également personnaliser les types de build.

Comment choisir entre les approches:

  • Si vous avez besoin de noms de packages différents pour pouvoir avoir les deux apk debug et release installés sur un appareil, utilisez alors approche de type de construction ci-dessous, comme les plugins Gradle acceptent . Dans ce cas, les saveurs sont exagérées. (Je pense que tous les projets devraient par défaut le faire, car cela vous facilitera la vie, en particulier après vous avez publié sur le magasin et développez de nouvelles fonctionnalités.)
  • Il existe des utilisations valides pour les saveurs de produits , l'exemple typique étant une application avec des versions gratuites et payantes. Dans ce cas, vérifiez réponse d'Ethan et lisez également la documentation: Configuration de Gradle Builds et Gradle Plugin User Guide .

(Je suppose que vous pouvez également combiner les deux approches, ce qui donnerait à chaque variante de build un nom de package distinct, mais je n'ai pas testé cela.)

Configuration du type de build

Pour debug type de build, et tous les autres types non - release, définissez applicationIdSuffix qui sera ajouté au nom de package par défaut. (Avant plug-in Android Gradle version 0.11 ce paramètre était connu sous le nom de packageNameSuffix.)

Android {
    buildTypes {
        debug {
            applicationIdSuffix '.debug'
            versionNameSuffix '-DEBUG'
        }

        beta {
            applicationIdSuffix '.beta'
            versionNameSuffix '-BETA'

            // NB: If you want to use the default debug key for a (non-debug) 
            // build type, you need to specify it:
            signingConfig signingConfigs.debug 
        }

        release {
            // signingConfig signingConfigs.release
            // runProguard true
            // ...
        }

    }
}

Ci-dessus, debug et release sont des types de build par défaut dont certains aspects sont configurés, tandis que beta est un type de build complètement personnalisé. Pour construire les différents types, utilisez assembleDebug, assembleBeta, etc., comme d'habitude.

De même, vous pouvez utiliser versionNameSuffix pour remplacer le nom de version par défaut d'AndroidManifest (que je trouve très utile!). Par exemple. "0.8" → "0.8-BETA", comme configuré ci-dessus.

Ressources:

Pour ma part, j'ai utilisé productFlavors jusqu'à présent dans ce but précis, mais il semble que la personnalisation du type de construction soit plus proche de mes besoins, et la configuration de la construction reste plus simple.

Mise à jour (2016) : J'ai depuis utilisé cette approche dans tous mes projets, et je pense que c'est définitivement la voie à suivre. Je l'ai également inclus dans le guide Android Best Practices de Futurice.

63
Jonik

Avec la version du plugin gradle 1.0.0+, vous devez utiliser applicationId comme indiqué dans le guide de migration

Propriétés renommées dans ProductFlavors

packageName => applicationId

Ainsi, dans votre build.gradle, vous utiliseriez maintenant:

productFlavors {
   flavor1 {
      applicationId "com.example.flavor1"
   }

   flavor2 {
      applicationId "com.example.flavor2"
   } 
}
10
Amio.io

D'après la réponse d'Ethan, les deux groupes de saveurs et packageName ne sont plus disponibles. Ci-dessous fonctionne en mars 2015.

Android {
...

defaultConfig {
    minSdkVersion 8
    versionCode 10
}

flavorDimensions "flavor"

productFlavors {
    flavor1 {
        flavorDimension "flavor"
        applicationId "com.example.flavor1"
        versionCode 20
    }

    flavor2 {
        flavorDimension "flavor"
        applicationId "com.example.flavor2"
        minSdkVersion 14
    }
}
}
9
sivag1