react-native里面的UIExplorer

在 react-native 的源碼里面,有一個 UIExplorer 的DEMO,提供了內置控件的各種演示,可以很方便的讓我們了解到當前 react-native 的一些功能支持情況。

ReactNativeHost的兼容性

在最新的代碼里面,通過執(zhí)行?

./gradlew :Examples:UIExplorer:android:app:installDebug

肯能無法編譯通過,是因為在 49f20f4 的改動里面?getBundleAssetName, getJSBundleFile, getJSMainModuleName, getUseDeveloperSupport, getPackages 這幾個 API 已經從 ReactActivity.java 里面移除了,所以在 UIExplorerActivity.java 里面繼續(xù)留著 @Override 是存在編譯錯誤的。

針對這個問題,如果需要在最新的代碼里面編譯,運行 UIExplorer,需要對 UIExplorerActivity.java 進行一些改動,主要是在 onCreate() 里面初始化一個 ReactNativeHost 的實例,如下:

mReactNativeHost=newReactNativeHost(this.getApplication()) {
? @Override
? publicString getJSMainModuleName() {
? ? return"Examples/UIExplorer/UIExplorerApp.android";
? }

? ....

? super.onCreate(savedInstanceState);

}

@Override
publicReactNativeHost getReactNativeHost() {
? return mReactNativeHost;
}

基本的思路就是把之前在 UIExplorerActivity.java 里面的幾個 API 挪到 ReactNativeHost 的實例里面去。

另外,還需要繼續(xù)重寫 getUseDeveloperSupport 這個方法

protected boolean getUseDeveloperSupport() {
? return true;
}

以為在 ReactActivity.java 里面,有兩個地方用到了 (ReactApplication) getApplication() 這個類型轉化,實際上這里會出錯的。因為 getApplication() 的是一個 android.app.Application 類型,而 ReactApplication 這個 interface 跟它沒啥關系。如果不把 getReactNativeHost 和 getUserDeveloperSupport() 這兩個函數重寫掉,會在應用啟動的時候拋異常,直接退出的。

Path must be string, Received undefined

按照上面的流程改完之后,代碼編譯沒有任何問題,安裝之后,啟動了 packager/packager.sh 這個服務,但是 App 加載 JS 的時候報錯了,上面這個錯誤很難定位,所以直接把 node_modules 目錄的東西全部刪掉,重新執(zhí)行了一次 npm install,然后問題就解決了

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容