当前位置: 移动技术网 > IT编程>移动开发>Android > Android applicationId和包名的区别总结

Android applicationId和包名的区别总结

2019年07月23日  | 移动技术网IT编程  | 我要评论

三人成虎的意思,网球优等生,公明天地人才市场

应用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值也做了同步修改.

总结

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网