安卓開發爬坑之修改包名

前些日子需要複製一個安卓的應用,需要從一個包名改成另一個包名。

比如:從 cn.com.main.bad 改成 com.eminem.rihanna,

可以看到包名的目錄結構是變化了的。從四層包名變到三層包名。

由於是用android studio開發的,所以,按照之前的方法,直接在app目錄(不是工程目錄)下的build.gradle裏,將applicationId 後面跟着的包名改成了com.eminem.rihanna。此外,如果集成了極光推送,在androidManifest.xml文件中只將極光推送部分的所有包名都要改成com.eminem.rihanna即可。別的地方都不用改,即可實現,新老應用都可以在同一臺設備上生存。


但:(But)如果集成了第三方微信登錄,因爲在微信的官方控制檯上使用的包名是

cn.com.main.bad,所以上面的方法就不好用了。遇到的問題是:當正確使用了微信的app ID,也正確的簽了名,但點擊“授權登錄”就是不能進入首頁。直接回退到上一個activity.


所以沒辦法,最後還是通過腳本改回來了包名:

首先,將自己的代碼在git上新建一個分支,相當於拷貝一份,以防萬一。

然後在git bash裏執行:

find . \( -name "*.java" -o -name "*.xml" -o -name "build.gradle" \) -exec sed -i "s/cn.com.main.bad/com.eminem.rihanna/g" {} \;


需要幾分鐘的時間,就改好了.java文件與.xml文件,以及build.gradle中所有的包名。

這時,因爲目錄結構變化了。我們只是改了.java等文件裏面包名,也就是代碼中的包名。並沒有改目錄結構。

因此,自己手動在你的workspace下,找到此工程(注意當前git分支,要正確),然後自己手動在src/main/java下建com/eminem/rihanna包,然後將所有的源文件copy到此目錄下,然後刪除cn.com.main.bad這個目錄。


如果項目中加了混淆,還需要將app目錄(非工程目錄)下的

proguard-rules.pro文件裏的所有包名換成com.eminem.rihanna。

然後通過 gradle clean aR編譯打包,然後簽過名之後安裝到手機上,此時,打開微信授權登錄,即可正常登錄。


有時間補圖,但不保證會想起來,哈。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章