关于Android 设置应用 ID applicationId

每一个 Android 应用均有一个惟一的应用 ID,像 Java 软件包名称同样,如 com.example.myapp。 此 ID 能够在设备上和 Google Play 商店中对您的应用进行惟一标识。 若是您想要上传新版本的应用,应用 ID(以及使用它签署的证书)必须与原始 APK 相同 - 若是您更改应用 ID,Google Play 商店会将 APK 视为彻底不一样的应用。因此您发布应用后,毫不应更改应用 ID。html

 

 

您的应用 ID 经过模块的 build.gradle 文件中的 applicationId 属性定义,以下面所示:java

android {

    defaultConfig {

        applicationId "com.example.myapp"

        minSdkVersion 15

        targetSdkVersion 24

        versionCode 1

        versionName "1.0"

    }

    ...

}

当您在 Android Studio 中建立新项目时,applicationId 会彻底匹配您在设置时选择的 Java 风格软件包名称。 不过,除了这一点,应用 ID 和软件包名称彼此无关。您能够更改代码的软件包名称(代码命名空间),这不会影响应用 ID,反之亦然(但一样,您发布应用后不该再更改应用 ID)。android

尽管应用 ID 看起来像传统的 Java 软件包名称,但应用 ID 的命名规则有更多限制:web

  • 必须至少包含两段(一个或多个圆点)。
  • 每段必须以字母开头。
  • 全部字符必须为字母数字或下划线 [a-zA-Z0-9_]。

注: 应用 ID 用于直接关联到代码的软件包名称;因此有些 Android API 会在其方法名称和参数名称中使用术语“软件包名称”,但这其实是您的应用 ID。例如,Context.getPackageName() 方法会返回您的应用 ID。 不管什么时候都不须要在应用代码之外分享代码真实的软件包名称。app

注意:若是您使用的是 WebView,请考虑在您的应用 ID 中将您的软件包名称用做前缀;不然,您可能会遇到如问题 211768 中所述的问题。工具

更改用于构建变体的应用 ID

当您为应用构建 APK 时,构建工具会使用 build.gradle 文件的 defaultConfig 块中定义的应用 ID 标记 APK(以下所示)。不过,若是您想要建立不一样版本的应用以在 Google Play 商店上显示为单独详情,如“免费版”和“专业版”,您须要建立单独的构建变体,每一个构建变体具备不一样的应用 ID。测试

这种状况下,每一个构建变体应定义为单独的app。 对于 productFlavors {} 块中的每种风味,您能够从新定义 applicationId 属性,或者改用 applicationIdSuffix 在默认的应用 ID 上追加一段,以下所示:gradle

android {

    defaultConfig {

        applicationId "com.example.myapp"

    }

    productFlavors {

        free {

            applicationIdSuffix ".free"

        }

        pro {

            applicationIdSuffix ".pro"

        }

    }

}

这样,“免费”产品风味的应用 ID 就变为“com.example.myapp.free”。ui

您也能够根据本身的构建类型使用 applicationIdSuffix 追加一段,以下所示:​​​​​​​google

android {

    ...

    buildTypes {

        debug {

            applicationIdSuffix ".debug"

        }

    }

}

由于 Gradle 会在产品风味后面应用构建类型配置,“免费调试”构建变体的应用 ID 如今为“com.example.myapp.free.debug”。若是您想要在同一个设备上建立调试和发布构建,这会十分有用,由于两个 APK 不会具备相同的应用 ID。

注意:对于与以前的 SDK 工具的兼容性,若是您不在 build.gradle 文件中定义 applicationId 属性,构建工具会将 AndroidManifest.xml 文件中的软件包名称用做应用 ID。这种状况下,重构您的软件包名称也会更改您的应用 ID。

提示:若是您须要在清单文件中引用应用 ID,能够在任何清单属性中使用 ${applicationId} 占位符。构建时,Gradle 会将此标记替换为实际的应用 ID。 

更改用于测试的应用 ID

默认状况下,构建工具会将应用 ID 应用到您的 APK,该 APK 将应用 ID 用于给定的构建变体,同时追加 .test。例如,com.example.myapp.free 构建变体的测试 APK 的应用 ID 为 com.example.myapp.free.test

尽管没必要需,您也能够经过在 defaultConfig 或productFlavor 块中定义 testApplicationId 属性来更改应用 ID。

注:为了不与受测应用的名称冲突,构建工具会根据测试应用 ID(而不是清单文件中定义的软件包名称)经过命名空间为您的测试 APK 生成 R 类。

更改软件包名称

默认状况下,您项目的软件包名称会匹配应用 ID,但您也能够更改软件包名称。 不过,若是您想要更改软件包名称,请注意软件包名称(由您的项目目录结构定义)应始终匹配 AndroidManifest.xml 文件中的 package 属性,以下所示:​​​​​​​

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.myapp"

    android:versionCode="1"

    android:versionName="1.0" >

Android 构建工具会将 package 属性用于下面两方面:

  • 它会将此名称用做应用生成的 R.java 类的命名空间。

    示例:对于上面的清单,R 类将为 com.example.myapp.R

  • 它会使用此名称解析清单文件中声明的任何相关类名称。

    示例:对于上面的清单,声明为 <activity android:name=".MainActivity"> 的 Activity 将解析为 com.example.myapp.MainActivity

一样,package 属性中的名称应始终匹配您项目的基础软件包名称,软件包中保存着您的 Activity 和其余应用代码。 固然,您的项目中能够包含子软件包,可是这些文件必须从 package 属性导入使用命名空间的 R.java 类,并且清单中声明的任何应用组件均必须添加缺失的子软件包名称(或者使用彻底限定软件包名称)。

若是您想要彻底重构您的软件包名称,请确保也更新 package 属性。 只要您使用 Android Studio 的工具重命名和重构您的软件包,那么这些属性就会自动保持同步。 (若是这些属性未保持同步,您的应用代码将没法解析 R 类,由于它不在相同的软件包内,且清单不会标识您的 Activity 或其余组件。)

您必须始终在项目的主 AndroidManifest.xml 文件中指定 package 属性。 若是您有附加的清单文件(例如用于产品风味或构建类型),请注意优先级最高的清单文件提供的软件包名称始终用于最终合并的清单中。

您还须要了解如下内容:尽管清单 package 和 Gradle applicationId 能够具备不一样的名称,但构建工具会在构建结束时将应用 ID 复制到 APK 的最终清单文件中。因此,若是您在构建后检查 AndroidManifest.xml 文件,package 属性发生更改就不足为奇。实际上,Google Play 商店和 Android 平台会注意 package 属性来标识您的应用;因此构建利用原始值后(用做 R 类的命名空间并解析清单类名称),它将会舍弃此值并将其替换为应用 ID。

 

亲,若是您感受本文有用,请点个赞再走吧✌(>‿◠)!!

相关文章
相关标签/搜索