本文译自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中指定的包完全相同。

Android官方技术文档翻译——ApplicationId 与 PackageName的更多相关文章

  1. Android官方技术文档翻译——Gradle 插件用户指南(6)

    没想到翻译这篇<Gradle 插件用户指南>拖了差不多一个月,还跨年了.不过还好,在2号时终于一口气把剩下的给翻译完了(其实那天剩下的也就不到一章). 今天先发一下第六章,明天再发第七章. ...

  2. Android官方技术文档翻译——Gradle 插件用户指南(5)

    昨晚把第五章未译完的几句话攻克了.只是第六章没怎么译,明后天又是周末,假设周一前第六章翻译完的话,周一再发第六章. 本文译自Android官方技术文档<Gradle Plugin User Gu ...

  3. Android官方技术文档翻译——Gradle 插件用户指南(4)

    最近赶项目,白天基本没时间,只有晚上在家的时候才能看一看.昨天晚上只翻译完了第四章,今天就只发第四章吧. 本文译自Android官方技术文档<Gradle Plugin User Guide&g ...

  4. Android官方技术文档翻译——Gradle 插件用户指南(7)

    本文译自Android官方技术文档<Gradle Plugin User Guide>,原文地址:http://tools.android.com/tech-docs/new-build- ...

  5. Android官方技术文档翻译——Gradle 插件用户指南(1-3)

    不知道是什么网络问题,上午一直发不了博客,其它页面基本正常,就是在写博客这里,每次打开都是响应超时.刚才用了VPN,顺便试了一下,竟然能够编辑.想是CDN之类的问题吧. 这次翻译的是Gradle 插件 ...

  6. Android官方技术文档翻译——迁移 Gradle 项目到1.0.0 版本

    本文译自Android官方技术文档<Migrating Gradle Projects to version 1.0.0>,原文地址:http://tools.android.com/te ...

  7. Android官方技术文档翻译——新构建系统概述

    本文译自Android官方技术文档<New Build System>,原文地址:http://tools.android.com/tech-docs/new-build-system. ...

  8. Android官方技术文档翻译——清单合并

    本文译自Android官方技术文档<Manifest Merger>,原文地址:http://tools.android.com/tech-docs/new-build-system/us ...

  9. Android官方技术文档翻译——Ant 任务

    本文译自Android官方技术文档<Ant Tasks>,原文地址:http://tools.android.com/tech-docs/ant-tasks. 由于是抽着时间译的.所以这篇 ...

随机推荐

  1. *[topcoder]LittleElephantAndBalls

    http://community.topcoder.com/stat?c=problem_statement&pm=12758&rd=15704 topcoder的题经常需要找规律,而 ...

  2. Yorhom浅谈:作为一名初中生,自学编程的点点滴滴 - Yorhom's Game Box

    Yorhom浅谈:作为一名初中生,自学编程的点点滴滴 我是一名不折不扣的初中生,白天要背着书包去上学,晚上要拿起笔写作业.天天如此,年年如此. 我的爱好很广泛,喜欢了解历史,读侦探小说,骑车,打篮球, ...

  3. Form Personalization应用总结

    1 Form Personalization 简介 Oracle EBS 11.5.10增加了Form Personalization功能,该功能不仅是技术功能的一次增强,也是对业务功能的扩展,提高了 ...

  4. Oracle Form属性、内置子程序、触发器、系统变量简要

    一.属性 1.1 通用属性 名称(Name) 子类信息(Subclass Information) 备注(Comments) 标题(Title) 方向(Direction) 字体名称(Font Nam ...

  5. JDK/bin目录下的不同exe文件的用途(转)

    新安装完JDk 大家是否发现安装目录的bin文件夹有很多exe文件 下面就为大家讲解不同exe文件的用途 javac:Java编译器,将Java源代码换成字节代 java:Java解释器,直接从类文件 ...

  6. win7无法识别U盘,驱动信息:该设备的驱动程序未被安装。 (代码 28)

    台式机的win7 64位系统可以识别u盘,但笔记本的win7 64位却识别不了,说明U盘是可以用的.查看笔记本的设备管理器,发现驱动安装失败,提示信息为“该设备的驱动程序未被安装. (代码 28) ” ...

  7. Sharepoint 2010 根据用户权限隐藏Ribbon菜单

    转:http://xiangzhangjun2006.blog.163.com/blog/static/44140966201211715416178/   1.使用SPD打开站点,并打开母版页.默认 ...

  8. C#使用Word中的内置对话框实例

    本文实例讲述了C#使用Word中的内置对话框的方法,分享给大家供大家参考.具体实现方法如下: 使用 Microsoft Office Word 时,有时需要显示用户输入对话框.虽然可以创建自己的对话框 ...

  9. 基于WebForm+EasyUI的业务管理系统形成之旅 -- 首页快捷方式(Ⅲ)

    上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 登录窗口>,主要是介绍系统登录界面页面设计与代码. 最近刚做完施工计划安排设计,之后将分享出来,这个系列更新不是很快,望 ...

  10. Get ListView items from other windows z

    This is more difficult than one might think. In order to get the information you're looking for, you ...