12

我正在开发一个 React Native 应用程序,其中包含了一些 expo 库(裸工作流)。我已经成功使用了expo-location,但是现在我也安装了之后expo-camera,该应用程序将不再构建npm run android,还没有在ios上尝试过。

:expo-permissions:compileDebugKotlin它会在一步崩溃。

我确实在另一个论坛上发现了问题,他们说要更新buildToolsVersionfrom build.gradleto29.0.2但它已经在29.0.2. 然后我更新react-native-unimodules了使用 expo 库所需的内容并包含 expo 权限。它没有用。现在,我当前的库版本是:

"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.

4

4 回答 4

5

您可能不想使用其他人在线引用的版本,而是使用您在本地安装的版本,这取决于您上次更新 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,它都是点击式的,易于使用。我不将它用于其他任何事情,从来没有需要。

于 2021-02-08T03:51:58.630 回答
1

我通过将 react-native-unimodules 从版本 0.13.2 降级到 0.12.0 解决了这个问题

于 2021-05-20T05:38:18.867 回答
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
于 2021-04-06T12:07:02.657 回答
0

我通过将我的 expo 版本从 43.0.0 减少到 40.0.0 并设置'sdkVersion':“38.0.0”来工作。似乎这些版本彼此不匹配,或者与其他一些博览会依赖项不匹配。

app.json 中:

{
  "name": "MyApp",
  "displayName": "MyApp",
      "expo": {
        "name": "MyApp",
        "slug": "myapp.app",
        "sdkVersion": "38.0.0"
      }
}

...并在package.json

"dependencies" {
    "expo": "^40.0.0",
    "expo-file-system": "^9.3.0",
    "expo-linking": "~2.0.1",
    "expo-splash-screen": "~0.8.0",
    "expo-status-bar": "~1.0.3",
    "expo-updates": "^0.4.2",
}
于 2021-12-08T14:18:26.023 回答