react-native 在導入android原生庫容易遇到的問題

在rn開發中,若是遇到了比較特殊的功能,若是沒有現成的輪子的話,一般咱們須要去連接原生庫,而且封裝成RN組件提供給js調用,做爲前端開發者,一般咱們對原生端的報錯處理不太懂,在處理和原生功能相關問題時,推薦直接使用android-studio進行開發(項目名->android->app->build.gradle),它能夠輔助咱們方便的下載第三方庫,而且閃退等問題咱們能夠在log中查看的很清晰.javascript

下面列出了咱們在連接原生庫中經常遇到的一些問題前端

1.java

這個錯誤經常出如今第一次封裝高版本react-native的library或者引用老版本的庫的時候容易出現,緣由是 node

在安卓中 @Override是複寫父類的方法,而它的父類沒有這個方法,因此不能複寫。

由於你報錯的這個方法在老版本的RN中是存在的,估計這個三方是之前用的老版本,新版本沒有這個方法了,註釋掉就能夠了。react

這個錯誤也是很是常見的, 這個問題一般發生在你的某個地方缺乏了build.gradle文件或者build.gradle文件存在問題,如圖所示, 咱們能夠看到是咱們的react-native-citcon庫裏面有問題,這個時候咱們能夠去檢查下node_module裏面是否有這個庫,build.gradle是否存在

若是你喜歡手動link第三方庫(非react-native link),那麼這個問題你可能會遇到,緣由很簡單,引入庫的時候,須要在setting.gradle裏面指明庫的位置,直接編譯是找不到的 以下圖android

這個步驟通常引入庫都會有說明

在咱們引入原生的aar庫不注意會出現這個問題,我明明都compile寫了啊,路徑也是對的,庫中也指明瞭flatDir路徑,可是爲何仍是報找不到路徑呢?其實在引入aar的時候, 咱們須要在project的build.gradle中去指定aar的目錄,以下圖所示

這個問題的改法簡單粗暴, 進入到紅框中的地址,將.lock結尾的文件幹掉

咱們在集成citcon支付到咱們項目中,遇到了一個aar的class和原有項目的class衝突狀況,看報錯是由於alipay這個class有多個入口,就意味着咱們compile了兩個alipay的jar到咱們的項目裏,原有項目的jar和引入第三方庫的jar衝突理論上應該是個很常見的狀況,官方提供了方法

implementation(name: '×××××××aar包', ext: 'aar') {
        exclude module: 'gson'
    }
複製代碼

可是在咱們項目中嘗試多種方式過濾不掉, 這時候咱們採用第二種方案, 咱們將aar解壓,拷貝里面的java文件出來, 而且採用provided的方式引入alipay,這樣咱們在編譯的時候使用最新的alipay 編譯,可是它最終是不會打包到咱們的項目裏,咱們項目裏面仍是使用的之前的alipay,後續如果咱們想用aar中的alipay,咱們就能夠直接將provided改爲compiledwindows

compile "com.facebook.react:react-native:+"
    compile files('libs/volley.jar')
    provided files('libs/alipaySdk-20180403.jar')
    compile files('libs/wechat-sdk-android-without-mta-5.1.6.jar')
複製代碼
java.io.IOException: Could not delete path 'F:\xxxx\android\app\build\intermediates\transforms\dex\debug\folders\1000'.
複製代碼

解決:(權限問題致使)以管理員身份運行控制檯再運行react-native run-android,若是還報錯手動刪除'F:\xxxx\android\app'目錄下的build文件夾。react-native

FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':react-native-device-info:prepareComAndroidSupportAppcompatV72301Library'.
> Could not expand ZIP 'D:\SDK\extras\android\m2repository\com\android\support\appcompat-v7\23.0.1\appcompat-v7-23.0.1.aar'.
複製代碼

解決:此問題還1相似仍是權限問題 ,手動刪除「F:\xxxxx\node_modules\react-native-device-info\android」目錄下的build文件夾。(注意:以上是以react-native-device-info組件爲例,若是是其它組件報相似問題 目錄爲: \node_modules\組件名\android )android-studio

在windows上常常會遇到刪除文件夾須要管理員權限,可是給了管理員權限仍是刪不掉,這時候咱們能夠利用下壓縮工具,壓縮對應的文件,而且在壓縮時選擇壓縮後刪除源文件則就能夠刪除 or 重啓電腦再刪除bash

The SDK Build Tools revision (23.0.1) is too low for project ‘:react-native-vector-icons’. Minimum
複製代碼

這個錯誤在引入第三方庫也會常常遇到,改法也很簡單, 進入對應庫的build.gradle 文件夾 修改buildToolsVersion 爲對應版本

注意

在rn中,若是咱們只改動了js代碼,只須要reload,可是隻要咱們改動了原生代碼,包括Manifest以及一些資源文件,咱們都須要從新編譯打包才能生效,若是是添加庫等操做,建議先clear build, 而後再build

終極方法

最後若是你發現你代碼確實沒問題,路徑等都沒錯,能夠嘗試刪除掉android目錄和app目錄下面的build文件夾(打包自動生成文件), 最後

,再打開項目

實在仍是不行能夠嘗試重啓,多是有端口被佔用的緣由

相關文章
相關標籤/搜索