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

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

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

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

In мое приложение, имя пакета в файле манифеста отличается от applicationId в сборке уровня приложения.файл 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 в качестве имени пакета для получения файла конфигурации?

Secondly, которое одно должно использовать для запроса разрешения C2D_MESSAGE в моем файле манифеста, где формат;

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

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

7 ответов


идентификатор приложения, указанный в сборке.будет использоваться 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>

об этом есть отличная статья поддержки здесь по Android Studio.

почему два?

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

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

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

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


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


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

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

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


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

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

надеюсь, что это помогает :)


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

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

  1. Манифест.в XML
  2. построить.Gradle в

построить.Gradle в пример

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

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

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

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

Если вы хотите фактически изменить структуру своего проекта, вам нужно будет изменить имя пакета в Декларация.в XML

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


Gradle applicationId-это окончательное имя пакета для playstore.