升级到 react-native 版本 0.60.4 后 react-native 运行-android 出错
Error with react-native run-android after upgrade to react-native version 0.60.4
我正在将现有应用程序的 react-native 从 0.59.5 升级到 0.60.4。但遇到如下问题
* Where:
Build file '/home/bingl/Projects/blackstar/frontend/android/app/build.gradle'
* What went wrong:
Could not compile build file '/home/bingl/Projects/blackstar/frontend/android/app/build.gradle'.
> startup failed:
General error during semantic analysis: Unsupported class file major version 57
java.lang.IllegalArgumentException: Unsupported class file major version 57
at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:184)
at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:166)
at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:152)
at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:273)
at org.codehaus.groovy.ast.decompiled.AsmDecompiler.parseClass(AsmDecompiler.java:81)
at org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNodeReso
而我的 build.gradle 是
android {
compileSdkVersion 28
buildToolsVersion "28.0.3"
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
applicationId "com.frontend"
minSdkVersion 16
targetSdkVersion 28
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"
}
}
buildTypes {
release {
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:
// http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
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 =
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
}
}
}
我完全不知道这个错误是关于什么的,也找不到很多有用的文章。请帮帮我。
看起来 Gradle 目前在使用 openJDK-13 的构建上出错。
这里有一个 Github issue 话题。
在您的终端中通过 运行 以下命令检查您系统上的 Java 和 JDK 版本:
file /etc/alternatives/java /etc/alternatives/javac
或
file `which java javac`
这将列出您系统上的当前安装。如果您在任何地方看到 openjdk-13
,则必须降级到 openjdk-8
。
检查此 link 以了解降级步骤。
在此文件 android/gradle/wrapper/gradle-wrapper.properties 中更改 distributionUrl distributionUrl=https:// services.gradle.org/distributions/gradle-6.0-all.zip
致那些为 java.lang.IllegalArgumentException: Unsupported class file major version 60
而来的人
同样的原因之一是:
Java 安装了 react-native 尚不支持的版本 16。
所以对于 MacOS,
cd /Library/Java/JavaVirtualMachines
ls
检查可用的 JDK
使用此删除 jdk-16(如果存在),
sudo rm -rf jdk-16.jdk/
基本上,您可以删除 adoptopenjdk-8.jdk
以外的 JDK,如果您遵循 React-Native Env Setup。
此外,您还可以使用这个超轻量级实用程序 jEnv 来管理计算机上 Java 的多个版本。我用了很多年,效果很好。
$ jenv add /usr/lib/jvm/java-8-openjdk-amd64/
openjdk64-1.8.0.292 added
1.8.0.292 added
1.8 added
$ jenv add /usr/lib/jvm/java-16-openjdk-amd64/
openjdk64-16.0.1 added
16.0.1 added
16.0 added
16 added
然后在 android/.java-version
处放置一个文件,内容为:
1.8
我正在将现有应用程序的 react-native 从 0.59.5 升级到 0.60.4。但遇到如下问题
* Where:
Build file '/home/bingl/Projects/blackstar/frontend/android/app/build.gradle'
* What went wrong:
Could not compile build file '/home/bingl/Projects/blackstar/frontend/android/app/build.gradle'.
> startup failed:
General error during semantic analysis: Unsupported class file major version 57
java.lang.IllegalArgumentException: Unsupported class file major version 57
at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:184)
at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:166)
at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:152)
at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:273)
at org.codehaus.groovy.ast.decompiled.AsmDecompiler.parseClass(AsmDecompiler.java:81)
at org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNodeReso
而我的 build.gradle 是
android {
compileSdkVersion 28
buildToolsVersion "28.0.3"
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
applicationId "com.frontend"
minSdkVersion 16
targetSdkVersion 28
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"
}
}
buildTypes {
release {
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:
// http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
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 =
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
}
}
}
我完全不知道这个错误是关于什么的,也找不到很多有用的文章。请帮帮我。
看起来 Gradle 目前在使用 openJDK-13 的构建上出错。
这里有一个 Github issue 话题。
在您的终端中通过 运行 以下命令检查您系统上的 Java 和 JDK 版本:
file /etc/alternatives/java /etc/alternatives/javac
或
file `which java javac`
这将列出您系统上的当前安装。如果您在任何地方看到 openjdk-13
,则必须降级到 openjdk-8
。
检查此 link 以了解降级步骤。
在此文件 android/gradle/wrapper/gradle-wrapper.properties 中更改 distributionUrl distributionUrl=https:// services.gradle.org/distributions/gradle-6.0-all.zip
致那些为 java.lang.IllegalArgumentException: Unsupported class file major version 60
同样的原因之一是:
Java 安装了 react-native 尚不支持的版本 16。
所以对于 MacOS,
cd /Library/Java/JavaVirtualMachines
ls
检查可用的 JDK
使用此删除 jdk-16(如果存在),
sudo rm -rf jdk-16.jdk/
基本上,您可以删除 adoptopenjdk-8.jdk
以外的 JDK,如果您遵循 React-Native Env Setup。
此外,您还可以使用这个超轻量级实用程序 jEnv 来管理计算机上 Java 的多个版本。我用了很多年,效果很好。
$ jenv add /usr/lib/jvm/java-8-openjdk-amd64/
openjdk64-1.8.0.292 added
1.8.0.292 added
1.8 added
$ jenv add /usr/lib/jvm/java-16-openjdk-amd64/
openjdk64-16.0.1 added
16.0.1 added
16.0 added
16 added
然后在 android/.java-version
处放置一个文件,内容为:
1.8