React Native 第三方库SDK版本不兼容

1.在RN项目中,经常会引入很多第三方插件库,如果只是单纯的JS库,一般比较好解决,但当引入一些原生插件库时,需要非常谨慎。

android工程经常因为SDK编译版本不一致导致报错。

【AAPT:error:attr/ttcIndex not found】

下图所示错误初步以为是有第三方库使用28compileSdk,与主工程中27不兼容导致,尝试使用

configurations.all {

    resolutionStrategy.force 'com.android.support:support-annotations:27.1.1'

}

对特定库进行强制依赖,通过编译,但在打包时始终会提示如下./gradle/cache中未找到两个资源。只得将主工程改为28进行尝试。

AAPT:error:attr/ttcIndex not found

在RN项目的主工程Android目录下的build.gradle进行如下配置,可使的一些比较完善的库读取主工程中的配置信息,从而保证第三方库与主工程中compileSdkVersion等信息一致。


android/build.gradle

一些第三方库的老旧版本,在内部写死了配置信息,如下图所示,则需要我们手动更改与主工程配置保持一致

module/android/build.gradle

一些比较完善的第三方库,则获取主工程android/build.gradle文件里的ext配置信息,切记检查主工程中的配置无误。


react-native-svg/android/build.gradle
react-native-image-crop-picker/android/build.gradle

2.在解决完1号配置问题后,发现如下错误【:app:transformClassesWithMultidexlistForDebug】,该错误初步判断为重复依赖

:app:transformClassesWithMultidexlistForDebug

使用gradlew app:dependencies 命令查看项目依赖结构时,发现只有react-native-pdf的依赖中引入了com.github.barteksc:android-pdf-viewer:3.1.0-beta.1,此中依赖于support-v4,故用 exclude module:'support-v4'命令排除依赖,然而并未解决问题

exclude module使用示例


gradlew app:dependencies

3.【:app:transformDexArchieWithDexMergerForbug】


:app:transformDexArchieWithDexMergerForbug

react-native-device-info/android/build.gradle

对于无法排除的第三方依赖库问题,进行全部屏蔽,逐一放开测试,最终定位于react-native-device-info库中,该版本implementation了‘com.google.android.gms:play-services-gcm',导致。在主工程的build.gradle中配置如下解决。

ext{

googlePlayServicesVersion ="15.0.1"

}

RN项目通常固定package.json中的依赖版本,故该库过于老旧导致,github上最新的版本build.gradle如下


react-native-device-info/android/build.gradle


react-native-device-info/example

你可能感兴趣的:(React Native 第三方库SDK版本不兼容)