Android 安卓:包名用哪一个?舱单';是packagename还是Gradle应用程序ID?
我正在使用Android Studio 2.1.2版,我正在尝试在我的应用程序中实现谷歌云消息 要做到这一点,我必须获得一个googleservicesjson文件(配置文件)以添加到我的项目中 要从Google Api控制台面板获取此文件,我需要提供我的应用程序名和我的应用程序包名。这就是我的问题开始的地方 在我的应用程序中,清单文件中的包名与应用程序级build.gradle文件中的applicationId不同。在google play store上,应用程序ID正在使用 为了说明我的意思,在我的清单文件中Android 安卓:包名用哪一个?舱单';是packagename还是Gradle应用程序ID?,android,android-studio,google-cloud-messaging,android-gradle-plugin,android-manifest,Android,Android Studio,Google Cloud Messaging,Android Gradle Plugin,Android Manifest,我正在使用Android Studio 2.1.2版,我正在尝试在我的应用程序中实现谷歌云消息 要做到这一点,我必须获得一个googleservicesjson文件(配置文件)以添加到我的项目中 要从Google Api控制台面板获取此文件,我需要提供我的应用程序名和我的应用程序包名。这就是我的问题开始的地方 在我的应用程序中,清单文件中的包名与应用程序级build.gradle文件中的applicationId不同。在google play store上,应用程序ID正在使用 为了说明我的意思
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
现在,哪一个作为包名提供给google以获取配置文件?
其次,在我的清单文件中,哪一个应用程序应该用于请求C2D_消息的许可,其中格式为强>
<application-package-name> + ".permission.C2D_MESSAGE
+”.permission.C2D_消息
感谢您的帮助。gradle替换清单。使用gradle将使用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>
Android Studio有一篇关于这方面的支持文章 为什么有两个?
- 在build.apk的清单中使用的最后一个包,即你的应用程序在你的设备和Google Play商店中被称为的包,是gradle文件中指定的“应用程序id”
- 源代码中用于引用R类和解析任何相关活动/服务注册的包继续称为清单中定义的“包”
Gradle中的包名将覆盖清单中的包名。因此,您应该在Gradle中更改它 如果您想实际更改项目的结构,则需要在Manifest.xml中更改packagename 获取权限
在您的特定情况下,即权限,您会询问您应该为Google Messaging提供哪个包名。由于Google Messaging需要您的最终包名,因此您应该输入您的gradle packagename。如果您使用的是Flavors,您应该按照的建议动态执行此操作。Google使用您的包名作为唯一的名称来标识您我们的应用程序。既然你提到它在Google Play上,你应该使用Gradle文件中的那个来实现它 为了回答问题的第二部分,按照惯例,将app
+”.permission.C2D_MESSAGE
定义为您的权限名称,因此您可以使用Gradle文件中提到的名称
希望这有帮助:)关于Android Studio的介绍有所改变。在前面的eclipse Manifest.xml包名中,当您在Google Play store上传应用程序时,它会从Manifest.xml中选择包名,但Android Studio的情况并非如此 在androidstudio中,应用程序包的名称有两个地方
defaultConfig {
applicationId "com.company.testapp"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
注意上面的applicationId,它是包名称所在的另一个位置
@Mdlc绝对正确
我应该编辑哪一个来更改最终的包名?
Gradle中的包名将覆盖清单中的包名。所以你应该在Gradle换
如果您想实际更改项目的结构,则需要在Manifest.xml中更改packagename
当我们在Android Studio中重构重命名应用程序包名称时,它不会更改应用程序Id。我们必须手动执行此操作。请注意这一点,因为它非常重要。正如我们在Google Play store上上传应用程序时一样,Google pick软件包名称与上面的示例com.company.testapp中的applicationId匹配。Gradle applicationId是Play store的最终软件包名称。为什么不能在两个文件上都将其更改为相同的名称,Gradle有优先权吗?为什么不使用Firebase而不是GCM?谢谢Alim。我还没有尝试过这个解决方案,但是由于一般意见给出了相同的答案,我接受这个答案。您可能应该澄清,manifest package属性在编译之后才会被覆盖。因此,R类将保留在属性中定义的相同包中,这非常有用。
defaultConfig {
applicationId "com.company.testapp"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}