Android applicationId和包名的区别总结

应用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 15
  targetSdkVersion 24
  versionCode 1
  versionName "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中声明的 的真实路径为:com.example.myapplicationtest.ManiActivity

如果开发者想修改包名,必须确保manifest中package值也做了同步修改.

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

(0)

相关推荐

  • android 获取APP的唯一标识applicationId的实例

    使用getIdentifier()方法可以方便的获各应用包下的指定资源ID. 方式一 int indentify = getResources().getIdentifier("com.test.demo:drawable/icon",null,null); 第一个参数格式是:包名 + : +资源文件夹名 + / +资源名:是这种格式 然后其他的可以为null 方式二 intindentify= getResources().getIdentifier("icon"

  • Android编程实现应用获取包名、版本号、权限等信息的方法

    本文实例讲述了Android编程实现应用获取包名.版本号.权限等信息的方法.分享给大家供大家参考,具体如下: /** * 获取当前应用程序的包名 * @param context 上下文对象 * @return 返回包名 */ public static String getAppProcessName(Context context) { //当前应用pid int pid = android.os.Process.myPid(); //任务管理类 ActivityManager manage

  • Android通过aapt命令获取apk详细信息(包括:文件包名,版本号,SDK等信息)

    公司运维问我怎么在windows上安装模拟器,我你说你安装模拟器干什么?他说,我安装模拟器查看app的包名这些信息做统计. 我顿时想,有必要这样折腾么? 我然后就给他装了Android SDK通过build-tools下面的aapt.exe文件执行命令即可得到所有apk信息. aapt命令 aapt l[ist] [-v] [-a] file.{zip,jar,apk} List contents of Zip-compatible archive. aapt d[ump] [--values]

  • Android编程获取包名,版本信息及VersionName名称的方法

    本文实例讲述了Android编程获取包名,版本信息及VersionName名称的方法.分享给大家供大家参考,具体如下: 话不多说,直接上代码,此处,主要是在版本升级的时候,使用较多. private String getAppInfo() { try { String pkName = this.getPackageName(); String versionName = this.getPackageManager().getPackageInfo( pkName, 0).versionNam

  • Android Studio 一个工程打包多个不同包名的APK实例详解

    公司最近有个特别的需求,同一套代码,稍做修改(如包名不一样,图标不一样,应用名不一样等),编译出几个不同的应用.刚好用AS重构完项目,在网上查阅了一些资料,终于搞定!!在这记录一下. AS主要是利用gradle来实现这个需求的,具体做法如下: 修改app的build.gradle文件 假设我们同一套代码编译2个app:app1和app2 android { ... productFlavors { // app1 app1 { // 设置applicationId(这里很重要,两个相同appli

  • Android Studio 修改应用包名实例详解

    Android Studio 修改应用包名实例详解 我们平时新建项目有些朋友可能当时就是随意写的一个包名,然后在项目过程中, 又感觉这个包名不太好,所以就要对包名进行修改,根据我们正常的修改方式,是这样的. 在种情况是只能修改最外层的那个名称, 如果我们现在是需要修改中间的某一个,这里就行不通了. 那么我们来看一下如何修改成你最终要的包名. 操作图如下: 看到没有,我们只需要在setting里面,把 compact empty middle packages 这个选项去掉,这样,我们的包的层次结

  • Android判断包名和类名是否存在的方法

    1.对包名的判断,异常则说明不存在: 复制代码 代码如下: try { PackageManager pm = getPackageManager(); pm.getPackageInfo("com.org", PackageManager.GET_ACTIVITIES); } catch (NameNotFoundException e) {     // TODO Auto-generated catch block     e.printStackTrace(); } 2.对类名

  • Android applicationId和包名的区别总结

    应用ID与包名区别 每个Android应用都有一个唯一的应用ID.在Android设备和市场上,这个ID是你应用的唯一标识.若想在市场上更新应用,新应用的ID必须和原来apk的应用ID一致.所以一旦发布了应用,就不能再改变应用ID. 在Eclipse中没有applicationId这个概念,在Eclipse中applicationId即等同于包名.但是到了Android Studio中,这两个概念做个区分.包名的定义在清单文件中: <manifest xmlns:android="http

  • Android 删除指定包名的App实例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: /** * check and delete the old package app if it exists. */ private void checkOldPackage() { String packageName = "xxx.xxx.xxx.xxx"; if (isAvilible(this, packageName)) { Intent uninstall_intent = new Intent(); uninstal

  • Android 获取未安装的APK图标、版本号、包名等信息方法

    一.获取APK图标 public static Drawable getApkIcon(Context context, String apkPath) { PackageManager pm = context.getPackageManager(); PackageInfo info = pm.getPackageArchiveInfo(apkPath, PackageManager.GET_ACTIVITIES); if (info != null) { ApplicationInfo a

  • Android开发实现根据包名判断App运行状态的方法

    本文实例讲述了Android开发实现根据包名判断App运行状态的方法.分享给大家供大家参考,具体如下: 前面讲过Android开发判断一个app应用是否在运行的方法,这里实现获取指定包名的 APP 是否还在后台运行,判断 APP 是否存活. 背景 可以根据 App 是否有 Service 分两类情况处理: ① 没有 Service ② 有 Service 对于没有 Service 的 App,程序一旦切换到后台,可能很快就被回收了,这里使用 ActivityManager.getRunningT

  • Android获取、更改包名的小技巧分享(超实用)

    前言 小菜因为工作需要,经常需要一套代码修改很多次包名,虽然不是什么技术活,但是小菜的用的次数多了就有了一点点小技巧分享给大家,下面话不多说了,来一起看看详细的介绍吧. 方法如下: 1. 如果源码是在本机电脑中,首先找到源码多位置,例如:由包名 com.aaa.bbb 修改为包名 com.ccc.ddd,可以直接重命名,本地修改: 2. AndroidStudio 打开本项目: 3. 删除 .gradle: 4. 把 build.gradle 中 appicationId 替换为新的包名: 5.

  • android studio logcat 无筛选 显示全部日志 无应用包名区分方式

    android studio logcat 无筛选 显示全部日志 无应用包名区分 不显示所有应用 出现这个情况后很多同学无法解决,重启adb,重启studio,重启电脑,都是没用的... 其实是有个开关选项关了. 见截图: Tools->Android->Enable ADB Integration active. 前面必须有个勾才可以. 关于studio如何筛选日志,有部分同学也不是很清楚,因为我发现有那么一部分人还停留在eclipse的时代,对studio充满了恐惧和畏惧. 具体筛选日志见

随机推荐