项目中修改包名是一件很痛苦的事情,网上搜索基本都是简单粗暴的Rename,对于庞大的项目,修改起来非常繁琐,所以我们急需找到快速简单的方法
包名目录Rename
1.选中包名目录 -----> 右键 ---> Refactor ----> Rename
2.在弹框中选择Rename package
3.然后进行下一步
特点:这种方式操作最简单,AS会帮你自动完成package,applicationId的修改。
但是,这种修改方式会修改你项目原来的目录结构,当你的项目非常庞大,文件的引用错综复杂,修改包名的时候,AS需要修改每个文件的package和import,这时候Rename package可能会失败,也有可能包名修改成功,但是文件里面的import 文件路径无法修改。这时候我们就要寻求新的方法了,确保不修改项目目录结构。
新增新包名的module
思路就是,新建一个module,使用新包名,然后之前的module通过library来引入
1.新建module,使用新包名com.wjc.myproj
2.修改老module build.gradle apply plugin: 'com.android.application' 为 apply plugin: 'com.android.library',并删除defaultConfig中的applicationId
3.在新module中引入老module,在build.gradle dependencies 添加 implementation project(':app')
4.处理AndroidManifest.xml冲突的部分
特点:
在不改变老工程项目结构和目录的情况下完成包名的修改,对于一般项目可以完成修改,但是有几个问题非常棘手:
1.如果老module中使用butterknife,把项目作为library,会编译不通过,解决办法可以参考:https://www.jianshu.com/p/c5fd14619aea
2.多个module中AndroidManifest.xml merge的时候会有冲突的地方,需要一个个解决。
新增package路径
对于上面那种方法的缺陷,出了一个新的方案,亲测可以。
思路:修改包名,最重要的是修改applicationId 和 package,是不是我们只要修改这两个地方就行了呢?所以我们先试试修改这两个地方
1.将项目applicationId 和 package修改成新的
3.这时候会有两个地方报错 Activity路径不对,找不到R文件
4.AndroidManifest.xml 使用的相对路径,需要改成绝对路径。
R文件找不到是因为修改了package,所以R文件的目录也修改了,需要替换所有的R文件import
5.这次我们再重新运行,success!
特点:
使用简单,无需修改原项目路径和结构,大型项目也可以使用
小结:在接到修改包名这个需求时,并没有着急去修改,而是去思考修改包名到底是需要修改什么,从而找到最简单的方法