8

Ich verwende Android Studio Version 2.1.2, und ich versuche, Google Cloud Messaging zu meiner App zu implementieren.Android: Welche für den Paketnamen zu verwenden? Paketname des Manifests oder Gradle applicationId?

Um dies tun zu können, muss ich eine Google-Dienst-JSON-Datei (Konfigurationsdatei) erhalten, die ich meinem Projekt hinzufügen kann.

Für diese Datei von Google Api Konsolenfeld bekommen, bin ich verpflichtet,meinen App-Namen und meine App Paketnamen zur Verfügung zu stellen. Und hier beginnt mein Problem.

In meiner App Paketname in Manifest-Datei unterscheidet sich von der ApplicationId in der Anwendungsebene Build.Gradle-Datei. Und im Google Play Store wird die ApplicationId verwendet.

Um zu veranschaulichen, was ich meine, in meiner Manifest-Datei;

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.myapp"> 

und in meiner Gradle-Datei;

android { 
compileSdkVersion 23 
buildToolsVersion "23.0.2" 
defaultConfig { 
    applicationId 'com.menu.jkrk' 
    minSdkVersion 16 
    targetSdkVersion 23 
    versionCode 3 
    versionName "1.0" 
} 

Nun, das einer von denen bieten als Paketnamen Google-Konfigurationsdatei zu bekommen?

Zweitens, welche sollte für die Anforderung von C2D_MESSAGE in meiner Manifest-Datei verwenden, wo das Format ist;

<application-package-name> + ".permission.C2D_MESSAGE 

Vielen Dank für jede Hilfe.

+0

Warum können Sie es nicht für beide Dateien auf die gleiche Weise ändern? Irgendwie haben Gradle die Priorität –

+0

Warum verwenden Sie Firebase nicht anstelle von GCM? – chiappins

Antwort

15

Die in der Datei build.gradle angegebene Anwendungs-ID wird verwendet.

Der Eintrag in der AndroidManifest.xml wird

überschrieben

Ihre AndroidManifest.xml wird dieses aussehen

<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<receiver ...> 
    <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

      <category android:name="${applicationId}" /> 
     </intent-filter> 
</receiver> 
+0

Danke Alim.Ich habe die Lösung noch nicht versucht, aber da die allgemeine Meinung die gleiche Antwort gibt, akzeptiere ich die Antwort. – Orcun

+0

Sie sollten vielleicht klarstellen, dass das Manifest-Paket-Attribut erst nach der Kompilierung überschrieben wird. Die R-Klasse bleibt also im selben Paket wie im Attribut – JensV

1

Gradel ersetzt Manifest. Verwenden Sie Gradle

0

Soweit ich weiß, Sie 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 angibt, dass Sie dies nicht benötigen, es wird überschrieben.

Gradle ersetzt Manifest. Verwenden Sie Gradle

Das stimmt bis zu einem gewissen Grad, aber Sie brauchen noch den Paketnamen im Manifest. Ich bin mir nicht sicher, warum es in Großbuchstaben ist, aber Gradle überschreibt das Paket im Manifest nicht!

7

Es gibt eine große Unterstützung Artikel über diese here von Android Studio.

Warum gibt es zwei?

  • Das letzte Paket, das in der eingebauten APK-Manifest verwendet wird, und ist das Paket Ihrer App als auf dem Gerät und im Google Play Store bekannt sind, ist die „Anwendungs-ID“, wie er in der gradle angegeben Datei.
  • Das Paket, das in Ihrem Quellcode verwendet wird, um auf Ihre R-Klasse Bezug zu nehmen und alle relativen Aktivitäts-/Serviceregistrierungen aufzulösen, wird weiterhin als "Paket" bezeichnet, wie in Ihrem Manifest definiert.

Welches sollte ich
Der Paketname in Gradle mein letztes Paketnamen bearbeiten ändern den Paketnamen im Manifest überschrieben. Also sollten Sie es in Gradle ändern.

Wenn Sie möchten, um tatsächlich die Struktur Ihres Projekts ändern, dann müssen Sie würden Ihre Paket in Manifest.xml

Für Berechtigungen
In Ihrem speziellen Fall ändern, die Berechtigungen, Sie fragen Welchen Paketnamen sollten Sie für Google Messaging bereitstellen? 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 @alim's answer.

+0

. Vielen Dank, das war sehr hilfreich. – Orcun

0

vorgeschlagen. 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, so dass Sie den in Gradle-Datei erwähnten verwenden können.

this helps :)

0

Mit Einführung mit Android Studio geändert wurde gesehen. 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 steht.

  1. Manifest.xml
  2. build.gradle

build.gradle Beispiel

defaultConfig { 
    applicationId "com.company.testapp" 
    minSdkVersion 15 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.0" 
} 

Beachten Sie die applicationId über dem sich andere Ort, an dem Paketnamen geht.

@Mdlc ist absolut richtig.

Welche 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 ändern.xml

Wenn wir den Namen des Anwendungspakets in Android Studio umbenennen, wird die Anwendungs-ID nicht geändert. 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.

Verwandte Themen