Android package属性、package name和Application ID三者的联系及区别

发布时间 - 2026-01-10 22:09:45    点击率:

Android package属性、package name和Application ID三者的联系及区别

  1. package属性:在AndroidManifest.xml文件中。
  2. package name:应用程序的包名。
  3. Application ID:模块defaultConfig块下的applicationId属性。

设置Application ID

每个Android应用程序都有唯一一个类似Java包名的Application ID,比如com.example.myapp。在Android设备和Google应用商店上,Application ID是您应用的唯一标识。如果您想上传应用程序的新版本,那么Application ID必须和原来相同。如果您改变了新版本应用程序的Application ID,那么Goolge应用商店会认为这是个完全不同的应用程序。所以,从您第一次上传应用程序开始,绝对不要更改Application ID。

Application ID定义在模块build.gradle的applicationId属性中,如下所示:

android {
  defaultConfig {
    applicationId "com.example.myapp"
    minSdkVersion 15
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
  }
  ...
}

当您在Android Studio中创建新项目的时候,您可以设置applicationId属性,这时,Application ID和package name是精确匹配的。除此之外,两者是完全独立的。当然,您可以更改package name,但是这不会影响到Application ID。反之亦然(再次提醒:在您上传应用程序之后,不要修改Application ID,不要修改Application ID,不要修改Application ID)。然而,您应该意识到,修改package name 还有另一个后果。这部分详见修改包名(下文有讲)。

尽管Application ID看起来和传统的Java包名很类似,但是Application ID的命名规则有更多的限制:

  • 最少有两段(至少一个.隔开)
  • 每段开头必须是字母
  • 所有的字符只能是字母、数字和下划线

注意:在以前,Application ID 直接绑定package name。所以,有些Android APIs在方法名或者参数名中使用“package name”,但是实际上指的是Application ID。举个栗子, Context.getPackageName()方法返回Application ID。所以没必要在您应用程序代码之外分享真正的package name。

警告:如果你使用WebView,考虑使用您的package name作为您Application ID的前缀,否则,您可能遇见

issue 211768。

修改构建版本的Application ID

当为您的应用程序构建APK时,构建工具使用build.gradle文件中的defaultConfig块中定义的Application ID标识APK(如下所示)。但是,如果你想创建不同版本的应用程序并且在Google应用商店中显示不同的信息,例如“免费版”和“专业版”。您需要构建拥有不相同Application ID的不同版本。

在这种情况下,每个构建版本应该定义不同的product flavor,且每个flavor都在productFlavors{}块内部。对于每个flavor,您可以重新定义applicationId属性,或者给默认的applicationId増加前后缀,如下所示:

android {
  defaultConfig {
    applicationId "com.example.myapp"
  }
  productFlavors {
    free {
      applicationIdSuffix ".free"
    }
    pro {
      applicationIdSuffix ".pro"
    }
  }
}

这样定义之后,“free”的Application ID是”com.example.myapp.free“。

在构建类型上,你也可以使用后缀,如下所示:

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

由于Gradle首先应用product flavor之后才应用build type,所以”free debug”版本现在的Application ID是”com.example.myapp.free.debug”。如果你想在同一部手机上同时安装debug和release两个版本,这将非常有用,因为没有两个应用程序可以拥有相同的Application ID。

记住一点,同一应用程序拥有不同的Application ID,Google应用市场将会认为这是两个应用程序。所以,如果您为了适配不同的设备配置(例如不同的API等级),并且想用相同信息去分发多个应用程序。那么对于每个版本,您必须使用相同的Application ID和不同的versionCode。

警告:为了兼容先前的SDK工具,如果你没有在build.gradle中定义applicationId属性,那么构建工具将使用AndroidManifest.xml中的package name作为Application ID。在这种情况下,重命名package name意味着同时重命名了Application ID。

提示:如果您需要在manifest文件中引用Application ID,可以在manifest的属性中使用${applicationId}占位符。Gradle在构建时会自定替换这个标识为真正的Application ID。更多详见 Inject Build Variables into the Manifest.

测试专用Application ID

默认情况下,构建工具会使用指定构建版本的Application ID(附加.test)将Application ID应用到您的instrumentation测试APK。例如,构建版本为”com.example.myapp.free”的测试应用程序真正的Application ID是“com.example.myapp.free.test“。

通常这不是必要的,你可以在defaultConfig或者productFlavor块中定义testApplicationId属性来修改Application ID。

注意:为了避免与测试应用程序命名冲突,构建工具为测试应用程序使用基于测试Application ID生成R.class的命名空间。

