Android: какой из них использовать для имени пакета? Манифест packagename или Gradle applicationId?

Я использую Android Studio версии 2.1.2, и я пытаюсь внедрить Google Cloud Messaging в мое приложение.

Чтобы это сделать, мне нужно получить json файл (файл конфигурации Google Apps) для добавления в мой проект.

Чтобы получить этот файл с панели консоли Google Api, мне необходимо указать имя моего приложения и имя моего приложения. И вот здесь начинается моя проблема.

В моем приложении имя пакета в файле манифеста отличается от applicationId в файле build.gradle на уровне приложения. И В Google Play Store используется applicationId.

Чтобы проиллюстрировать, что я имею в виду, в моем файле манифеста;

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

и в моем файле gradle;

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

Теперь, какой из них предоставить google как имя пакета для получения конфигурационного файла?

Во-вторых, который следует использовать для запроса разрешения C2D_MESSAGE в моем файле манифеста, в котором находится формат:

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

Спасибо за любую помощь.

Ответ 1

Будет использоваться идентификатор приложения, указанный в файле build.gradle.

Запись в AndroidManifest.xml переопределена

Ваш AndroidManifest.xml будет выглядеть следующим образом

<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>

Ответ 2

Там есть замечательная статья об этом здесь от Android Studio.

Почему есть два?

  • Последний пакет, который используется в вашем встроенном манифесте .apk, и является пакетом, которое ваше приложение известно как на вашем устройстве, так и в магазине Google Play, является "идентификатором приложения", как указано в файле gradle.
  • Пакет, который используется в вашем исходном коде для обращения к вашему классу R и для разрешения любых относительных регистраций активности/сервисов, по-прежнему называется "пакетом", как определено в вашем манифесте.

Какой я должен изменить, чтобы изменить свое окончательное имя пакета
Имя пакета в gradle будет перезаписывать имя пакета в манифесте. Поэтому вы должны изменить его в Gradle.

Если вы хотите на самом деле изменить структуру своего проекта, вам нужно будет изменить ваше имя пакета в Manifest.xml

Для разрешений
В вашем конкретном случае, разрешениях, вы спрашиваете, какое имя пакета вы должны предоставить для Google Messaging. Поскольку Google Messaging требует вашего окончательного имени пакета, вы должны ввести свой gradle packagename. Если вы используете ароматы, вы должны сделать это динамически, как предложено @alim answer.

Ответ 3

gradle заменяет манифест. используйте gradle

Ответ 4

Насколько я знаю, они вам нужны. Для этого требуется манифест, чтобы найти классы, которые использует элемент activity. Если вам это не понадобилось, в IDE появится заметка с указанием "вам это не нужно, оно переопределено..."

Gradle заменяет манифест. используйте gradle

Это верно в определенной степени, но вам все равно нужно имя пакета в манифесте. Я не уверен, почему он находится в gradle, но gradle не переопределяет пакет в манифесте!

Ответ 5

Google использует ваше имя пакета как уникальное имя для идентификации вашего приложения. Поскольку вы упомянули, что это в Google Play, вы должны использовать файл в файле Gradle, чтобы сделать это возможным.

И чтобы ответить на вторую часть вашего вопроса, это просто соглашение о назначении приложения <application-package-name> + ".permission.C2D_MESSAGE в качестве имени вашего разрешения, поэтому вы можете использовать файл, упомянутый в файле Gradle.

Надеюсь, что это поможет:)

Ответ 6

С введением с Android Studio замечено было изменено. Раньше в названии пакета eclipse Manifest.xml считалось, что все и единственное, когда вы загружаете свое приложение в магазине Google Play, оно выберет имя пакета из Manifest.xml, но это не относится к Android Studio.

В Android Studio есть два места, куда входит имя пакета приложений.

  • Manifest.xml
  • build.gradle

build.gradle example

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

Обратите внимание на applicationId, выше которого находится другое место, куда отправляется имя пакета.

@Mdlc абсолютно прав.

Какой я должен изменить, чтобы изменить свое окончательное имя пакета? Имя пакета в Gradle будет перезаписывать имя пакета в манифесте. Поэтому вы должны изменить его в Gradle.

Если вы хотите на самом деле изменить структуру своего проекта, вам нужно будет изменить ваше имя пакета в Manifest.xml

Когда мы рефакторируем переименование имени пакета приложения в Android Studio, он не меняет идентификатор приложения. Мы должны сделать это вручную. Пожалуйста, обратите внимание на это, потому что это очень важно. Как и при загрузке нашего приложения в Google Play, выберете имя пакета google, соответствующее имени приложения, как в случае вышеприведенного примера com.company.testapp.

Ответ 7

Gradle applicationId является окончательным PackageName для playstore.