ApplicationId 与 PackageName的区别
来源:互联网 发布:smtp服务器 端口 编辑:程序博客网 时间:2024/05/17 22:23
在老版本的Eclipse中做android开发程序的包名是一样的。而在android studio中做android开发则会有两个类别,一个是 PackageName,是我们项目中指定资源的包名。一个是ApplicationId 是用作发布的时候和引用第三方项目作为识别的包名。之前的项目我一直是默认的一样的。前段时间做高德地图开发的时候总是提示我,INVILD_USER_SCODE错误,后来无意间看到这个问题。原来我的ApplicationId 和PackageName是不一致的。所以就做了更改。这里告诉大家高德地图在做key验证的时候填写的包名应该是ApplicationId ,而不是packageName。下面是对此的详细介绍。
所有的 Android 应用程序都有一个包名。包名是设备上的这个应用程序的唯一标识,也是在谷歌Play商店上的唯一标识。这意味着,一旦你已发布的程序使用了这个包名, 你就永远都无法改变它;如果修改了就会导致你的应用程序被当作是一个全新的应用程序,你之前的应用程序的用户也不能更新到使用了新的包名的安装包。
在此前的 Android Gradle 构建系统中,您的应用程序的包名由你的manifest文件的根元素里的package属性决定:
AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.my.app"
android:versionCode="1"
android:versionName="1.0" >
然而,这里所定义的包也有第二个目的:它被用来命名你的资源类的包(以及解析任何相关的Activity的类名)。在上面的示例中,生成的 R 类将会是
com.example.my.app.R
,因此如果您其他包里面的代码需要引用这些资源,就需要导入com.example.my.app.R。同时,您想要在代码中导入的 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 文件中指定用于代码的包,就如上面的AndroidManifest.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"
}
}
....
注意: 出于兼容性原因,如果您没有在您的 build.gradle 文件中定义 applicationId,这个applicationId 将默认为 AndroidManifest.xml 中所指定的相同的值。在这种情况下,这两个显然未解耦,并且如果你试图重构您的代码也将会意外地更改您的应用程序的 id !在 Android Studio 中,新建的项目始终会指定这两个值。
注 2: 包名称必须始终在默认 AndroidManifest.xml 文件中指定。如果您有多个manifest (例如一个 flavor 的特定的manifest或一个 buildType 的特定的manifest),该包名是可选的,但如果它被指定了,它必须和主manifest中指定的包完全相同。
原文链接:http://blog.csdn.net/maosidiaoxian/article/details/41719357
0 0
- ApplicationId与PackageName的区别
- ApplicationId 与 PackageName的区别
- ApplicationId 与 PackageName 的区别
- ApplicationId与PackageName的区别
- ApplicationId与PackageName的纠葛(ApplicationId versus PackageName译文)
- ApplicationId 与 PackageName
- ApplicationId 与 PackageName
- ApplicationId 与 PackageName
- Android ApplicationId 与 PackageName
- android ApplicationId 与 PackageName
- ApplicationId 与 PackageName
- Android Studio-ApplicationId 与 PackageName
- packageName和applicationId有什么区别(基于最新官方文档)
- ApplicationId versus PackageName
- Android applicationId与包名的区别
- Android官方技术文档翻译——ApplicationId 与 PackageName
- Android官方技术文档翻译——ApplicationId 与 PackageName
- Android官方技术文档翻译——ApplicationId 与 PackageName
- crypt密码加密函数的基本用法
- const在c中的用法
- 在金融公司做 IT 是什么感觉?
- Struts2的异常处理机制
- 如何向小白介绍何谓机器学习和数据挖掘?买回芒果他就懂了
- ApplicationId 与 PackageName的区别
- 第一篇博客
- 文件操作总结
- Angualr的指令入门
- 使用SecureCRT转发功能,实现外网访问内网服务
- Volley应用解析
- getpass函数用法
- 如何掌握程序语言
- easyui 列表里下拉框联动