赞
踩
方案1:修改AndroidManifest.xml中的package属性以及build.gradle中的applicationId属性,不修改源代码目录的包名
当代码很多时,修改源代码目录的包名是不会refactor成功的,因为会提示java代码中大量的直接引用原包名.类的引用路径(项目大时,refactor时会提示代码中有几千个,上万个直接引用原包名的地方 References in code to directory XXX 8886 usages
`References in generated code to directory XXX 552 usages),各种直接使用原包名的引用,还有各种文件中可能也是使用的原包名的引用,要确保都修改成功了,当代码很多时,不推荐修改源代码目录的包名。只需修改AndroidManifest.xml中的package属性以及build.gradle中的applicationId属性,以及AndroidManifest.xml 清单文件中的所有组件改为使用全路径引用,修改R引用,修改BuildConfig引用。
① 修改 applicationId : 修改主 Module 下的 build.gradle 中的 applicationId ;
② 修改AndroidManifest.xml中package : 修改 AndroidManifest.xml 清单文件中的 packge 包名 ;
建议使用shift+F6进行修改,这样AndroidManifest.xml中的组件的包名会自动修改为全路径包名。避免使用缺省包名的形式,包名缺省 , 如果修改根节点的 package 属性 , 就无法找到对应的组件了。
③ AndroidManifest.xml 清单文件修改 : 所有的组件都使用全路径名称 , FileProvider 的 authorities 也要进行相应修改 ;
④ 修改 R 引用 : 修改 Java 代码中的 package.R 引用 ;
很多java类里面用到了R类的资源,但由于修改前的源代码的包名和AndroidManifest.xml中的package的名字一致,因此java文件的import语句块那里可以忽略 import packageNameXXX.R
这个import语句,修改了包名后,这个时候就要在java文件里加入 import packageNameXXX.R
这个import语句。
由于R.java文件是生成在AndroidManifest.xml中的package的目录下的,因此如果源代码的包名和AndroidManifest.xml中的package的名字一致,就可以直接使用R.java,不需要添加 import packageNameXXX.R
语句。
⑤ 修改 BuildConfig 引用 : 修改 Java 代码中的 package.BuildConfig 引用 ;
方案2:修改AndroidManifest.xml中的package属性以及build.gradle中的applicationId属性,同时修改源代码目录的包名
这种方案的不好的地方就是:修改源代码目录的包名时会提示java代码中有大量原包名的引用,可能还有一些配置文件也是使用的原包名的引用,要确保都被修改成功了。
每个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
参考:
Android 快速修改包名
Android Studio 更换包名方法
【Android 应用开发】Android 工程修改包名流程 ( 修改 applicationId | 修改 package | 修改 R 资源引用 | 修改 BuildConfig 引用 )
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。