First React Native App:任务:App:processDebugMainManifest失败



问题

我已按照https://reactnative.dev/docs/environment-setup,除了巧克力,因为我已经有了节点等。但我无法在npx react native run android之后,在模拟器上构建我的应用程序以达到输出RN样板(步骤2:in docs(。我已经找了很多个小时来寻找解决方案,但我一无所获,这变得非常令人沮丧。下面我附上了相关的产出。


提前感谢您的帮助。我才刚开始,所以如果我需要问更多的问题来完全理解这个问题,请原谅我。

cmd输出
D:CDLearnReactNativeAirBnb>npx react-native run-android
info Running jetifier to migrate libraries to AndroidX. You can disable it using "--no-jetifier" flag.
Jetifier found 903 file(s) to forward-jetify. Using 8 workers...
info Starting JS server...
info Launching emulator...
info Successfully launched emulator.
info Installing the app...
> Task :app:processDebugMainManifest FAILED
11 actionable tasks: 11 executed
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:processDebugMainManifest'.
> Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module @379b3356
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 8s
error Failed to install the app. Make sure you have the Android development environment set up: https://reactnative.dev/docs/environment-setup.
Error: Command failed: gradlew.bat app:installDebug -PreactNativeDevServerPort=8081
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:processDebugMainManifest'.
> Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module @379b3356
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 8s
at makeError (D:CDLearnReactNativeAirBnbnode_modulesexecaindex.js:174:9)
at D:CDLearnReactNativeAirBnbnode_modulesexecaindex.js:278:16
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at async runOnAllDevices (D:CDLearnReactNativeAirBnbnode_modules@react-native-communitycli-platform-androidbuildcommandsrunAndroidrunOnAllDevices.js:94:5)
at async Command.handleAction (D:CDLearnReactNativeAirBnbnode_modulesreact-nativenode_modules@react-native-communityclibuildindex.js:186:9)
info Run CLI with --verbose flag for more details.

build.gradle(项目(

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext {
buildToolsVersion = "29.0.3"
minSdkVersion = 21
compileSdkVersion = 29
targetSdkVersion = 29
ndkVersion = "20.1.5948944"
}
repositories {
google()
jcenter()
}
dependencies {
classpath("com.android.tools.build:gradle:4.1.0")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenLocal()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url("$rootDir/../node_modules/react-native/android")
}
maven {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
google()
jcenter()
maven { url 'https://www.jitpack.io' }
}
}
build.gradle(模块(
apply plugin: "com.android.application"
import com.android.build.OutputFile
/**
* The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
* and bundleReleaseJsAndAssets).
* These basically call `react-native bundle` with the correct arguments during the Android build
* cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
* bundle directly from the development server. Below you can see all the possible configurations
* and their defaults. If you decide to add a configuration block, make sure to add it before the
* `apply from: "../../node_modules/react-native/react.gradle"` line.
*
* project.ext.react = [
*   // the name of the generated asset file containing your JS bundle
*   bundleAssetName: "index.android.bundle",
*
*   // the entry file for bundle generation. If none specified and
*   // "index.android.js" exists, it will be used. Otherwise "index.js" is
*   // default. Can be overridden with ENTRY_FILE environment variable.
*   entryFile: "index.android.js",
*
*   // https://reactnative.dev/docs/performance#enable-the-ram-format
*   bundleCommand: "ram-bundle",
*
*   // whether to bundle JS and assets in debug mode
*   bundleInDebug: false,
*
*   // whether to bundle JS and assets in release mode
*   bundleInRelease: true,
*
*   // whether to bundle JS and assets in another build variant (if configured).
*   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
*   // The configuration property can be in the following formats
*   //         'bundleIn${productFlavor}${buildType}'
*   //         'bundleIn${buildType}'
*   // bundleInFreeDebug: true,
*   // bundleInPaidRelease: true,
*   // bundleInBeta: true,
*
*   // whether to disable dev mode in custom build variants (by default only disabled in release)
*   // for example: to disable dev mode in the staging build type (if configured)
*   devDisabledInStaging: true,
*   // The configuration property can be in the following formats
*   //         'devDisabledIn${productFlavor}${buildType}'
*   //         'devDisabledIn${buildType}'
*
*   // the root of your project, i.e. where "package.json" lives
*   root: "../../",
*
*   // where to put the JS bundle asset in debug mode
*   jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
*
*   // where to put the JS bundle asset in release mode
*   jsBundleDirRelease: "$buildDir/intermediates/assets/release",
*
*   // where to put drawable resources / React Native assets, e.g. the ones you use via
*   // require('./image.png')), in debug mode
*   resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
*
*   // where to put drawable resources / React Native assets, e.g. the ones you use via
*   // require('./image.png')), in release mode
*   resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
*
*   // by default the gradle tasks are skipped if none of the JS files or assets change; this means
*   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
*   // date; if you have any other folders that you want to ignore for performance reasons (gradle
*   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
*   // for example, you might want to remove it from here.
*   inputExcludes: ["android/**", "ios/**"],
*
*   // override which node gets called and with what additional arguments
*   nodeExecutableAndArgs: ["node"],
*
*   // supply additional arguments to the packager
*   extraPackagerArgs: []
* ]
*/
project.ext.react = [
enableHermes: false,  // clean and rebuild if changing
]
apply from: "../../node_modules/react-native/react.gradle"
/**
* Set this to true to create two separate APKs instead of one:
*   - An APK that only works on ARM devices
*   - An APK that only works on x86 devices
* The advantage is the size of the APK is reduced by about 4MB.
* Upload all the APKs to the Play Store and people will download
* the correct one based on the CPU architecture of their device.
*/
def enableSeparateBuildPerCPUArchitecture = false
/**
* Run Proguard to shrink the Java bytecode in release builds.
*/
def enableProguardInReleaseBuilds = false
/**
* The preferred build flavor of JavaScriptCore.
*
* For example, to use the international variant, you can use:
* `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
*
* The international variant includes ICU i18n library and necessary data
* allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
* give correct results when using with locales other than en-US.  Note that
* this variant is about 6MiB larger per architecture than default.
*/
def jscFlavor = 'org.webkit:android-jsc:+'
/**
* Whether to enable the Hermes VM.
*
* This should be set on project.ext.react and mirrored here.  If it is not set
* on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
* and the benefits of using Hermes will therefore be sharply reduced.
*/
def enableHermes = project.ext.react.get("enableHermes", false);
android {
ndkVersion rootProject.ext.ndkVersion
compileSdkVersion rootProject.ext.compileSdkVersion
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
applicationId "com.airbnb"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
}
splits {
abi {
reset()
enable enableSeparateBuildPerCPUArchitecture
universalApk false  // If true, also generate a universal APK
include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
}
}
signingConfigs {
debug {
storeFile file('debug.keystore')
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
// Caution! In production, you need to generate your own keystore file.
// see https://reactnative.dev/docs/signed-apk-android.
signingConfig signingConfigs.debug
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
}
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
variant.outputs.each { output ->
// For each separate APK per architecture, set a unique version code as described here:
// https://developer.android.com/studio/build/configure-apk-splits.html
// Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.
def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
def abi = output.getFilter(OutputFile.ABI)
if (abi != null) {  // null for the universal-debug, universal-release variants
output.versionCodeOverride =
defaultConfig.versionCode * 1000 + versionCodes.get(abi)
}
}
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
//noinspection GradleDynamicVersion
implementation "com.facebook.react:react-native:+"  // From node_modules
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
exclude group:'com.facebook.fbjni'
}
debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
exclude group:'com.facebook.flipper'
exclude group:'com.squareup.okhttp3', module:'okhttp'
}
debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") {
exclude group:'com.facebook.flipper'
}
if (enableHermes) {
def hermesPath = "../../node_modules/hermes-engine/android/";
debugImplementation files(hermesPath + "hermes-debug.aar")
releaseImplementation files(hermesPath + "hermes-release.aar")
} else {
implementation jscFlavor
}
}
// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
from configurations.compile
into 'libs'
}
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)

