Android applicationId与包名的区别
2019独角兽企业重金招聘Python工程师标准>>>
应用ID与包名区别
每个Android应用都有一个唯一的应用ID.在Android设备和市场上,这个ID是你应用的唯一标识.若想在市场上更新应用,新应用的ID必须和原来apk的应用ID一致.所以一旦发布了应用,就不能再改变应用ID.
在Eclipse中没有applicationId这个概念,在Eclipse中applicationId即等同于包名。但是到了Android Studio中,这两个概念做个区分。包名的定义在清单文件中:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.myapplicationtest" >
应用ID是在moudle层的build.gradle中定义,applicationId值即为应用ID,如下所示
android {defaultConfig {applicationId "com.example.myapplicationtest"minSdkVersion 15targetSdkVersion 24versionCode 1versionName "1.0"}...}
但是,在Android Studio中创建一个新项目时,applicationId默认是和项目的包名一致的。所以常常有开发者会将两者混淆,以为它们是一个概念。实际上,应用ID和包名是相互独立的。改变包名不会影响应用ID,反之亦然。
通常Android的应用ID与包名是绑定的,所以在Android API中,一些方法和参数从名称上看似乎它们返回的是包名,事实上它们返回的是应用ID值.例如,Context.getPackageName()方法返回的是应用ID,而不是包名。不信我们来看:
图中,包名是:com.example.myapplicationtest 应用ID:com.example.myapplicationtest.id
在MainActivity中调用如下代码:
String applicationId = this.getPackageName();Log.i("TESTKIM","applicationId:" + applicationId);
打印日志文件,如下:
应用ID的命名并不是随意的,它至少需要需遵循以下限制:
应用ID至少包含两部分(也就是说至少有一个点,如com.example);
每部分必须以字母开头;
所有字符必须是字母数字或者下划线[a-zA-Z0-9_]
注意:
如果你使用了webview,请使用包名作为应用ID的前缀,否则,有可能会报错.
应用ID用处
应用ID除了唯一标识了应用,那么它在开发过程中可以有哪些用处呢?
试想一下,当我们开发应用的时候,要在一台测试机上同时装上开发版和发布版,如何才能做到呢?其实很简单,只要让开发版的应用ID与发布版不一致即可。所以,只需要在buildTypes中修改开发版的应用ID就行。如下:
android {...buildTypes {debug {applicationIdSuffix ".debug" //等同于“com.example.myapplicationtest.debug”}}}
上面代码中,将debug版的应用ID在原来应用ID后追加“.debug”。applicationIdSuffix代表了默认的应用ID,即为defaultConfig中applicationId的值。所以,debug版的应用ID为:"com.example.myapplicationtest.debug".
另外,有时我们发布到市场的应用希望有不同的版本,比如:免费版和收费版。这就需要我们来构建不同的应用变体。那么我们可以在productFlavors中进行相应的配置,来生成不同的应用。如:
android {defaultConfig {applicationId "com.example.myapplicationtest"}productFlavors {free {applicationIdSuffix ".free"}paid {applicationIdSuffix ".paid"}}}
在上面的代码中,我们用"free"表示免费版,用"paid"表示付费版。在productFlavors中,通过配置不同应用ID,最终生成不同的应用。最终这两种应用apk可同时存在于市场中。
修改包名
默认情况下,包名与应用ID是相同的。当然,开发者也可以对包名进行修改.如果开发者想要修改包名的话,注意项目目录结构必须与AndroidManifest.xml中package属性的包名一致.
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.myapplicationtest"android:versionCode="1"android:versionName="1.0" >
package值有两个作用:
它为R.java文件提供了命名空间,例如R class的包名为com.example.myappcationtest.R
决定manifest中声明的class的相对名称。如:manifest中声明的
<activity android:name=".MainActivity"> 的真实路径为:com.example.myapplicationtest.ManiActivity
如果开发者想修改包名,必须确保manifest中package值也做了同步修改.
亲,如果您感觉本文有用,请点个赞再走吧✌(>‿◠)!!
转载于:https://my.oschina.net/ZhenyuanLiu/blog/1840931
Android applicationId与包名的区别相关推荐
- 【Android 应用开发】Android 工程修改包名流程 ( 修改 applicationId | 修改 package | 修改 R 资源引用 | 修改 BuildConfig 引用 )
文章目录 一. Android 工程修改包名流程 二. 修改 applicationId 三. 修改 package 包名 四. AndroidManifest.xml 清单文件组件 五. 修改 R ...
- android工程改包名及多工程设置
android工程更改包名: 1. 先改manifest中的包名 2. src目录上点右键,选择refactor->rename,改包名,然后选择continue. 3. 改了包名之后,要注意包 ...
- Android Studio(五):修改Android Studio项目包名
Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...
- Android绕过微信包名限制对接微信登录和支付
Android绕过微信包名限制对接微信登录和支付 前言 最终效果 原理 代码 通过 APT 生成 WXEntryActivity 文件 对接微信SDK End 前言 Android对接微信登录和支付几 ...
- Android Studio 修改包名
Android Studio 修改包名 1. 介绍 2. 操作概述 3. 图片解说 1. 介绍 根据目录层次修改包名(包括公司名). 目的:将 kirin 公司改成 kk. 参考:AndroidStu ...
- Android开发时包名、签名、渠道和版本号的易坑点(转)
本文中总结一下 Android 开发中容易被忽视的一些注意事项吧: 一.谨慎选择包名 包名 (Package Name) 就相当于一款应用在户口本上登记的名字,是系统用来区分不同应用的字段.重复的包名 ...
- Android实现根据包名跳转各大应用市场
目录 前言: 1.MartetUtils:各大应用市场工具类 2.使用实例代码,这里以跳转qq为例: 3.实现的效果截图如下: 4.总结:目前已经实现华为.小米.oppo.vivo.魅族.联想.应用宝 ...
- android自动填充包名,debug/release 修改包名,取不同包名下的agconnect-services.json 文件...
问题描述 我在打多渠道包的时候,我需要区分debug版本,release版本,其中涉及到包名的不同,我使用release编译的时候,发现如下错误信息.这个原因是因为你的agconnect-servic ...
- android studio 修改包名_android逆向笔记之初学者常用adb命令
android逆向常用命令笔记 1.如何导出已安装apk? a.列出已经安装的包 | grep -i 关键字 b.找出安装路径 adb shell pm path 包名 c.拉下来: adb pull ...
最新文章
- 业界丨2018年人工智能和机器学习路在何方? 看看美国公司准备怎么做
- 四丶KingFeng搭建+青龙对接kingfeng
- Effective C++ 读书笔记之Part2.Constructors, Destructors, and Assignment Operators
- SD从零开始15 税(Taxes)
- stateflow中终止节点小记
- 瑞银监控机器人组装法_瑞银公布Model 3后续拆解报告:装配问题严重 噪音勉强能接受...
- BZOJ3139: [Hnoi2013]比赛
- 如何安装mysql8.0后配置_MYSQL8.0安装配置
- 麒麟安装增强功能失败(未解决):Could not downgrade policy file /etc/selinux/targeted/policy/policy.29
- 批量下载魔兽replays录像文件
- 命令行解压cab文件
- YDUI Touch InfiniteScroll无限加载数据测试
- Ubuntu安装opencv的扩展模块-viz模块
- 编写程序,由键盘输入三个整数分别存入变量num1,num2,num3中,对它们进行排序, 使用if-else结构,并按从小到大的顺序输出
- Android Webrtc使用Wifi Direct无法建立P2P连接
- GreenPlum中性能调优之shared_buffers修改
- UVA-12627(考眼力~)
- Linux四网口绑定,linux 网口绑定
- layui表格工具条,动态控制按钮的展示
- docker 搭建本地私有仓库
热门文章
- 20年未解的MIT密码难题,被自学成才的程序员破解了,比预计早15年
- 30多门免费课程上线,亚马逊“机器学习大学”开学了
- 银河水滴打响步态识别商用第一枪!3大产品1.35亿订单,工业视觉平台免费开放...
- 惊!史上最佳GAN现身,超真实AI假照片,行家们都沸腾了
- 走美团特色的无人配送道路,王慧文:久久为功才能做成
- 一架无人机加入警队4个月,墨西哥小城犯罪率下降了10%
- SpringCloud Alibaba - Nacos 作为配置中心 读取Properties配置信息
- Python开发技术详解PDF
- Java并发之AQS同步器学习
- 特斯拉进入Autopilot 2.0时代,高举“普通雷达”旗帜!