Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓:包名用哪一个?舱单';是packagename还是Gradle应用程序ID?_Android_Android Studio_Google Cloud Messaging_Android Gradle Plugin_Android Manifest - Fatal编程技术网

Android 安卓:包名用哪一个?舱单';是packagename还是Gradle应用程序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正在使用 为了说明我的意思

我正在使用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中,应用程序包的名称有两个地方

  • Manifest.xml
  • 格雷德尔先生
  • build.gradle示例

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