我想我一定是漏掉了什么,据我所知,我在阅读了很多文章后尝试过这些方法,但似乎不能让它们工作。我现在手动触发这些构建,使用detox会使用的命令./gradlew assembleDebug assembleAndroidTest -DtestBuildType=debug
,尽管我也尝试过直接使用npx detox build --configuration android.emu.debug
。
我的错误是典型的minSdkVersion不匹配:
uses-sdk:minSdkVersion 16 cannot be smaller than version 21 declared in library [com.facebook.react:react-native:0.64.0] /home/iw651/.gradle/caches/transforms-2/files-2.1/354c8f3d479b5a1203bfff874da058bc/jetified-react-native-0.64.0/AndroidManifest.xml as the library might be using APIs not available in 16
Suggestion: use a compatible library with a minSdk of at most 16,
or increase this project's minSdk version to at least 21,
or use tools:overrideLibrary="com.facebook.react" to force usage (may lead to runtime failures)
生成分级
因此,让我有些困惑的是,首先我的项目的minSdkVersion
设置为至少21...这是我的/android/build.gradle
文件的顶部:
buildscript {
ext {
buildToolsVersion = "29.0.3"
minSdkVersion = 23
compileSdkVersion = 29
targetSdkVersion = 29
kotlinVersion = '1.3.61'
ndkVersion = "20.1.5948944"
}
在我的android/app/build.gradle
中,我有以下内容:
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
multiDexEnabled true
...
}
所以我真的相信下面的操作已经完成了,但是很明显它仍然抛出了一个错误。
或将此项目的minSdk版本至少增加到2
工具:覆盖库
我不太清楚该怎么做,我试过在我的/android/app/src/debug/AndroidManifest.xml
文件中设置它。我试过一些排列:<uses-sdk minSdkVersion="16" tools:overrideLibrary="com.facebook.react"/>
<uses-sdk minSdkVersion="21" tools:overrideLibrary="com.facebook.react"/>
<uses-sdk tools:overrideLibrary="com.facebook.react"/>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-sdk minSdkVersion="16" tools:overrideLibrary="com.facebook.react"/>
<application
android:usesCleartextTraffic="true"
tools:targetApi="28"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>
</manifest>
这些排列似乎也没有帮助。
使用minSdk最大为16的兼容库
这就给我留下了一个选择,我会对这个软件包提出一个PR,但是它仍然不能帮助我构建,直到一个新的版本被制作出来。
有人知道我错过了什么吗?或者是一些缓存妨碍了构建?
3条答案
按热度按时间3b6akqbq1#
问题是RN 0.64将其
minSdkVersion
从16增加到21。许多RN库将minSdkVersion
硬编码为16,即causing Detox Android builds to fail。我不确定为什么常规Android构建成功而Detox构建失败,但修复方法是编辑库的
android/build.gradle
并将其更改为从根项目读取minSdkVersion
:理想情况下,这个问题可以通过PR在core库中修复(别忘了做一个PR)。同时,你可以自己派生这个项目,修复bug,并通过在
package.json
中引用它来使用修复后的项目:或者,您可以在运行
npm install
时使用patch-package将修复应用于node_modules/<libname>/android/build.gradle
。这似乎是RN库中的一个常见错误,在我们的中型RN项目中,我不得不修补三个库,包括react-native-webview。
kqlmhetl2#
在您提供的代码中,配置是在ext键下设置的。minSdkVersion通常是在defaultConfig键下设置的:
也许这就是原因?
z18hc3ub3#
按如下所示修改您的
android/app/build.gradle
从清单文件中删除任何uses-sdk。