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

转载于:https://www.cnblogs.com/Free-Thinker/p/5828359.html

Android官方技术文档翻译——ApplicationId 与 PackageName相关推荐

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

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

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

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

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

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

  4. Android官方技术文档翻译——开发工具的构建概述

    本文译自Android官方技术文档<Build Overview>,原文地址:http://tools.android.com/build. 因为<Android Lint Chec ...

  5. android官方技术文档翻译——Android Lint

    本文译自androd官方技术文档<Android Lint>,原文地址:http://tools.android.com/tips/lint. 本文地址:http://blog.csdn. ...

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

    高级构建定制 构建选项 Java 编译选项 android {     compileOptions {         sourceCompatibility = "1.6"   ...

  7. ApplicationId 与 PackageName 的区别

    想第一时间获取我的最新文章,请关注公众号: 技术特工队 在 Android Gradle Build System 之前,PackageName 就是 App 的进程 id. <?xml ver ...

  8. Android NFC技术(三)——初次开发Android NFC你须知道NdefMessage和NdefRecord

    Android NFC技术(三)--初次开发Android NFC你须知道NdefMessage和NdefRecord 这最近也是有好多天没写博客了,除了到处张罗着搬家之外,依旧还是许许多多的琐事阻碍 ...

  9. [Android] Android Badge技术分析

    Android Badge技术分析 Badge红点最初来自于IOS的UX设计之中,早期版本的Android原生并没有这个设计,从Android O(SDK 26)开始,Google才开始提供官方的AP ...

最新文章

  1. orb-slam2(学习笔记)+相机
  2. pycharm与python环境配置
  3. c语言实现4x4随机字母,求用C++编写一个4x4矩阵运算类(元素float),实现转置和相乘,具体见补充,在线等!谢谢啦~...
  4. 设计模式 — 行为型模式 — 访问者模式
  5. 定时器java执行越来越晚,虽然Java是解释型语言,但随着随着(???????????)编译器技术的发展,Java程序的运行速度越来越接近于C 等编译型语言。...
  6. python简单代码演示效果-Python Selenium的简单演示程序
  7. C#教程之自己动手写映射第四节[封装删除]
  8. java广告投放系统_[Spring cloud 一步步实现广告系统] 5. 投放系统配置+启动+实体类...
  9. 解释ROM、RAM、SRAM、DRAM与FLASH在使用上的区别及其原因
  10. 模拟赛-20190114-新魔法(distance)
  11. leetcode270. 最接近的二叉搜索树值
  12. ui测试怎么做?依据文档有哪些_微信小程序开发流程有哪些?各个环节注意事项...
  13. sqlserver空间数据 + c# 实现查询附近的设备
  14. Android 内存数据库
  15. 亲戚关系关系算法java程序_亲戚关系计算器 算法实现
  16. HR 信息系统运维制度
  17. 应届生面试该注意的小技巧
  18. JAVA核心编程之集合
  19. 大班线描机器人_大班美术lbrack;漂亮的机器人rsqb;活动设计
  20. Ti ub954/953 Sensor调试心得

热门文章

  1. 干货!639页《深度学习:Deep Learning》硬核课程PPT
  2. 《Python编程从入门到实践》记录之Python处理CSV文件数据
  3. vue 后台数据列表获取图片_vue使用ajax获取后台数据进行显示的示例
  4. Cookie 详解
  5. 15个Linux Yum命令实例--安装/卸载/更新
  6. [BZOJ3238][AHOI2013]差异 [后缀数组+单调栈]
  7. C语言 float、double数据在内存中的存储方式
  8. C#实现中国天气网XML接口测试
  9. android小细节
  10. Sphinx语音识别学习记录 (五)-错误调试