Ich verwende Android Studio Version 2.1.2 und versuche, Google Cloud Messaging für meine App zu implementieren.
Dazu muss ich eine JSON-Datei (Konfigurationsdatei) von Google Services anfordern, die ich meinem Projekt hinzufügen kann.
Um diese Datei aus dem Google Api-Konsolenfeld zu erhalten, muss ich meinen App-Namen und den Paketnamen meiner App angeben. Und hier beginnt mein Problem.
In meiner App unterscheidet sich der Paketname in der Manifest-Datei von der applicationId in der build.gradle-Datei auf Anwendungsebene . Und im Google Play Store wird die ApplicationId verwendet.
Um zu veranschaulichen, was ich meine, in meiner Manifest-Datei;
%Vor%und in meiner Gradle-Datei;
%Vor%Nun, welche von denen zu googlen als Paketname, um Konfigurationsdatei zu bekommen?
Zweitens, welches für die Anforderung von C2D_MESSAGE in meiner Manifestdatei verwendet werden soll, wo das Format ist;
%Vor%Danke für jede Hilfe.
Die in der Datei build.gradle angegebene Anwendungs-ID wird verwendet.
Der Eintrag in AndroidManifest.xml
wird überschrieben
Ihr AndroidManifest.xml
wird so aussehen
Es gibt einen großartigen Artikel über dieses hier von Android Studio .
Warum gibt es zwei?
Welchen sollte ich bearbeiten, um meinen endgültigen Paketnamen zu ändern?
Der Paketname in Gradle überschreibt den Paketnamen im Manifest. Also sollten Sie es in Gradle ändern.
Wenn Sie die Struktur Ihres Projekts tatsächlich ändern möchten, müssen Sie Ihren Paketnamen in Manifest.xml
ändern Für Berechtigungen
In Ihrem speziellen Fall, den Berechtigungen, fragen Sie, welchen Paketnamen Sie für Google Messaging angeben sollten. Da Google Messaging Ihren endgültigen Paketnamen benötigt, sollten Sie Ihren Gruppennamen eingeben. Wenn Sie Flavors verwenden, sollten Sie dies dynamisch tun, wie von @ alims Antwort vorgeschlagen.
Soweit ich weiß, brauchen Sie beide. Das Manifest benötigt es, um die Klassen zu finden, die das activity
-Element verwendet. Wenn Sie es nicht brauchen, würde die IDE eine Notiz anzeigen, die besagt: "Sie brauchen das nicht, es wird überschrieben ...."
Gradel ersetzt Manifest. Verwende grddle
Das stimmt bis zu einem gewissen Grad, aber Sie brauchen immer noch den Paketnamen im Manifest. Ich bin mir nicht sicher, warum es in Großbuchstaben ist, aber Gradle überschreibt nicht das Paket im Manifest!
Google verwendet Ihren Paketnamen als eindeutigen Namen, um Ihre App zu identifizieren. Da Sie erwähnt haben, dass es sich um Google Play handelt, sollten Sie das in Gradle-Datei verwenden, um dies zu ermöglichen.
Und um den zweiten Teil Ihrer Frage zu beantworten, ist es nur eine Konvention, die App <application-package-name> + ".permission.C2D_MESSAGE
als Ihren Berechtigungsnamen zu definieren, damit Sie die in Gradle-Datei erwähnte verwenden können.
Hoffe das hilft:)
Mit Einführung in Android Studio gesehen wurde geändert. Früher in Eclipse Manifest.xml Paketname als Ganzes und allein betrachtet wie Sie Ihre App im Google Play Store hochladen wird es den Paketnamen aus Manifest.xml auswählen, aber es ist nicht der Fall mit Android Studio.
In Android Studio gibt es zwei Orte, an denen der Name des Anwendungspakets angegeben wird.
build.gradle Beispiel
%Vor%Beachten Sie, dass die Anwendungs-ID über dem anderen Speicherort des Paketnamens steht.
@Mdlc hat absolut Recht.
Welchen sollte ich bearbeiten, um meinen endgültigen Paketnamen zu ändern? Der Paketname in Gradle überschreibt den Paketnamen im Manifest. Also sollten Sie es in Gradle ändern.
Wenn Sie die Struktur Ihres Projekts tatsächlich ändern möchten, müssen Sie Ihren Paketnamen in Manifest.xml
ändernWenn wir den Namen des Anwendungspakets in Android Studio umbenennen, ändert sich die Anwendungs-ID nicht. Wir müssen es manuell machen. Bitte beachten Sie dies, weil es sehr wichtig ist. Wenn wir unsere Anwendung im Google Play Store hochladen, wählen Sie den Paketnamen google mit applicationId aus, wie im obigen Beispiel com.company.testapp.
Tags und Links android google-cloud-messaging android-manifest android-studio android-gradle