修改package name

虽然package name默认完全匹配Application ID,但是您仍然可以修改它。如果您想修改package name,请留意package name(项目目录结构)和AndroidManifest.xml中的package属性是完全对应的。如下所示:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.myapp"
  android:versionCode="1"
  android:versionName="1.0" >

对于Android构建工具来说,package属性用于两件事情:

应用于您应用程序生成R.Java类的命名空间。

例如:在上面的manifest文件中。R类是“com.example.myapp.R”

用于解析AndroidManifest.xml文件中任何类的相对路径。

例如:在上面的manifest文件中。一个activity定义为\,将会被解析为com.example.myapp.MainActivity。

因此,package属性的值应该总是和工程的package name相同。当然,你可以给工程设置子包名。这些文件必须从package属性的命名空间导入R类,并且任何定义在manifest中的组件必须增加子包名(或者写全路径)。

如果您需要完全重命名package name,请确保您已经更新package属性。直到您用Android studio的工具重命名包,之后这些自动保持同步。(如果没有保持同步,您的代码将不能正确解析R类,因为它不再是相同包下,并且manifest也将不能正确识别您的activities和其它组件)。

您必须在AndroidManifest.xml文件中置顶package属性,如果您另外添加了manifest文件,请注意,由最高优先级manifest文件提供的package name始终用于合并最终的manifest。更多:[Merge Multiple Manifest Files。

望周知:尽管您的项目可以设置package属性不等于applicationId,然并卵。构建工具在最后构建的时候将会复制Application ID并设置为您应用程序唯一的package属性的值。所以,如果您在构建成功之后检查AndroidManifest.xml文件,请不要惊讶package属性发生变化。在Android平台和Google应用商店,package属性才是真正作为您应用程序唯身份凭证。所以,一旦使用原始值构建(使用命名空间的R类解析manifest中的组件),构建工具将会丢弃package属性的值,并且使用Application ID替换。

原文链接:https://developer.android.com/studio/build/application-id.html#change_the_package_name

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Android  # package属性、package  # name和Application  # ID三者的联系及区别  # package  # ID联系及区别  # Android Application存取公共数据的实例详解  # Android application捕获崩溃异常怎么办  # Android 退出多Activity的application的方式方法  # Android Framework Application Framework层简单介绍  # Android编程之Application设置全局变量及传值用法实例分析  # Android开发中避免应用无响应的方法(Application Not Responding、AN  # Android获取应用程序名称(ApplicationName)示例  # 详解Android中Application设置全局变量以及传值  # 应用程序  # 您的  # 所示  # 将会  # 如果您  # 为您  # 您可以  # 重命名  # 您需要  # 你可以  # 你想  # 您在  # 周知  # 上传  # 在上面  # 在这种情况下  # 新版本  # 您想  # 您必须  # 专业版 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 简单实现jsp分页  高性价比服务器租赁——企业级配置与24小时运维服务  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  如何在万网开始建站?分步指南解析  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  如何注册花生壳免费域名并搭建个人网站?  如何用VPS主机快速搭建个人网站?  如何用花生壳三步快速搭建专属网站?  微信小程序 配置文件详细介绍  香港服务器租用费用高吗?如何避免常见误区?  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  教你用AI润色文章,让你的文字表达更专业  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  开心动漫网站制作软件下载,十分开心动画为何停播?  iOS发送验证码倒计时应用  如何挑选高效建站主机与优质域名?  QQ浏览器网页版登录入口 个人中心在线进入  如何用狗爹虚拟主机快速搭建网站?  什么是javascript作用域_全局和局部作用域有什么区别?  利用vue写todolist单页应用  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  微信推文制作网站有哪些,怎么做微信推文,急?  怎么用AI帮你设计一套个性化的手机App图标?  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  如何获取免费开源的自助建站系统源码?  Laravel如何自定义分页视图?(Pagination示例)  电商网站制作价格怎么算,网上拍卖流程以及规则?  高端建站如何打造兼具美学与转化的品牌官网?  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  如何获取上海专业网站定制建站电话?  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  如何快速生成专业多端适配建站电话?  网站制作壁纸教程视频,电脑壁纸网站?  Laravel怎么使用artisan命令缓存配置和视图  新三国志曹操传主线渭水交兵攻略  Laravel PHP版本要求一览_Laravel各版本环境要求对照  高端建站三要素:定制模板、企业官网与响应式设计优化  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  佛山网站制作系统,佛山企业变更地址网上办理步骤?