- 我们在进行开发的时候,用到的一些第三方sdk需要我们的包名,这的包名指得是applicationId而并非package name,当然在eclipse中也就没有区分了,因为它只有package name。
重命名包名的方法如下:
- 在java 文件夹下新建一个package,名字随便取,如com.dc.zsn.app。
-
将之前写好的类全部选中,并拖拽到新的包中来,此时项目中的所有用到包名的地方都会随之更改,自己再手动的更改一下AndroidManifest.xml文件中manifest下的package就好了;如果拖拽不成功,就去项目根目录下,全部选中后,ctrl+v拷贝一下,然后手动删除代码中的错误导包,自动生成import+包名(前提是配置了自动导包)。
-
将之前的包删掉就可以了。
来源:简书
1.一开始我以为,
applicationID存在于的地方
一个在 build.gradle(app)中,applicationId "xt.car"
一个在BuildConfig.java中, public static final String APPLICATION_ID = "xt.car";
2.后来发现这样也没用。好叭感觉和依赖库有关,太难找了,不找了 /
不能从其他BuildConfig里面去取application id,因为打包后使用的只有app模块的id。
依赖库的application id不能随便改的,你一改,依赖库有类引用R文件的话全部得手动改。
依赖库的application id跟包名是没有任何关系的。
依赖库里面想要获得application
id,必须通过context.getPackageName,或者context.getApplicationInfo().packageName获得。依赖库的工具类,大部分都必须传Context环境,除非一些代码跟环境完全无关。
参考https://blog.csdn.net/he_xiang_/article/details/81080507
应用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"
在Android Studio中创建一个新项目时,applicationId默认是和项目的包名一致的。所以常常有开发者会将两者混淆,以为它们是一个概念。实际上,应用ID和包名是相互独立的。改变包名不会影响应用ID,反之亦然。
通常Android的应用ID与包名是绑定的,所以在Android API中,一些方法和参数从名称上看似乎它们返回的是包名,事实上它们返回的是应用ID值.例如,Context.getPackageName()方法返回的是应用ID,而不是包名。不信我们来看:
-
图中,包名是:com.example.myapplicationtest 应用ID:com.example.myapplicationtest.id应用ID的命名并不是随意的,它至少需要需遵循以下限制:
-
应用ID至少包含两部分(也就是说至少有一个点,如com.example);
-
每部分必须以字母开头;
-
所有字符必须是字母数字或者下划线[a-zA-Z0-9_]
-
app的标识,一旦定义不能随意改变
注意:
如果你使用了webview,请使用包名作为应用ID的前缀,否则,有可能会报错.
-
修改包名
默认情况下,包名与应用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值也做了同步修改.