由于minSdkVersion,难以使Android构建工作

nqwrtyyt  于 2023-03-11  发布在  Android
关注(0)|答案(3)|浏览(136)

我想我一定是漏掉了什么,据我所知,我在阅读了很多文章后尝试过这些方法,但似乎不能让它们工作。我现在手动触发这些构建,使用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,但是它仍然不能帮助我构建,直到一个新的版本被制作出来。
有人知道我错过了什么吗?或者是一些缓存妨碍了构建?

3b6akqbq

3b6akqbq1#

问题是RN 0.64将其minSdkVersion从16增加到21。许多RN库将minSdkVersion硬编码为16,即causing Detox Android builds to fail
我不确定为什么常规Android构建成功而Detox构建失败,但修复方法是编辑库的android/build.gradle并将其更改为从根项目读取minSdkVersion

minSdkVersion rootProject.hasProperty('minSdkVersion') ? rootProject.minSdkVersion : 16

理想情况下,这个问题可以通过PR在core库中修复(别忘了做一个PR)。同时,你可以自己派生这个项目,修复bug,并通过在package.json中引用它来使用修复后的项目:

"<lib-name>": "github:<username>/<lib-name>"

或者,您可以在运行npm install时使用patch-package将修复应用于node_modules/<libname>/android/build.gradle
这似乎是RN库中的一个常见错误,在我们的中型RN项目中,我不得不修补三个库,包括react-native-webview

kqlmhetl

kqlmhetl2#

在您提供的代码中,配置是在ext键下设置的。minSdkVersion通常是在defaultConfig键下设置的:

defaultConfig {
    minSdkVersion 23
    targetSdkVersion 30
    ...
}

也许这就是原因?

z18hc3ub

z18hc3ub3#

按如下所示修改您的android/app/build.gradle

defaultConfig {
     minSdkVersion 23
     targetSdkVersion 29
     multiDexEnabled true
}

从清单文件中删除任何uses-sdk

相关问题