资讯专栏INFORMATION COLUMN

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

LuDongWei / 2745人阅读

摘要:本文译自官方技术文档,原文地址。转载请注明出处。翻译如有错讹,敬请指正。与所有的应用程序都有一个包名。用于在源代码中来引用您的类的,并且是解析任何相关的注册的包,继续被称为。注包名称必须始终在默认文件中指定。

本文译自androd官方技术文档《ApplicationId versus PackageName》,原文地址:http://tools.Android.com/tech...。
本文地址:http://blog.csdn.NET/maosidia...。转载请注明出处。翻译如有错讹,敬请指正。

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,因此如果您其他包里面的代码需要引用这些资源,就需要导入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示例一样。

这里说到了最关键的部分:当你像上面那样做时,这两个包是互相独立的。你能够完全自由地重构您的代码——更改用于Activity和Service的内部包,更新你的Manifest里的包,和重构您的导入语句。这都不会影响到你的程序的最终id,这个最终的id的值总是为你的Gradle文件中指定的applicationId的值。(笔者注:packageName在代码中使用,通常在AndroidManifest.xml中指定,applicationId则只是用于程序的标识,通常在build.gradle中指定。这样有一个好处,假如你想发布一个免费版,一个收费版,你只需要在build.gradle中把applicationId后面加上免费版的后缀包名(如".free"),收费版加上收费版的后缀即可,而不需要修改你的其他代码。)

你可以通过使用以下的 Gradle DSL 方法,为不同的flavors和构建类型修改您的应用程序的 applicationId:

app/build.gradle:

productFlavors {
    pro {
        applicationId = "com.example.my.pkg.pro"
    }
    free {
        applicationId = "com.example.my.pkg.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.ucloud.cn/yun/13657.html

相关文章

  • Gradle实战:不同编译类型的包同设备共存

    摘要:二实践基本概念在上一篇文章实际应用一批量打包中我们已经介绍过的概念,本文主要通过这三个参数来实现多包共存。试想,我们能否修改百度地图验证时上传的包名呢然而,经过一番努力,查看了百度地图包,我们无法实现这一点。 查看原文:http://blog.csdn.net/u0108184... Gradle实战系列文章: 《Gradle基本知识点与常用配置》《Gradle实战:Android多...

    Towers 评论0 收藏0
  • APK多开原理

    摘要:去年给运营同事解释了最简单的多开原理,最简单的方式通过修改包名达到多开的目的。打开应用获取包名后面为版本号利用反编译查看文件利用反编译代码多开制作流程上面主要是介绍了多开的原理,制作的过程是基于拿到源码的情况下。 去年给运营同事解释了最简单的多开原理,最简单的方式通过修改包名达到多开的目的。很多 APK 现在已经不能通过这个方式达到多开了,虽然 LOW ,但是对了解多开原理还是有点用的...

    goji 评论0 收藏0
  • Gradle for Android 第二篇( Build.gradle入门 )

    摘要:第一个属性是,该属性复写了文件中的包名,但是关于和有一些不同。在文件中定义的依然被用来作为包名和文件的包名。而将被用在设备和各大应用商店中作为唯一的标示。定义为最小支持。将会作为版本号标示,而毫无作用。其中不是必须得。 这一系列暂不更新,相关技术讨论,请移步微信群,谢谢,希望大家多多支持! showImg(https://segmentfault.com/img/bVtdBU); 新年...

    wpw 评论0 收藏0
  • Gradle系列-运用篇

    摘要:例如默认配置项签名相关构建变体产品风格源集配置等。例如你想修改为的名称,这时你可以使用这样在下的包名都是以打头会帮助我们创建默认的源集与目录位于,用来存储所有构建变体间的共享资源。 showImg(https://segmentfault.com/img/bVbsh3m?w=2560&h=1280); 上次我们说到gradle的原理,主要是偏理论上的知识点,直通车在这Android G...

    warmcheng 评论0 收藏0
  • Gradle系列-运用篇

    摘要:例如默认配置项签名相关构建变体产品风格源集配置等。例如你想修改为的名称,这时你可以使用这样在下的包名都是以打头会帮助我们创建默认的源集与目录位于,用来存储所有构建变体间的共享资源。 showImg(https://segmentfault.com/img/bVbsh3m?w=2560&h=1280); 上次我们说到gradle的原理,主要是偏理论上的知识点,直通车在这Android G...

    jifei 评论0 收藏0

发表评论

0条评论

LuDongWei

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<