我正在开发一个 React Native 应用程序,其中包含了一些 expo 库(裸露的工作流)。我已经成功使用了 expo-location
,但现在我安装了 expo-camera
后,应用程序将不再使用 npm run android
构建,尚未在 ios 上尝试。
它会在 :expo-permissions:compileDebugKotlin
步崩溃。
我确实在另一个论坛上发现了这个问题,他们说要将 buildToolsVersion
从 build.gradle
更新为 29.0.2
,但它已经在 29.0.2
上。然后我更新了 react-native-unimodules
,它是使用 expo 库所需的并且包含 expo-permissions。它没有用。现在,我当前的库版本是:
"react-native-unimodules": "^0.12.0"
"expo-permissions": "~10.0.0"
"expo-camera": "^9.1.1"
你有什么想法吗?有人也遇到过这个问题吗?
谢谢
更详细的堆栈跟踪是这样的:
Task :expo-permissions:compileDebugKotlin FAILED
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.2/userguide/command_line_interface.html#sec:command_line_warnings
153 actionable tasks: 4 executed, 149 up-to-date
e: app\node_modules\expo-permissions\android\src\main\java\expo\modules\permissions\PermissionsService.kt: (16, 40): Unresolved reference: PermissionAwareActivity
e: app\node_modules\expo-permissions\android\src\main\java\expo\modules\permissions\PermissionsService.kt: (170, 17): Unresolved reference: PermissionAwareActivity
e: app\node_modules\expo-permissions\android\src\main\java\expo\modules\permissions\PermissionsService.kt: (236, 19): Unresolved reference: PermissionAwareActivity
e: app\node_modules\expo-permissions\android\src\main\java\expo\modules\permissions\PermissionsService.kt: (237, 62): Too many arguments for public final fun requestPermissions(@NonNull p
0: Array<(out) String!>, p1: Int): Unit defined in android.app.Activity
e: app\node_modules\expo-permissions\android\src\main\java\expo\modules\permissions\PermissionsService.kt: (237, 64): Cannot infer a type for this parameter. Please specify it explicitly.
e: app\node_modules\expo-permissions\android\src\main\java\expo\modules\permissions\PermissionsService.kt: (237, 77): Cannot infer a type for this parameter. Please specify it explicitly.
e: app\node_modules\expo-permissions\android\src\main\java\expo\modules\permissions\PermissionsService.kt: (237, 97): Cannot infer a type for this parameter. Please specify it explicitly.
FAILURE: Build failed with an exception.
答案 0 :(得分:4)
您可能不想使用其他人在线引用的版本,而是使用您在本地安装的版本,这取决于您上次更新 Android SDK 的时间。
在 Windows 上,您可以查找您的 SDK 版本(工具版本):
dir %ANDROID_SDK_ROOT%\build-tools
可能 *nix 系统会有类似的 SDK 路径(未检查):
ls -al $ANDROID_SDK_ROOT\build-tools
您可能希望更新它以匹配与您定位的设备平台对应的 SDK。就我而言,我的目标是平台 29,在我的 /build-tools/ 目录中,我找到了一个“/29.0.3/”目录(等等)。所以,我编辑了我的 build.gradle
:
buildscript {
ext {
buildToolsVersion = "29.0.3"
minSdkVersion = 29
compileSdkVersion = 29
targetSdkVersion = 29
...在我编辑之后,我能够再次成功构建并部署到我的 Android 设备上。
您可能还需要更新您的 SDK。我在一个项目中遇到了这个问题,该项目已经构建了一年多,然后我更新了 expo-gl-cpp
包(和其他一些),并立即遇到了与您相同的问题/错误。我必须为 Platform 29 更新我的 SDK,然后在我再次启动并运行之前修改我的 build.gradle
设置。我使用 Android Studio 来管理我的 SDK,一切都是点击式操作,易于使用。我不将它用于其他任何用途,从来没有需要。
HTH!
答案 1 :(得分:1)
我通过将 react-native-unimodules 从 0.13.2 版本降级到 0.12.0 解决了这个问题
答案 2 :(得分:0)
我通过将 react-native-unimodules 从 0.13.2 版本降级到 0.12.0 解决了这个问题, 我认为问题是新版本的 unimodules 需要升级你的 android 构建工具,所以正确的事情不是降级 unimodules,而是像这样将构建工具从 28.0.0 升级到 29.0.3:
buildscript {
ext {
buildToolsVersion = "29.0.3"
minSdkVersion = 21
compileSdkVersion = 29
targetSdkVersion = 29