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与包名的区别相关推荐

  1. 【Android 应用开发】Android 工程修改包名流程 ( 修改 applicationId | 修改 package | 修改 R 资源引用 | 修改 BuildConfig 引用 )

    文章目录 一. Android 工程修改包名流程 二. 修改 applicationId 三. 修改 package 包名 四. AndroidManifest.xml 清单文件组件 五. 修改 R ...

  2. android工程改包名及多工程设置

    android工程更改包名: 1. 先改manifest中的包名 2. src目录上点右键,选择refactor->rename,改包名,然后选择continue. 3. 改了包名之后,要注意包 ...

  3. Android Studio(五):修改Android Studio项目包名

    Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...

  4. Android绕过微信包名限制对接微信登录和支付

    Android绕过微信包名限制对接微信登录和支付 前言 最终效果 原理 代码 通过 APT 生成 WXEntryActivity 文件 对接微信SDK End 前言 Android对接微信登录和支付几 ...

  5. Android Studio 修改包名

    Android Studio 修改包名 1. 介绍 2. 操作概述 3. 图片解说 1. 介绍 根据目录层次修改包名(包括公司名). 目的:将 kirin 公司改成 kk. 参考:AndroidStu ...

  6. Android开发时包名、签名、渠道和版本号的易坑点(转)

    本文中总结一下 Android 开发中容易被忽视的一些注意事项吧: 一.谨慎选择包名 包名 (Package Name) 就相当于一款应用在户口本上登记的名字,是系统用来区分不同应用的字段.重复的包名 ...

  7. Android实现根据包名跳转各大应用市场

    目录 前言: 1.MartetUtils:各大应用市场工具类 2.使用实例代码,这里以跳转qq为例: 3.实现的效果截图如下: 4.总结:目前已经实现华为.小米.oppo.vivo.魅族.联想.应用宝 ...

  8. android自动填充包名,debug/release 修改包名,取不同包名下的agconnect-services.json 文件...

    问题描述 我在打多渠道包的时候,我需要区分debug版本,release版本,其中涉及到包名的不同,我使用release编译的时候,发现如下错误信息.这个原因是因为你的agconnect-servic ...

  9. android studio 修改包名_android逆向笔记之初学者常用adb命令

    android逆向常用命令笔记 1.如何导出已安装apk? a.列出已经安装的包 | grep -i 关键字 b.找出安装路径 adb shell pm path 包名 c.拉下来: adb pull ...

最新文章

  1. 业界丨2018年人工智能和机器学习路在何方? 看看美国公司准备怎么做
  2. 四丶KingFeng搭建+青龙对接kingfeng
  3. Effective C++ 读书笔记之Part2.Constructors, Destructors, and Assignment Operators
  4. SD从零开始15 税(Taxes)
  5. stateflow中终止节点小记
  6. 瑞银监控机器人组装法_瑞银公布Model 3后续拆解报告:装配问题严重 噪音勉强能接受...
  7. BZOJ3139: [Hnoi2013]比赛
  8. 如何安装mysql8.0后配置_MYSQL8.0安装配置
  9. 麒麟安装增强功能失败(未解决):Could not downgrade policy file /etc/selinux/targeted/policy/policy.29
  10. 批量下载魔兽replays录像文件
  11. 命令行解压cab文件
  12. YDUI Touch InfiniteScroll无限加载数据测试
  13. Ubuntu安装opencv的扩展模块-viz模块
  14. 编写程序,由键盘输入三个整数分别存入变量num1,num2,num3中,对它们进行排序, 使用if-else结构,并按从小到大的顺序输出
  15. Android Webrtc使用Wifi Direct无法建立P2P连接
  16. GreenPlum中性能调优之shared_buffers修改
  17. UVA-12627(考眼力~)
  18. Linux四网口绑定,linux 网口绑定
  19. layui表格工具条,动态控制按钮的展示
  20. docker 搭建本地私有仓库

热门文章

  1. 20年未解的MIT密码难题,被自学成才的程序员破解了,比预计早15年
  2. 30多门免费课程上线,亚马逊“机器学习大学”开学了
  3. 银河水滴打响步态识别商用第一枪!3大产品1.35亿订单,工业视觉平台免费开放...
  4. 惊!史上最佳GAN现身,超真实AI假照片,行家们都沸腾了
  5. 走美团特色的无人配送道路,王慧文:久久为功才能做成
  6. 一架无人机加入警队4个月,墨西哥小城犯罪率下降了10%
  7. SpringCloud Alibaba - Nacos 作为配置中心 读取Properties配置信息
  8. Python开发技术详解PDF
  9. Java并发之AQS同步器学习
  10. 特斯拉进入Autopilot 2.0时代,高举“普通雷达”旗帜!