繁体   English   中英

React Native EXPO:将应用程序的目标 API 级别更改为至少 31

[英]React Native EXPO: change app's target API level to at least 31

我已经使用eas build了我的应用程序,以获取要上传到 Google Play 控制台的 .aab 文件。 我收到了这个错误

您的应用目前以 API 级别 30 为目标,并且必须至少以 API 级别 31 为目标,以确保它是基于针对安全性和性能优化的最新 API 构建的。 将应用的目标 API 级别至少更改为 31

当我遵循如何在 expo react native App 中将 api 级别 29 更改为 30以升级 expo 和 expo-cli 时,我遇到了一系列依赖性问题。 升级后该应用程序无法运行。

工作 expo 版本是 44.0.6,expo-cli 版本是 5.4.12。 升级到 expo 版本 46.0.0 和 expo-cli 版本 5.5.1 后,即使是eas build命令也会失败,可能是由于依赖问题。

构建错误:
Android 构建失败:
Gradle 构建因未知错误而失败。 有关详细信息,请参阅“运行 gradlew”阶段的日志。

查看“Run gradlew”日志,有很多不同的错误。 以下是一些示例:

[stderr] 注意:某些输入文件使用或覆盖已弃用的 API。
[stderr] 注意:使用 -Xlint:deprecation 重新编译以获得详细信息。
[stderr] 注意:/home/expo/workingdir/build/node_modules/@react-native-community/slider/android/src/main/java/com/reactnativecommunity/slider/ReactSliderManager.java 使用未经检查或不安全的操作。
[stderr] 注意:使用 -Xlint:unchecked 重新编译以获取详细信息。
任务:react-native-community_datetimepicker:compileReleaseJavaWithJavac
任务:react-native-async-storage_async-storage:compileReleaseJavaWithJavac
[stderr] 注意:某些输入文件使用或覆盖已弃用的 API。
[stderr] 注意:使用 -Xlint:deprecation 重新编译以获得详细信息。
[stderr] 注意:/home/expo/workingdir/build/node_modules/@react-native-async-storage/async-storage/android/src/main/java/com/reactnativecommunity/asyncstorage/AsyncStorageModule.java 使用或覆盖弃用的 API。
[stderr] 注意:使用 -Xlint:deprecation 重新编译以获得详细信息。
[stderr] 注意:/home/expo/workingdir/build/node_modules/@react-native-async-storage/async-storage/android/src/main/java/com/reactnativecommunity/asyncstorage/AsyncStoragePackage.java 使用未经检查或不安全的操作。
[stderr] 注意:使用 -Xlint:unchecked 重新编译以获取详细信息。

运行“npx expo prebuild”此命令以将 android 文件夹配置到您的文件夹中

如果您只构建了 sdk 29/30 级别,则几乎必须升级所有依赖项。 这些是我所做的更改

你的build.gradle看起来像这样

ext {
        buildToolsVersion = "29.0.3" // 30.0.2 will automaically be used
        minSdkVersion = 26
        compileSdkVersion = 31
        targetSdkVersion = 31
        ndkVersion = "20.1.5948944"
        playServicesVersion = '17.0.0' // or find latest version
        androidMapsUtilsVersion = '2.3.0'
    }

另外将其添加到您的存储库中(还有 build.gradle)

repositories {
  jcenter() 
  google()
  maven { url 'https://plugins.gradle.org/m2/' }
}

还有这个

dependencies {
    classpath 'com.android.tools.build:gradle:4.2.0'
}

之后,你必须添加

机器人:出口=“假”

您的androidManifest.xml中的每个提供者和接收者

然后升级你的 gradle 版本到至少 6.9

distributionUrl=https://services.gradle.org/distributions/gradle-6.9.2-all.zip

现在,转到您的Podfile并添加这些行

  pod 'React-callinvoker', :path => "../node_modules/react- 
        native/ReactCommon/callinvoker"
  pod 'ReactCommon/turbomodule/core', :path => "../node_modules/react- 
        native/ReactCommon"

在所有这些魔法之后,您只需将本地 Java JDK 至少升级到版本 11(不要忘记更改 enviremnet 变量以使用新的 JDK)

玩得开心

升级到 expo sdk 46 有几个问题。这是关于升级的博客https://blog.expo.dev/expo-sdk-46-c2a1655f63f7

问题 #1 - 依赖项:按照这篇文章的回答, ViewPropTypes will be removed from React Native。 迁移到从 'deprecated-react-native-prop-types 导出的 ViewPropTypes

问题 #2 - eas build 失败:如果你一直向下滚动到日志的末尾,它会告诉你哪个包有问题。 结果是,我有一些已弃用的软件包(请参阅 expo 博客中的弃用、重命名和删除部分)。 我要么临时删除它们,要么使用其他包/库,构建工作正常。

Google Play 也接受了 .aab 文件。

回复@Ben Phung 关于无法在你的 expo react native 项目中看到 android 目录,只需在你的项目目录中运行“expo eject”,你应该能够看到它

伙计们只需将 Ur Expo SDK 44.0.0 升级到 45.0.0,它将支持 API 级别 31 compileSdkVersion = 31 targetSdkVersion = 31。有关更多信息,请参阅 Expo SDK 45.0.0 官方文档。

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM