前些日子需要複製一個安卓的應用,需要從一個包名改成另一個包名。
比如:從 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編譯打包,然後簽過名之後安裝到手機上,此時,打開微信授權登錄,即可正常登錄。
有時間補圖,但不保證會想起來,哈。