項(xiàng)目中修改包名是一件很痛苦的事情拜鹤,網(wǎng)上搜索基本都是簡(jiǎn)單粗暴的Rename耍贾,對(duì)于龐大的項(xiàng)目,修改起來非常繁瑣,所以我們急需找到快速簡(jiǎn)單的方法
包名目錄Rename
1.選中包名目錄 -----> 右鍵 ---> Refactor ----> Rename
2.在彈框中選擇Rename package
3.然后進(jìn)行下一步
特點(diǎn):這種方式操作最簡(jiǎn)單准夷,AS會(huì)幫你自動(dòng)完成package,applicationId的修改莺掠。
但是衫嵌,這種修改方式會(huì)修改你項(xiàng)目原來的目錄結(jié)構(gòu),當(dāng)你的項(xiàng)目非常龐大彻秆,文件的引用錯(cuò)綜復(fù)雜楔绞,修改包名的時(shí)候,AS需要修改每個(gè)文件的package和import唇兑,這時(shí)候Rename package可能會(huì)失敗酒朵,也有可能包名修改成功,但是文件里面的import 文件路徑無法修改扎附。這時(shí)候我們就要尋求新的方法了蔫耽,確保不修改項(xiàng)目目錄結(jié)構(gòu)。
新增新包名的module
思路就是留夜,新建一個(gè)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沖突的部分
特點(diǎn):
在不改變老工程項(xiàng)目結(jié)構(gòu)和目錄的情況下完成包名的修改,對(duì)于一般項(xiàng)目可以完成修改嚼摩,但是有幾個(gè)問題非常棘手:
1.如果老module中使用butterknife钦讳,把項(xiàng)目作為library,會(huì)編譯不通過枕面,解決辦法可以參考:http://www.reibang.com/p/c5fd14619aea
2.多個(gè)module中AndroidManifest.xml merge的時(shí)候會(huì)有沖突的地方愿卒,需要一個(gè)個(gè)解決。
新增package路徑
對(duì)于上面那種方法的缺陷膊畴,出了一個(gè)新的方案掘猿,親測(cè)可以病游。
思路:修改包名唇跨,最重要的是修改applicationId 和 package,是不是我們只要修改這兩個(gè)地方就行了呢衬衬?所以我們先試試修改這兩個(gè)地方
1.將項(xiàng)目applicationId 和 package修改成新的
3.這時(shí)候會(huì)有兩個(gè)地方報(bào)錯(cuò) Activity路徑不對(duì)买猖,找不到R文件
4.AndroidManifest.xml 使用的相對(duì)路徑,需要改成絕對(duì)路徑滋尉。
R文件找不到是因?yàn)樾薷牧藀ackage玉控,所以R文件的目錄也修改了,需要替換所有的R文件import
5.這次我們?cè)僦匦逻\(yùn)行狮惜,success高诺!
特點(diǎn):
使用簡(jiǎn)單碌识,無需修改原項(xiàng)目路徑和結(jié)構(gòu),大型項(xiàng)目也可以使用
小結(jié):在接到修改包名這個(gè)需求時(shí)虱而,并沒有著急去修改筏餐,而是去思考修改包名到底是需要修改什么,從而找到最簡(jiǎn)單的方法