日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

React Native系列(6) - 编译安卓私有React-Native代码

發布時間:2025/4/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 React Native系列(6) - 编译安卓私有React-Native代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

為何要自己編譯React Native安卓私有代碼

我們在開發中遇到一個HTTP2的問題,React Native安卓客戶端在和HTTP2支持的服務器通訊的過程中會有crash,見

  • React-Native HTTP2 issue
  • How to build private build
  • 由于時間緊急,發布期限已經拖了好久了,沒法等待官方解決方案,只能在本地做修復然后發布。

    編譯私有React-Native

    針對android,React-Native有官方指導說明.

    過程中遇到不少坑,記錄如下:

    boost下載失敗

    說明文檔里面指定的 gradle-download-task版本有問題, 要用最新版,老版的2.0.0會拋403下載失敗,導致編譯通不過。測試de.undercouch:gradle-download-task:3.1.2可以工作。

    classpath 'de.undercouch:gradle-download-task:3.1.2'

    NDK版本不對導致編譯失敗

    文檔里面指定NDK是android-ndk-r10e, 我用brew搜不到r10e,于是裝了一個13b, 結果編譯錯誤,只能乖乖手動下載r10e的包然后解壓,然后在.zshrc里面設置ANDROID_NDK路徑

    export ANDROID_NDK=/Users/your_home/android-ndk/android-ndk-r10e

    用android-ndk-r13b編譯拋錯如下:

    :ReactAndroid:buildReactNdkLib[armeabi-v7a] Compile++ : reactnativejni <= Dummy.cpp[armeabi-v7a] Compile++ : reactnativejnifb <= CatalystInstanceImpl.cppmake: [armeabi-v7a] Compile++ : reactnativejnifb <= CxxModuleWrapper.cpp/usr/local/Cellar/android-ndk/r13b/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-g++: No such file or directorymake: /usr/local/Cellar/android-ndk/r13b/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-g++: No such file or directory[armeabi-v7a] Compile++ : reactnativejnifb <= JExecutorToken.cppmake: /usr/local/Cellar/android-ndk/r13b/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-g++: No such file or directorymake: /usr/local/Cellar/android-ndk/r13b/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-g++: No such file or directorymake: *** [/Users/andrewy/sourcecode/github/dgandroid3/ReactNative/dgAndroid/node_modules/react-native/ReactAndroid/build/tmp/buildReactNdkLib/local/armeabi-v7a/objs/reactnativejni/Dummy.o] Error 1make: *** Waiting for unfinished jobs....make: *** [/Users/andrewy/sourcecode/github/dgandroid3/ReactNative/dgAndroid/node_modules/react-native/ReactAndroid/build/tmp/buildReactNdkLib/local/armeabi-v7a/objs/reactnativejnifb/CxxModuleWrapper.o] Error 1make: *** [/Users/andrewy/sourcecode/github/dgandroid3/ReactNative/dgAndroid/node_modules/react-native/ReactAndroid/build/tmp/buildReactNdkLib/local/armeabi-v7a/objs/reactnativejnifb/CatalystInstanceImpl.o] Error 1make: *** [/Users/andrewy/sourcecode/github/dgandroid3/ReactNative/dgAndroid/node_modules/react-native/ReactAndroid/build/tmp/buildReactNdkLib/local/armeabi-v7a/objs/reactnativejnifb/JExecutorToken.o] Error 1[armeabi-v7a] Compile++ : reactnativejnifb <= JMessageQueueThread.cppmake: /usr/local/Cellar/android-ndk/r13b/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-g++: No such file or directorymake: *** [/Users/andrewy/sourcecode/github/dgandroid3/ReactNative/dgAndroid/node_modules/react-native/ReactAndroid/build/tmp/buildReactNdkLib/local/armeabi-v7a/objs/reactnativejnifb/JMessageQueueThread.o] Error 1:ReactAndroid:buildReactNdkLib FAILEDFAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':ReactAndroid:buildReactNdkLib'.> Process 'command '/usr/local/Cellar/android-ndk/r13b/ndk-build'' finished with non-zero exit value 2

    react-native-fetch-blob編譯失敗

    實際上把后面的react-native 重復的問題解決后這個問題會自動解決,可以跳過, 還是要手動改依賴)

    ndk的問題解決以后,react-native-fetch-blob編譯又失敗了.提示okhttp3找不到。

    解決方法: 把react-native-fetch-blob/android/build.gradle下面的

    compile 'com.facebook.react:react-native:+'

    替換成

    compile project(':ReactAndroid')

    Step 2: Create a local.properties file in the android directory of your react-native app with the following contents:

    Example:

    sdk.dir=/Users/your_unix_name/android-sdk-macosx
    ndk.dir=/Users/your_unix_name/android-ndk/android-ndk-r10e
    Download links for Android NDK
    Mac OS (64-bit) - http://dl.google.com/android/repository/android-ndk-r10e-darwin-x86_64.zip
    Linux (64-bit) - http://dl.google.com/android/repository/android-ndk-r10e-linux-x86_64.zip
    Windows (64-bit) - http://dl.google.com/android/repository/android-ndk-r10e-windows-x86_64.zip
    Windows (32-bit) - http://dl.google.com/android/repository/android-ndk-r10e-windows-x86.zip
    You can find further instructions on the official page.

    https://facebook.github.io/react-native/docs/android-building-from-source.html

    ?

    react-native 重復的問題

    前面所有問題解決以后還可能會遇到下面的問題

    :app:processDebugResources FAILEDFAILURE: Build failed with an exception.* What went wrong: Execution failed for task ':app:processDebugResources'. > Error: more than one library with package name 'com.facebook.react'

    解決辦法: 在your_project_root/android/app/build.gradle里面添加如下配置(放在dependency同一層級即可)

    configurations.all {exclude group: 'com.facebook.react', module: 'react-native' }

    Boost 下載失敗的問題。

    首先,你可以嘗試更新 gradle-download-task 到 3.1.2,這可以解決gradle-download-task 2.0.0下載時拋403的問題。

    然后,如果你網絡比較差,經常下到一半超時斷線,你可以在瀏覽器里面把boost下載下來,然后,命令行里面boost開始下載以后CTRL+C中斷,然后用瀏覽器里面下載的boost覆蓋目標boost. 我這邊是

    node_modules/react-native/ReactAndroid/build/downloads/boost_1_57_0.zip

    再次運行react-native run-android

    編譯成功!

    然后你的app跑起來的時候可能會遇到下面的問題, 心累!:

    Shutting down VMFATAL EXCEPTION: mainProcess: com.dealglobe, PID: 2162java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libyoga.soat com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:314)at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:247)at com.facebook.csslayout.YogaNode.<clinit>(YogaNode.java:24)at com.facebook.react.uimanager.ReactShadowNode.<init>(ReactShadowNode.java:82)at com.facebook.react.uimanager.UIImplementation.createRootShadowNode(UIImplementation.java:84)at com.facebook.react.uimanager.UIImplementation.registerRootView(UIImplementation.java:120)at com.facebook.react.uimanager.UIManagerModule.addMeasuredRootView(UIManagerModule.java:198)at com.facebook.react.XReactInstanceManagerImpl.attachMeasuredRootViewToInstance(XReactInstanceManagerImpl.java:803)at com.facebook.react.XReactInstanceManagerImpl.setupReactContext(XReactInstanceManagerImpl.java:778)at com.facebook.react.XReactInstanceManagerImpl.access$700(XReactInstanceManagerImpl.java:110)at com.facebook.react.XReactInstanceManagerImpl$ReactContextInitAsyncTask.onPostExecute(XReactInstanceManagerImpl.java:224)at com.facebook.react.XReactInstanceManagerImpl$ReactContextInitAsyncTask.onPostExecute(XReactInstanceManagerImpl.java:193)at android.os.AsyncTask.finish(AsyncTask.java:632)at android.os.AsyncTask.access$600(AsyncTask.java:177)at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)at android.os.Handler.dispatchMessage(Handler.java:102)at android.os.Looper.loop(Looper.java:135)at android.app.ActivityThread.main(ActivityThread.java:5221)at java.lang.reflect.Method.invoke(Native Method)at java.lang.reflect.Method.invoke(Method.java:372)at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

    經證實,這個是因為react-native代碼不穩定造成的,切換到0.40-stable問題就消失了。

    http://blog.ilibrary.me/2016/12/04/%E7%BC%96%E8%AF%91%E7%A7%81%E6%9C%89react-native%E4%BB%A3%E7%A0%81

    ?

    總結

    以上是生活随笔為你收集整理的React Native系列(6) - 编译安卓私有React-Native代码的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。