修改 React-Native Android App 包名
轉載自:http://www.th7.cn/Program/Android/201609/965448.shtml
ReactNative
不知道是為什麼(大概是依賴太多?),每次執行 react-native init 建立新專案的時候,總是要等個將近 10 分鐘的樣子…… 對於初學者來說,需要在短時間內建立好多好多好多的專案,這樣每次 init 就要浪費好長的時間。用 verbose 模式一看,其實 react-native init 的過程中大部分時間是在安裝 node_modules 資料夾裡的依賴,那麼如果每次要建立新專案的時候保留 node_modules 資料夾,只是複製一份純淨的 android, ios, index.android.js 和 index.ios.js 會省很多的時間。
不過眾所周知的是即使這樣做的話,如果不做改動的話,這些新專案的 package name 都是相同的,在同一臺裝置中只能存在一個唯一包名的 App 。搜尋了一下 React Native 改包名 一類的關鍵詞,找到了一些結果,好像很有道理的樣子,照做之後興高采烈地 react-native run-android 的時候……各種編譯出錯。於是就在這個基礎上,自己踩了一些坑,最後總結出了修改包名的完整過程。
我們知道,例如我們執行 react-native init AwesomeProject 的時候,建立的 App 包名預設是 com.AwesomeProject 。
首先最容易找到的是(百度出來的回答到這裡結束,然而……)
好了,做到這裡之後就嘗試了一下 react-native run-android ,結果在構建 debug app 的時候,到 :app:compileDebugJavaWithJavac 這一步就報錯了:
/path/to/MainApplication.java:20: 錯誤: 找不到符號
return BuildConfig.DEBUG;
^
符號: 變數 BuildConfig
1 個錯誤
FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ‘:app:compileDebugJavaWithJavac’.
> Compilation failed; see the compiler error output for details.
* Try:
Run with — stacktrace option to get the stack trace. Run with — info or — debug option
to get more log output.
BUILD FAILED
Total time: 1 mins 5.339 secs
Could not install the app on the device, read the error above for details.
Make sure you have an Android emulator running or a device connected and have
set up your Android development environment:
https://facebook.github.io/react-native/docs/android-setup.html
orz,看看錯誤資訊應該是出在 MainApplication.java 上,這裡的內容是:
return BuildConfig.DEBUG;搜尋一下這個錯誤資訊,好像確實有遇到的人,但是這裡提出的解決方案是針對 Android Studio 下的……不過其中一句話啟發了我:
BuildConfig類是在編譯時自動生成的,分為debug和release兩個版本,路徑是:
修改包名後,原來使用到BuildConfig類的類,import語句會出錯,
把import語句的包名改為修改後的包名或者刪除這條import語句(讓系統自動補充import語句),除錯時提示找不到BuildConfig類
import 修改後的包名.BuildConfig;
最後一句話中提到可以通過 import packageName.BuildConfig; 引入,那麼我們也可以帶上包名來 return 以解決找不到 BuildConfig 的問題,把剛才的語句修改為:
return your.package.name.BuildConfig;例如,我可以改成:
return com.kirinmoe.helloworld.BuildConfig;好了,到此為止,再次執行 react-native run-android ,問題就不再出現了。