java - react native 运行Android错误 "Task :app:javaPreCompileDebug FAILED"

标签 java android react-native

编辑:通过强制 gradle 不jetify我的 native 库解决了这个问题。这是通过添加 gradle.properties 来完成的

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

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

<小时/> <小时/>

我需要在 React Native 项目中使用一些 native 代码。 native 代码由硬件制造商在 .jar 文件中提供。在一个干净的项目(react-native init)中,将此 .jar 文件放在/android/app/libs 文件夹中,当我尝试运行“react native run-android”时,就会显示此错误。

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

错误如下:

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

FAILURE: Build failed with an exception. What went wrong: Execution failed for task ':app:javaPreCompileDebug'. Could not resolve all files for configuration ':app:debugCompileClasspath'. Failed to transform file 'iMagPayV5.1.4.jar' to match attributes {artifactType=android-classes, org.gradle.usage=java-runtime-jars} Execution failed for JetifyTransform: /home/buonapasta/Desktop/React-Native/samples/project/android/app/libs/iMagPayV5.1.4.jar. Failed to transform '/home/buonapasta/Desktop/React-Native/samples/project/android/app/libs/iMagPayV5.1.4.jar' using Jetifier. Reason: 10. (Run with --stacktrace for more details.)

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

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

在 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 库(由 native Activity 使用)。

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

更新:

我尝试过按照建议做:

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)

最佳答案

尝试逐行执行这些。
1. yarn
2. yarn 启动

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

检查终端上是否有jetifier运行输出。

与此类似的东西。

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

如果在执行“react-native run-android”之前没有运行这些
1. npm install --save-dev jetifier
2.npxjetify

关于java - react native 运行Android错误 "Task :app:javaPreCompileDebug FAILED",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57194594/

相关文章:

java - 尝试按标签获取 View 时 Android 崩溃

android - 我们可以为 Android 和 iOS 应用程序使用 Square Checkout 流程吗?

android - Appium: "An element could not be located on the page using the given search parameters"错误

javascript - 如何使用 Material 下拉菜单获取选定的值?

java - 如何通过反射读取 Javadoc 注释?

java - 有没有更好/更短的方式来写 "if string is a single digit"?

javascript - 如何继承和重写angularjs(java pendent)中的 Controller 方法?

android - 如何在独立应用程序中确定当前调用者的电话号码

javascript - 按下 React-native 按钮会执行 3 次 Firebase 数据库更新中的 2 次

react-native - react-native 可以远程加载一个js文件吗?