1. 程式人生 > >修改 React-Native Android App 包名

修改 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 。

首先最容易找到的是 
package.json 當中的 name 欄位,修改它(其實後來發現修不修改都沒有什麼關係,因為並沒有什麼卵用)。 然後是 android 目錄下的 build.gradle ,這個是 gradle 執行 build 的 config 檔案,裡面大概 90 行左右,在 defaultConfig 塊中有一個 applicationId “com.AwesomeProject” , 修改它。 修改 android/src/main 目錄下的 AndroidManifest.xml ,第 2 行就是了,找到 package=“com.AwesomeProject” ,修改之。 接著就是 android/src/main/java
 目錄下的東西了。首先這個資料夾中你可以看到 ./com/AwesomeProject 目錄,我們先把這個目錄下的兩個檔案移動走,然後放到對應你想要修改的包名的目錄。例如這裡,我想修改包名為 com.kirainmoe.helloworld ,我們就在 android/src/main/java 目錄下建立這樣的層級目錄: ./com/kirainmoe/helloworld/ ,然後將兩個檔案 MainActivity.java 和 MainApplication.java 移動過去。 然後修改 MainActivity.java & MainApplication.java 第一行中的 package 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 ,問題就不再出現了。