• Android官方技术文档翻译——ApplicationId 与 PackageName


    本文译自androd官方技术文档《ApplicationId versus PackageName》,原文地址:http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename。

    本文地址:http://blog.csdn.net/maosidiaoxian/article/details/41719357。转载请注明出处。翻译如有错讹,敬请指正。


     

    ApplicationId 与 PackageName

    所有的 Android 应用程序都有一个包名。包名是设备上的这个应用程序的唯一标识,也是在谷歌Play商店上的唯一标识。这意味着,一旦你已发布的程序使用了这个包名, 你就永远都无法改变它;如果修改了就会导致你的应用程序被当作是一个全新的应用程序,你之前的应用程序的用户也不能更新到使用了新的包名的安装包。

    在此前的 Android Gradle 构建系统中,您的应用程序的包名由你的manifest文件的根元素里的package属性决定:

    AndroidManifest.xml:
        package="com.example.my.app"
        android:versionCode="1"
        android:versionName="1.0" >

    然而,这里所定义的包也有第二个目的:它被用来命名你的资源类的包(以及解析任何相关的Activity的类名)。在上面的示例中,生成的 R 类将会是com.example.my.app.R,因此如果您其他包里面的代码需要引用这些资源,就需要导入

    使用新的 Android Gradle 构建系统,你可以轻松构建多个不同版本的应用程序;例如,您可以构建一个 “free”版本和“pro”版本的应用程序 (通过使用flavors),并且这些不同版本的程序在 Google Play 商店上应该有不同的包,这样他们可以被单独安装和购买,或者是同时安装两个,等等。同样,您还可以同时创建“debug”、“alpha”和“beta” 版本的应用程序 (使用build types),而这些版本的程序同样可以使用唯一的包名。

    同时,您想要在代码中导入的 R 类必须在这段时间内保持不变 ;在您正在构建您的应用程序的不同版本时您的.java 源文件不应该被更改。

    因此,我们解耦了包名称的两种用法:
    • 最终的方案是,在您生成的.apk 的manifest 中,并且用于在你的设备和 Google Play 商店来标识你的应用的包,叫做“application id”。
    • 用于在源代码中来引用您的R类的,并且是解析任何相关的Activity/Service 注册的包,继续被称为“package”。
    你可以在你 gradle 文件中,指定application id,如下所示:

    app/build.gradle:
     
    apply plugin: 'com.android.application'

    android {
        compileSdkVersion 19
        buildToolsVersion "19.1"

        defaultConfig {
            applicationId "com.example.my.app"
            minSdkVersion 15
            targetSdkVersion 19
            versionCode 1
            versionName "1.0"
        }
        ...

    像以前一样,你需要在 Manifest 文件中指定用于代码的包,就如上面的Andr​​oidManifest.xml示例一样。

    这里说到了最关键的部分:

        productFlavors {
            pro {
    applicationId = "com.example.my.pkg.pro"
            }
            free {
    applicationId = ".free"
            }
        }

        buildTypes {
            debug {
                applicationIdSuffix ".debug"
            }
        }
        ....

    (在 Android Studio 中,您也可以在项目结构对话框中图形化地进行这些配置。)

    注意: 出于兼容性原因,如果您没有在您的 build.gradle 文件中定义 applicationId,这个applicationId 将默认为 AndroidManifest.xml 中所指定的相同的值。在这种情况下,这两个显然未解耦,并且如果你试图重构您的代码也将会意外地更改您的应用程序的 id !在 Android Studio 中,新建的项目始终会指定这两个值。

    注 2: 包名称必须始终在默认 AndroidManifest.xml 文件中指定。如果您有多个manifest (例如一个 flavor 的特定的manifest或一个 buildType 的特定的manifest),该包名是可选的,但如果它被指定了,它必须和主manifest中指定的包完全相同。
  • 相关阅读:
    PHP运行出现Notice : Use of undefined constant 的解决办法
    Winfrom 设置Panel添加滚动条
    Unable to find the wrapper ”https”
    winfrom 控件的显示隐藏方法
    winfrom 窗体控件实现二级联动
    【最小生成树】Bzoj1601[Usaco2008 Oct]灌水
    【强连通分量】Bzoj1051 HAOI2006 受欢迎的牛
    【Homework】LCA&RMQ
    【建图+最短路】Bzoj1001 狼抓兔子
    【组合数学】Bzoj2916 [Poi1997]Monochromatic Triangles
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/5828359.html
Copyright © 2020-2023  润新知