【问题标题】:react-native run-android error "Task :app:javaPreCompileDebug FAILED"react-native run-android 错误“任务:app:javaPreCompileDebug FAILED”
【发布时间】:2019-07-25 04:56:57
【问题描述】:

编辑: 这个问题是通过强制 gradle 不喷射我的原生库来解决的。这是通过添加 gradle.properties 来完成的

android.jetifier.blacklist = your-causing-issues-library

更多详情可以阅读官方文档或this post



我需要在反应原生项目中使用一些原生代码。本机代码由硬件制造商在 .jar 文件中提供。在一个干净的项目(react-native init)中,这个 .jar 文件位于 /android/app/libs 文件夹中,一旦我尝试运行“react native run-android”,就会显示此错误。

==============

错误如下:

任务:app:javaPreCompileDebug 失败 6 个可操作的任务:6 个已执行

FAILURE:构建失败并出现异常。 什么地方出了错: 任务 ':app:javaPreCompileDebug' 执行失败。 无法解析所有文件以进行配置 ':app:debugCompileClasspath'。 无法将文件“iMagPayV5.1.4.jar”转换为匹配属性 {artifactType=android-classes, org.gradle.usage=java-runtime-jars} JetifyTransform 执行失败: /home/buonapasta/Desktop/React-Native/samples/project/android/app/libs/iMagPayV5.1.4.jar。 无法使用 Jetifier 转换“/home/buonapasta/Desktop/React-Native/samples/project/android/app/libs/iMagPayV5.1.4.jar”。原因:10。(使用 --stacktrace 运行以获取更多详细信息。)

==============

提前感谢您的帮助! (如果某些信息不完整,请见谅)。

在 Ubuntu 18.04 上运行的 React Native 版本 0.60.4。 我试图在一个干净的项目中包含一些其他的 .jar 文件而不会带来不便,但是一旦我包含了这个特定的 .jar ,一切都会崩溃。 此外,这个库正在开发一个 Android Studio 项目。 .jar 可以在 https://github.com/GPaoloni/imagpay-framework

android/app/build.gradle 看起来像这样:

...

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "com.facebook.react:react-native:+"  // From node_modules

    if (enableHermes) {
      def hermesPath = "../../node_modules/hermesvm/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'
}

android/build.gradle:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext {
        buildToolsVersion = "28.0.3"
        minSdkVersion = 16
        compileSdkVersion = 28
        targetSdkVersion = 28
        supportLibVersion = "28.0.0"
    }
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath("com.android.tools.build:gradle:3.4.1")

        // 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()
    }
}

我只是希望能够包含 .jar 库(供本地活动使用)。

==============

更新:

我已经尝试过像建议的那样做:

npm install --save-dev jetifier
npx jetify

但错误还是一样。

阅读 jetifier 的 npm 页面,在“用于 jar/zip/aar 文件”部分:

npm install jetifier
npx jetifier-standalone <your arguments here>

运行它会给我以下错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
    at org.objectweb.asm.ClassReader.readFrameType(ClassReader.java:2313)
    at org.objectweb.asm.ClassReader.readFrame(ClassReader.java:2269)
    at org.objectweb.asm.ClassReader.readCode(ClassReader.java:1448)
    at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1126)
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:698)
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:500)
    at com.android.tools.build.jetifier.processor.transform.bytecode.ByteCodeTransformer.runTransform(ByteCodeTransformer.kt:39)
    at com.android.tools.build.jetifier.processor.Processor.visit(Processor.kt:443)
    at com.android.tools.build.jetifier.processor.archive.ArchiveFile.accept(ArchiveFile.kt:49)
    at com.android.tools.build.jetifier.processor.Processor.visit(Processor.kt:425)
    at com.android.tools.build.jetifier.processor.archive.Archive.accept(Archive.kt:76)
    at com.android.tools.build.jetifier.processor.Processor.transformLibrary(Processor.kt:421)
    at com.android.tools.build.jetifier.processor.Processor.transform(Processor.kt:247)
    at com.android.tools.build.jetifier.processor.Processor.transform$default(Processor.kt:234)
    at com.android.tools.build.jetifier.standalone.Main.run(Main.kt:157)
    at com.android.tools.build.jetifier.standalone.Main$Companion.main(Main.kt:109)
    at com.android.tools.build.jetifier.standalone.Main.main(Main.kt)

【问题讨论】:

    标签: java android react-native


    【解决方案1】:

    尝试逐行执行这些操作。
    1. 纱线
    2.纱线开始

    在新的终端选项卡上
    1. react-native run-android

    检查终端是否显示“jetifier”运行输出。

    类似的东西。

    “运行 jetifier 将库迁移到 AndroidX。您可以使用“--no-jetifier”标志禁用它。”

    如果在执行 'react-native run-android' 之前不运行这些
    1. npm install --save-dev jetifier
    2. npx 喷射化

    【讨论】:

    • 感谢您的回答!我已经按照您的建议尝试了,但仍然无法正常工作。我已经更新了我的问题,包括错误。
    • 您是否按照facebook.github.io/react-native/docs/getting-started 上的步骤配置了ANDROID_HOME 环境变量?
    • 是的,我做到了。实际上,我已经在处理一些项目,包括其他 .jar 文件,甚至使用 Java 原生调用。
    【解决方案2】:

    我正在使用 VS Code 并在保存时安装了更漂亮和格式。出于某种原因,当我保存页面时,他的格式错误,我遇到了这个错误,当丢弃更改时,它开始正常工作,你可以试试这个,以防万一。

    【讨论】:

      猜你喜欢
      • 2023-02-22
      • 2021-05-03
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      • 2021-09-15
      相关资源
      最近更新 更多