我正在使用 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
感谢您的帮助。
答案 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的支持文章。
为什么有两个?
我应该编辑哪一个来更改我的最终包名
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中,应用程序包名称有两个位置。
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。