应用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);
打印日志文件,如下:
注意:
如果你使用了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值也做了同步修改.
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对小牛知识库的支持。
本文向大家介绍Redis和Memcache的区别总结,包括了Redis和Memcache的区别总结的使用技巧和注意事项,需要的朋友参考一下 总结一: memcache官方定义 Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended
本文向大家介绍jQuery length 和 size()区别总结,包括了jQuery length 和 size()区别总结的使用技巧和注意事项,需要的朋友参考一下 jQuery length和size()区别总结如下: 1.length是属性,size()是方法。 2.如果你只是想获取元素的个数,两者效果一样既 ("img").length和("img").length和("img").siz
本文向大家介绍ASP.NET中Session和Cache的区别总结,包括了ASP.NET中Session和Cache的区别总结的使用技巧和注意事项,需要的朋友参考一下 以前实现数据的缓存有很多种方法,有客户端的Cookie,有服务器端的Session和Application。其中Cookie是保存在客户端的一组数据,主要用来保存用户名等个人信息。Session则保存对话信息。Application
本文向大家介绍HashTable、HashSet和Dictionary的区别点总结,包括了HashTable、HashSet和Dictionary的区别点总结的使用技巧和注意事项,需要的朋友参考一下 今天又去面试了,结果依然很悲催,平时太过于关注表面上的东西,有些实质却不太清楚,遇到HashTable和Dictionary相关的知识,记录下来,希望对后来人有所帮助,以及对自己以后复习可以参考。 1
本文向大家介绍C#中new和override的区别个人总结,包括了C#中new和override的区别个人总结的使用技巧和注意事项,需要的朋友参考一下 问题: A类 有方法 public virtual void test() B类继承自A类,有方法 public new void test() 如下实例化: 会调用哪个类中的TEST方法,最好能详细给我解释一下好吗?先谢谢了! 回答: 如果你用
在讲解具体的归档命令和压缩命令之前,先来了解一下归档和压缩所各自代表的含义。 归档,也称为 打包,指的是一个文件或目录的集合,而这个集合被存储在一个文件中。归档文件没有经过压缩,因此,它占用的空间是其中所有文件和目录的总和。 通常,归档总是会和系统(数据)备份联系在一起,不过,有关数据备份的内容,留到后续章节讲,本章仅学习归档命令的基本使用。 和归档文件类似,压缩文件也是一个文件和目录的集合,且这