什么对我在JDK 17上有效,对JDK 16也应该有效:

将以下行附加到项目中的./android/gradle.properties文件:

org.gradle.jvmargs=--add-opens java.base/java.io=ALL-UNNAMED

如果某些Gradle实例已经在运行,您可能需要停止现有的Gradle实例,最简单的方法是重新启动您的操作系统。

就是这样!

到目前为止,我还没有在使用带有React Native 的JDK 17时遇到任何其他问题

我认为您已经将Java更新到了版本16。请将Java降级到版本<=15.这帮我解决了这个错误。

如前所述,今天在Mac上出现了同样的问题,降级到Java 15。

我使用brew install --cask adoptopenjdk安装了java,今天我决定升级我安装的应用程序。。。它自动更新到java16,这打破了react原生构建。

这就是我对brew所做的:

brew uninstall adoptopenjdk
brew install --cask adoptopenjdk/openjdk/adoptopenjdk15

仅供参考,这是我安装和工作的版本:

% java --version
openjdk 15.0.2 2021-01-19
OpenJDK Runtime Environment AdoptOpenJDK (build 15.0.2+7)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 15.0.2+7, mixed mode, sharing)

对于您的问题,像其他人已经告诉您的那样,正确的解决方案是将JDK降级到15或更低。

你不需要取消它,你可以简单地决定切换它。

在终端/usr/libexec/java_home -V中键入以检查您当前的java版本

如果你找不到合适的(在这种情况下<=15(,你可以从官方网站下载:https://www.oracle.com/java/technologies/javase-downloads.html

然后在你的终端(在你的项目内部也工作(,你应该键入export JAVA_HOME=`/usr/libexec/java_home -v 15.0.2`(或您的正确版本!(

检查您是否使用了正确的版本:java -version命令,如果是,您应该能够在android模拟器上运行!

要使这个JDK版本成为默认版本,您可以通过在终端中键入来更改bash文件配置文件

open ~/.bash_profile

然后添加

# SWITCH TO JAVA VERSION 15.0.2

export JAVA_HOME=`/usr/libexec/java_home -v 15.0.2

我遇到了同样的问题(JDK 16(,并用修复了它

  • npx react-native start
  • 打开android工作室并让它清理项目
  • 在android工作室中运行应用程序

这是JDK 16的问题,请将您的JDK降级到较低版本,并在vi~中为其设置JAVA_HOME路径/bash配置文件

在命令行中尝试此命令

cd android && gradlew clean

然后

cd ..
react-native run-android

在android/app/gradle.properties中添加以下行。(react native(

org.gradle.jvmargs=--add-opens java.base/java.io=ALL-UNNAMED. <<---- add this line

sudo rm-fr/Library/Internet\plugin/JavaAppletPlugin.plugin

sudo rm-fr/Library/PreferencesPanes/JavaControlPanel.refpanel

ls/Library/Java/JavaVirtualMachines/

adoptopenjdk-8.jdk jdk-17.0.1.jdk jdk-14.0.2.jdk jdk1.8.0_261.jdk

sudo rm-rf/Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk

java——版本

ls/Library/Java/JavaVirtualMachines/

npm uninstall-g react native cli

最新更新