Android:哪一个用于包名? Manifest的packagename或Gradle applicationId?

时间:2016-07-13 09:08:42

标签: android android-studio google-cloud-messaging android-gradle android-manifest

我正在使用 Android Studio版本2.1.2 ,我正在尝试将 Google Cloud Messaging 应用到我的应用中。

为了能够做到这一点,我必须获得一个Google Services json文件(配置文件)才能添加到我的项目中。

要从Google Api控制台面板获取此文件,我需要提供我的应用名称我应用的包名称。这就是我的问题开始的地方。

在我的应用中,Manifest文件中的包名称与应用程序级build.gradle文件中的applicationId不同。在Google Play商店中,正在使用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"
}

现在,哪一个提供谷歌作为包名来获取配置文件?

其次,在我的清单文件中请求允许使用C2D_MESSAGE,格式为;

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

感谢您的帮助。

6 个答案:

答案 0 :(得分:16)

将使用build.gradle中指定的应用程序ID。

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>

答案 1 :(得分:8)

Android Studio提供了一篇关于此here的支持文章。

为什么有两个?

  • 您构建的.apk清单中使用的最终软件包,以及您的应用在您的设备和Google Play商店中所知的软件包,是gradle文件中指定的“应用程序ID”。
  • 源代码中用于引用R类并解析任何相关活动/服务注册的包继续被称为清单中定义的“包”。

我应该编辑哪一个来更改我的最终包名
Gradle中的包名称将覆盖Manifest中的包名称。所以你应该在Gradle中改变它。

如果您想实际更改项目的结构,那么您需要在Manifest.xml中更改您的包名称

对于权限
在您的特定情况下,您可以询问应为Google Messaging提供哪个软件包名称。由于Google Messaging需要您的最终包名,因此您应输入您的gradle包名。如果您正在使用flavor,则应按照@alim's answer.

的建议动态执行此操作

答案 2 :(得分:1)

gradle替换清单。使用gradle

答案 3 :(得分:1)

随着Android Studio的介绍,已经改变了。早些时候eclipse Manifest.xml包名称在Google Play商店上传你的应用程序时考虑整体和唯一,它将从Manifest.xml中选择包名称,但Android Studio不是这种情况。

在Android Studio中,应用程序包名称有两个位置。

  1. 的Manifest.xml
  2. 的build.gradle
  3. build.gradle示例

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

    注意上面的applicationId是包名称所在的其他地方。

    @Mdlc是绝对正确的。

    我应该编辑哪一个来更改我的最终包名? Gradle中的包名称将覆盖Manifest中的包名称。所以你应该在Gradle中改变它。

    如果您想实际更改项目的结构,那么您需要在Manifest.xml中更改您的包名称

    当我们在Android Studio中重构重命名应用程序包名称时,它不会更改应用程序ID。我们必须手动完成。请注意这一点,因为它非常重要。当我们在Google Play商店上传我们的应用程序时,谷歌选择包名称与applicationId匹配,如上例com.company.testapp。

答案 4 :(得分:0)

Google使用您的软件包名称作为唯一名称来标识您的应用。由于您提到它在Google Play上,因此您应该使用Gradle文件中的那个来实现它。

要回答问题的第二部分,将app <application-package-name> + ".permission.C2D_MESSAGE定义为您的权限名称只是一种惯例,因此您可以使用Gradle文件中提到的那个。

希望这会有所帮助:)

答案 5 :(得分:0)

Gradle applicationId是playstore的最终PackageName。