在构建android应用时,react-native找不到gradle包装器。

1 人关注

我正在将React Native从0.61.5升级到0.64.2,我在运行Android应用时遇到了问题。

这是我在试图启动它时得到的输出。

$ react-native run-android --verbose
info Running jetifier to migrate libraries to AndroidX. You can disable it using "--no-jetifier" flag.
(node:14959) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
Jetifier found 1313 file(s) to forward-jetify. Using 12 workers...
info JS server already running.
info Installing the app...
debug Running command "cd android && ./gradlew installDebug -PreactNativeDevServerPort=8081"
error Failed to install the app. Make sure you have the Android development environment set up: https://reactnative.dev/docs/environment-setup.
Error: spawn ./gradlew ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:269:19)
    at onErrorNT (internal/child_process.js:465:16)
    at processTicksAndRejections (internal/process/task_queues.js:80:21)

我的安卓环境已经配置好了,我实际上可以运行与react-native运行的完全相同的命令,而且没有问题。

$ cd android && ./gradlew installDebug -PreactNativeDevServerPort=8081
<-------------> 0% CONFIGURING [7s]
> root project > Resolve dependencies of :classpath > maven-metadata.xml

(gradle最终以成功完成了构建)。

Permissions for gradlew seem ok:

$ ls -la ./android/gradlew
-rwxr-xr-x  1 mateusz  139652859  5766 20 Jul 13:44 ./android/gradlew

替换代码5】看起来如下。

$ cat android/gradle/wrapper/gradle-wrapper.properties 
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

React Native CLI是最新的。

$ react-native --version
react-native-cli: 2.0.1
react-native: 0.64.2

我发现有几个人有类似的问题,但没有一个人是完全相同的。

在仍然使用0.61.5main分支上工作正常。我怀疑这可能只是我没有更新一些配置文件,但是我不知道如何获得一些更详细的提示,说明我到底要改变什么。

有什么想法吗?谢谢!

5 个评论
你是否连接了安卓设备或模拟器?如果你运行 adb devices ,是否能检测到?
yep, i do. adb devices finds my emulator-5554 .
也许你可以卸载你当前的 react-native-cli 并重新安装最新的。
谢谢--我试过了,还是同样的问题。我修改了我的问题,包括版本信息
我很遗憾,最后一个问题,当你升级项目时,你是使用类似 npx react-native upgrade 0.64.2 的东西还是按照【帮助指南】( react-native-community.github.io/upgrade-helper/... ) ?
android
gradle
react-native
Mateusz Herych
Mateusz Herych
发布于 2021-07-20
1 个回答
Mateusz Herych
Mateusz Herych
发布于 2021-07-21
已采纳
0 人赞同

原来, react-native 是在错误的目录中寻找 gradlew 的。

它在 android/myApp 中寻找它,而它应该只是 android/

解决这个问题的是 react-native.config.js 中的一个配置变化。

我以前有什么。

const android = require('@react-native-community/cli-platform-android');
module.exports = {
  platforms: {
    android: {
      linkConfig: android.linkConfig,
      projectConfig: android.projectConfig,
      dependencyConfig: android.dependencyConfig,
  project: {
    android: {
      sourceDir: './android/myApp',
      stringsPath: './src/main/res/values/strings.xml',
      manifestPath: './src/main/AndroidManifest.xml',
      buildGradlePath: './build.gradle',
      settingsGradlePath: '../settings.gradle',
      assetsPath: './src/main/assets',
      mainFilePath: './src/main/java/com/company/myapp/MyApp.java',

我现在所拥有的(它可以工作)。

const android = require('@react-native-community/cli-platform-android');
module.exports = {
  platforms: {
    android: {
      linkConfig: android.linkConfig,
      projectConfig: android.projectConfig,
      dependencyConfig: android.dependencyConfig,
  project: {
    android: {
      sourceDir: './android',
      stringsPath: './myApp/src/main/res/values/strings.xml',
      manifestPath: './myApp/src/main/AndroidManifest.xml',
      buildGradlePath: './build.gradle',
      settingsGradlePath: './settings.gradle',
      assetsPath: './myApp/src/main/assets',