Android Studio 1.0 et erreur "Les projets de bibliothèque ne peuvent pas définir applicationId"

109

Après avoir mis à jour Android Studio vers 1.0, je vois cette erreur:

Erreur: les projets de bibliothèque ne peuvent pas définir applicationId. applicationId est défini sur «com.super.app» dans la configuration par défaut.

J'ai mis à jour le plugin Gradle comme suggéré mais je ne comprenais pas comment résoudre ce problème.

Séraphins
la source

Réponses:

208

Sur la base de ces informations :

ApplicationId dans les projets de bibliothèque

Vous ne pouvez pas utiliser applicationId pour personnaliser le package d'un projet de bibliothèque. Le nom du package doit être fixé dans les projets de bibliothèque (et spécifié comme packageName dans le manifeste). Le plugin Gradle n'a pas appliqué cette restriction auparavant.

La suppression de la variable applicationId du build.gradlefichier de la bibliothèque devrait résoudre le problème.

Joël
la source
Merci, vous me conduisez dans la bonne direction. J'ai ajouté une réponse qui explique le problème de "saveur" que j'ai.
Seraphim's
1
@Joel: j'ai converti le module en bibliothèque, mais je ne parviens pas à trouver l'ApplicationId à supprimer. ApplicationId n'est pas dr dans le fichier build.gradle. pouvez-vous me dire où je peux trouver dans le studio Android 1.0.1
kumar
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses aux liens uniquement peuvent devenir invalides si la page liée change
Nerdroid
62

Merci à Joel pour sa bonne réponse: je n'ai besoin de supprimer qu'une seule ligne du .gradlefichier:

defaultConfig {
        applicationId "com.super.app"   <---- remove this line
        minSdkVersion 15
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }

devient

defaultConfig {
        minSdkVersion 15
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }

et mon AndroidManifest.xml

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.super.app">
...

C'est la bonne solution si vous n'avez pas besoin de renommer le nom du package de votre application. Pour le renommer, vous devez utiliser "saveurs":

android {
   ...
   productFlavors {
       flavor1 {
           applicationId 'com.super.superapp'
       }
   }
Séraphins
la source
Dommage que deux réponses ne puissent pas être vérifiées car vous avez inclus un exemple que Joel devrait avoir.
Androidcoder
1
Si je supprime la ligne applicationID, puis-je publier dans Play Store? (Je veux dire mise à jour) Parce qu'il n'y aura pas d'identifiant d'application pour google play.
pile gurkan
1
@gurkanstack si vous supprimez la ligne dans le fichier Gradle, l'espace de nom défini dans le "package" AndroidManifest.xml sera utilisé pour la publication.
Seraphim's
1

Juste au cas où cela aiderait quelqu'un:

Lorsque j'ai importé un projet eclipse dans Android Studio, j'ai eu une erreur:

"Erreur: l'application et l'ID d'application de test ne peuvent pas être identiques"

Étrange cependant, mais j'ai regardé dans le build.gradle et j'ai trouvé les deux espaces réservés, un pour l'application et l'autre pour l'application de test.

J'ai supprimé le testApplicationId de celui-ci comme suggéré dans cet article et cela m'a aidé à résoudre le problème.

Remarque: cette explication n'est pas liée aux erreurs publiées dans cette question, mais peut aider quelqu'un qui obtient une erreur similaire.

Kunal Khaire
la source
0

Vous ne pouvez pas définir applicationId pour votre bibliothèque. Mais si vous souhaitez utiliser un identifiant dans votre fichier de construction, qui vous donnera le nom de votre package de bibliothèque, vous pouvez définir une variable pour le module, puis utiliser la valeur selon les besoins.

par exemple: build.gradle de la bibliothèque

apply plugin: 'com.android.library'

def libraryGroupId = 'com.google.example'
def libraryArtifactId = project.getName()
def libraryVersion = '1.1'

De plus, vous pouvez utiliser la valeur ci-dessous si nécessaire dans votre fichier de construction lui-même dans lib.

android {
compileSdkVersion 28

defaultConfig {
    minSdkVersion 21
    targetSdkVersion 28
    versionCode 1
    versionName "$libraryVersion"
    resValue "string", "Library", libraryGroupId"
 }
}
Mayuri Khinvasara
la source