React-native植入原生Android應用

首先按照React Native的官網上所說的步驟來。
注意事項
1. 一些其他文件:
curl -o .flowconfig
https://raw.githubusercontent.com/facebook/react-native/master/.flowconfig
上面的這個語句,其作用只是新建了一個.flowconfig文件,這些文件可以直接從其他RN項目裏拷貝,如下圖:
這裏寫圖片描述
其中,index.android.js裏的註冊組件名要和Android項目中的一樣。
2.報錯記錄:
只是做了上面的這些,當然會報錯。
首先Android版本不能低於16的問題,這個簡單,在app裏的build.gradle文件裏將 minSdkVersion設置爲16或者以上就行。
其次纔是大問題,當前的react native的版本是0.26.3,Android裏的依賴V7包的版本爲:compile 'com.android.support:appcompat-v7:23.4.0'
所報錯爲:

FATAL EXCEPTION: AsyncTask #1 java.lang.RuntimeException: An error occured while executing doInBackground()

網絡上的資料顯示,可能是V7版本的原因,資料參見:求助帖1RN集成安卓原生教程github issues討論
參照第二個帖子裏的資料,修改了v7版本號到23.0.1,在gradle.properties 文件裏的末尾行添加android.useDeprecatedNdk=true,上面的錯誤消失,應用可以運行了,可喜可賀,可喜可賀。
但是出現了另一個錯誤

undefined is not a function
(evaluating 'UIManager.setChildren(containerTag,created Tags)')

這裏寫圖片描述

查閱github上資料顯示,可能是react native版本號0.26.2以上的問題(此時爲0.26.3),於是修改版本號爲react版本0.14.7,
react-native版本號爲0.25.1,如下圖:
這裏寫圖片描述
問題成功解決,項目移植成功!
PS:其他問題
• 在本人的移植中,新建項目後的依賴就是

 dependencies {
      compile fileTree(dir: 'libs', include: ['*.jar'])
      compile 'com.android.support:appcompat-v7:23.4.0'
      compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha2'
      testCompile 'junit:junit:4.12'
      androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
      androidTestCompile 'com.android.support.test:runner:0.5'
      androidTestCompile 'com.android.support:support-annotations:23.4.0'
  }

在設置com.android.support:appcompat-v7:23.4.0版本爲23.0.1,並且加入compile 'com.facebook.react:react-native:0.20.+'這句話之後的編譯中,會報錯:

Error:Conflict with dependency 'com.google.code.findbugs:jsr305'. Resolved versions for app (3.0.0) and test app (2.0.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details.
Error:Conflict with dependency 'com.android.support:support-annotations'. Resolved versions for app (23.0.1) and test app (23.4.0) differ. See http://g.co/androidstudio/app-test-app-conflict for details.

修改方法是,刪除上面依賴中的 androidTestCompile的三句話。
• 很多情況下不成功是因爲npm install不全,所以還是直接拷貝成功的node_modules文件夾。所以簡單來說,可以直接拷貝除了安卓項目代碼之外的其他文件夾,然後再做相應更改。如圖:
這裏寫圖片描述
然後,安卓依賴裏的 compile 'com.android.support:support-v4:23.0.1' 不是必須的,只有在你的項目用到了V4包時才需要上面這句話,確保其版本在23.0.1 ,而不能是其他版本,這點跟V7包是一樣的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章