编译React本机重复条目时出错:javax / inject / Inject.class [英] Error while compiling React-native duplicate entry: javax/inject/Inject.class

查看:1097
本文介绍了编译React本机重复条目时出错:javax / inject / Inject.class的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我从网上下载了一个名为 react-native-obd2 。在我开始之前,我只想运行已经在回购中给出的例子,但运行 react-native run-android 时遇到了一个错误。 p>

 :app:transformClassesWithJarMergingForDebug失败

失败:生成失败,出现异常。

*出错:
任务':app:transformClassesWithJarMergingForDebug'的执行失败。
> com.android.build.api.transform.TransformException:java.util.zip.ZipException:重复条目:javax / inject / Inject.class

我已经打破了我的头超过3个小时解决这个bugger,但它不会去。

我尝试了各种解决方案,对我来说最合乎逻辑的解决方案之一就是 javax / inject / Inject.class 被称为两次的地方。

所以我输入这个命令来获取gradle classpath。
./ gradlew -q dependencies app:dependencies - 配置编译

  compile  - 用于编译主要源的类路径。 
+ ---项目:react-native-obd2
| + --- com.android.support:appcompat-v7:23.0.1 - > 24.1.0
| | + --- com.android.support:animated-vector-drawable:24.1.0
| | | \ --- com.android.support:support-vector-drawable:24.1.0
| | | \ --- com.android.support:support-v4:24.1.0
| | | \ --- com.android.support:support-annotations:24.1.0
| | + --- com.android.support:support-v4:24.1.0(*)
| | \ --- com.android.support:support-vector-drawable:24.1.0(*)
| + --- com.facebook.react:react-native:+ - > 0.34.1
| | + --- javax.inject:javax.inject:1
| | + --- com.android.support:appcompat-v7:23.0.1 - > 24.1.0(*)
| | + --- com.android.support:recyclerview-v7:23.0.1 - > 24.1.0
| | | + --- com.android.support:support-v4:24.1.0(*)
| | | \ --- com.android.support:support-annotations:24.1.0
| | + --- com.facebook.fresco:fresco:0.11.0
| | | + --- com.facebook.fresco:drawee:0.11.0
| | | | + --- com.android.support:support-v4:23.2.1 - > 24.1.0(*)
| | | | \ --- com.facebook.fresco:fbcore:0.11.0
| | | + --- com.facebook.fresco:fbcore:0.11.0
| | | \ --- com.facebook.fresco:imagepipeline:0.11.0
| | | + --- com.android.support:support-v4:23.2.1 - > 24.1.0(*)
| | | + --- com.facebook.fresco:fbcore:0.11.0
| | | + --- com.parse.bolts:bolts-tasks:1.4.0
| | | + --- com.nineoldandroids:library:2.4.0
| | | \ --- com.facebook.fresco:imagepipeline-base:0.11.0
| | | + --- com.android.support:support-v4:23.2.1 - > 24.1.0(*)
| | | + --- com.facebook.fresco:fbcore:0.11.0
| | | + --- com.parse.bolts:bolts-tasks:1.4.0
| | | \ --- com.nineoldandroids:library:2.4.0
| | + --- com.facebook.fresco:imagepipeline-okhttp3:0.11.0
| | | + --- com.facebook.fresco:fbcore:0.11.0
| | | + --- com.squareup.okhttp3:okhttp:3.0.1 - > 3.4.1
| | | | \ --- com.squareup.okio:okio:1.9.0
| | | \ --- com.facebook.fresco:imagepipeline:0.11.0(*)
| | + --- com.facebook.soloader:soloader:0.1.0
| | + --- com.fasterxml.jackson.core:jackson-core:2.2.3
| | + --- com.google.code.findbugs:jsr305:3.0.0
| | + --- com.squareup.okhttp3:okhttp:3.4.1(*)
| | + --- com.squareup.okhttp3:okhttp-urlconnection:3.4.1
| | | \ --- com.squareup.okhttp3:okhttp:3.4.1(*)
| | + --- com.squareup.okhttp3:okhttp-ws:3.4.1
| | | \ --- com.squareup.okhttp3:okhttp:3.4.1(*)
| | + --- com.squareup.okio:okio:1.9.0
| | \ --- org.webkit:android-jsc:r174650
| + --- com.github.pires:obd-java-api:1.0-RC16
| \ --- org.roboguice:roboguice:3. + - > 3.0.1
+ ---项目:react-native-vector-icons
| \ --- com.facebook.react:react-native:+ - > 0.34.1(*)
+ ---项目:react-native-sp
| + --- com.android.support:appcompat-v7:23.0.1 - > 24.1.0(*)
| \ --- com.facebook.react:react-native:+ - > 0.34.1(*)
+ ---项目:react-native-sensor-manager
| \ --- com.facebook.react:react-native:0.12。+ - > 0.34.1(*)
+ ---项目:react-native-dialogs
| + --- com.facebook.react:react-native:0.20。+ - > 0.34.1(*)
| \ --- com.github.afollestad.material-dialogs:commons:0.8.6.2
| + --- com.android.support:appcompat-v7:24.1.0(*)
| \ --- com.github.afollestad.material-dialogs:core:0.8.6.2
| + --- com.android.support:appcompat-v7:24.1.0(*)
| + --- com.android.support:recyclerview-v7:24.1.0(*)
| + --- com.android.support:support-v4:24.1.0(*)
| + --- me.zhanghai.android.material进度栏:库:1.1.7
| | + --- com.android.support:appcompat-v7:24.0.0 - > 24.1.0(*)
| | \ --- com.android.support:support-annotations:24.0.0 - > 24.1.0
| \ --- com.android.support:support-annotations:24.1.0
+ --- com.android.support:appcompat-v7:23.0.1 - > 24.1.0(*)
\ --- com.facebook.react:react-native:+ - > 0.34.1(*)

但我没有看到两次写入的javax。
还提到,检查下载的项目和文件的版本,但我找不到任何重大差异。



这里是build.gradle

  apply plugin:com .android.application

import com.android.build.OutputFile
apply from:../../node_modules/react-native/react.gradle

def enableSeparateBuildPerCPUArchitecture = false
$ b $ / **
*运行Proguard在发布版本中缩小Java字节码。
* /
def enableProguardInReleaseBuilds = false

android {
compileSdkVersion 23
buildToolsVersion23.0.1

defaultConfig {
applicationIdcom.obd2example
minSdkVersion 16
targetSdkVersion 22
versionCode 1
versionName1.0
multiDexEnabled true
ndk {
abiFiltersarmeabi-v7a,x86
}
}
splits {
abi {
reset()
enable enablepaintBuildPerCPUArchitecture
universalApk false //如果为true,还生成通用APK
包含armeabi-v7a,x86
}
}
buildTypes {
release {
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile(proguard-android.txt),proguard-rules.pro
}
}
// applicationVa riants是例如调试,释放
applicationVariants.all {variant - >
variant.outputs.each {输出 - >
//对于每个架构中的每个单独的APK,请设置一个唯一的版本代码,如下所述:
// http://tools.android.com/tech-docs/new-build-system/user-指导/ apk分裂
def versionCodes = [armeabi-v7a:1,x86:2]
def abi = output.getFilter(OutputFile.ABI)
if(abi! = null){//通用调试通用版本变体为null
output.versionCodeOverride =
versionCodes.get(abi)* 1048576 + defaultConfig.versionCode
}
}
}
}

知识库{
maven {urlhttps://jitpack.io}
}

依赖项
编译项目(':react-native-obd2')
编译项目(':react-native-vector-icons')
编译项目(':react-native- sp')
编译项目(':react-native-sensor-manager')
编译项目(':react-native-dialogs')
comp ile fileTree(dir:libs,include:[* .jar])
compilecom.android.support:appcompat-v7:23.0.1
compilecom.facebook.react :react-native:+// from node_modules
}

//运行一次就可以用BUCK
运行应用程序//将所有编译依赖关系放入文件夹libs for BUCK使用
任务copyDownloadableDepsToLibs(类型:Copy){
from configurations.compile
到'libs'
}

任何人都可以引导我到哪里看?

编辑1

在我查找javax.inject模块被使用两次的地方,我在node_modules文件夹中做了一个grep -rjavax.inject,发现这个

  react-native / android / com / facebook / react / react-native / 0.34.1 / react-native-0.34.1.pom:< groupId> javax.inject< ; /&的groupId GT; 
react-native / android / com / facebook / react / react-native / 0.34.1 / react-native-0.34.1.pom:< artifactId> javax.inject< / artifactId>
react-native / ReactAndroid / src / main / third-party / java / jsr-330 / BUCK:url ='mvn:javax.inject:javax.inject:jar:1',
react- native / ReactAndroid / src / main / java / com / facebook / react / CoreModulesPackage.java:import javax.inject.Provider;
react-native / ReactAndroid / src / main / java / com / facebook / react / bridge / ModuleSpec.java:import javax.inject.Provider;
react-native / ReactAndroid / src / main / java / com / facebook / react / shell / MainReactPackage.java:import javax.inject.Provider;
react-native / ReactAndroid / build.gradle:compile'javax.inject:javax.inject:1'

这里有什么问题吗?我并不十分熟悉Java和gradle构建系统来理解它。

解决方案

在您的 build.gradle 文件中,您可以尝试更改以下行:

compilecom.facebook.react:react-native:+// From node_modules



至此:

  compile(com.facebook.react: react-native:+){
排除模块:'javax.inject'
}

该错误基本上意味着 @Inject 注释多次包含在您的最终APK中,它来自不同的地方。很难精确地确定在哪里,但这种来自反应原生的传递依赖性很可能是其中一个来源。不包括它将有希望让你在你的最终apk中只有一个副本。


I downloaded a React-native project from the web called react-native-obd2. Before I got started I just wanted to run the example that was already given in the repo but while running react-native run-android I am getting stuck at an error.

:app:transformClassesWithJarMergingForDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: javax/inject/Inject.class

I have been breaking my head for over 3 hours to solve this bugger but it wouldn't go.

I have tried various solutions one of the most logical solution to me was that javax/inject/Inject.class is being called twice somewhere.

So I typed this command to get the gradle classpath.
./gradlew -q dependencies app:dependencies --configuration compile

compile - Classpath for compiling the main sources.
+--- project :react-native-obd2
|    +--- com.android.support:appcompat-v7:23.0.1 -> 24.1.0
|    |    +--- com.android.support:animated-vector-drawable:24.1.0
|    |    |    \--- com.android.support:support-vector-drawable:24.1.0
|    |    |         \--- com.android.support:support-v4:24.1.0
|    |    |              \--- com.android.support:support-annotations:24.1.0
|    |    +--- com.android.support:support-v4:24.1.0 (*)
|    |    \--- com.android.support:support-vector-drawable:24.1.0 (*)
|    +--- com.facebook.react:react-native:+ -> 0.34.1
|    |    +--- javax.inject:javax.inject:1
|    |    +--- com.android.support:appcompat-v7:23.0.1 -> 24.1.0 (*)
|    |    +--- com.android.support:recyclerview-v7:23.0.1 -> 24.1.0
|    |    |    +--- com.android.support:support-v4:24.1.0 (*)
|    |    |    \--- com.android.support:support-annotations:24.1.0
|    |    +--- com.facebook.fresco:fresco:0.11.0
|    |    |    +--- com.facebook.fresco:drawee:0.11.0
|    |    |    |    +--- com.android.support:support-v4:23.2.1 -> 24.1.0 (*)
|    |    |    |    \--- com.facebook.fresco:fbcore:0.11.0
|    |    |    +--- com.facebook.fresco:fbcore:0.11.0
|    |    |    \--- com.facebook.fresco:imagepipeline:0.11.0
|    |    |         +--- com.android.support:support-v4:23.2.1 -> 24.1.0 (*)
|    |    |         +--- com.facebook.fresco:fbcore:0.11.0
|    |    |         +--- com.parse.bolts:bolts-tasks:1.4.0
|    |    |         +--- com.nineoldandroids:library:2.4.0
|    |    |         \--- com.facebook.fresco:imagepipeline-base:0.11.0
|    |    |              +--- com.android.support:support-v4:23.2.1 -> 24.1.0 (*)
|    |    |              +--- com.facebook.fresco:fbcore:0.11.0
|    |    |              +--- com.parse.bolts:bolts-tasks:1.4.0
|    |    |              \--- com.nineoldandroids:library:2.4.0
|    |    +--- com.facebook.fresco:imagepipeline-okhttp3:0.11.0
|    |    |    +--- com.facebook.fresco:fbcore:0.11.0
|    |    |    +--- com.squareup.okhttp3:okhttp:3.0.1 -> 3.4.1
|    |    |    |    \--- com.squareup.okio:okio:1.9.0
|    |    |    \--- com.facebook.fresco:imagepipeline:0.11.0 (*)
|    |    +--- com.facebook.soloader:soloader:0.1.0
|    |    +--- com.fasterxml.jackson.core:jackson-core:2.2.3
|    |    +--- com.google.code.findbugs:jsr305:3.0.0
|    |    +--- com.squareup.okhttp3:okhttp:3.4.1 (*)
|    |    +--- com.squareup.okhttp3:okhttp-urlconnection:3.4.1
|    |    |    \--- com.squareup.okhttp3:okhttp:3.4.1 (*)
|    |    +--- com.squareup.okhttp3:okhttp-ws:3.4.1
|    |    |    \--- com.squareup.okhttp3:okhttp:3.4.1 (*)
|    |    +--- com.squareup.okio:okio:1.9.0
|    |    \--- org.webkit:android-jsc:r174650
|    +--- com.github.pires:obd-java-api:1.0-RC16
|    \--- org.roboguice:roboguice:3.+ -> 3.0.1
+--- project :react-native-vector-icons
|    \--- com.facebook.react:react-native:+ -> 0.34.1 (*)
+--- project :react-native-sp
|    +--- com.android.support:appcompat-v7:23.0.1 -> 24.1.0 (*)
|    \--- com.facebook.react:react-native:+ -> 0.34.1 (*)
+--- project :react-native-sensor-manager
|    \--- com.facebook.react:react-native:0.12.+ -> 0.34.1 (*)
+--- project :react-native-dialogs
|    +--- com.facebook.react:react-native:0.20.+ -> 0.34.1 (*)
|    \--- com.github.afollestad.material-dialogs:commons:0.8.6.2
|         +--- com.android.support:appcompat-v7:24.1.0 (*)
|         \--- com.github.afollestad.material-dialogs:core:0.8.6.2
|              +--- com.android.support:appcompat-v7:24.1.0 (*)
|              +--- com.android.support:recyclerview-v7:24.1.0 (*)
|              +--- com.android.support:support-v4:24.1.0 (*)
|              +--- me.zhanghai.android.materialprogressbar:library:1.1.7
|              |    +--- com.android.support:appcompat-v7:24.0.0 -> 24.1.0 (*)
|              |    \--- com.android.support:support-annotations:24.0.0 -> 24.1.0
|              \--- com.android.support:support-annotations:24.1.0
+--- com.android.support:appcompat-v7:23.0.1 -> 24.1.0 (*)
\--- com.facebook.react:react-native:+ -> 0.34.1 (*)

but I don't see javax written twice. It was also mentioned that check the versions of the downloaded project and your file but I couldn't find any significant difference.

Here is the build.gradle

apply plugin: "com.android.application"

import com.android.build.OutputFile
apply from: "../../node_modules/react-native/react.gradle"

def enableSeparateBuildPerCPUArchitecture = false

/**
 * Run Proguard to shrink the Java bytecode in release builds.
 */
def enableProguardInReleaseBuilds = false

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.obd2example"
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
        ndk {
            abiFilters "armeabi-v7a", "x86"
        }
    }
    splits {
        abi {
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk false  // If true, also generate a universal APK
            include "armeabi-v7a", "x86"
        }
    }
    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]
            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
            }
        }
    }
}

repositories {
    maven { url "https://jitpack.io" }
}

dependencies {
    compile project(':react-native-obd2')
    compile project(':react-native-vector-icons')
    compile project(':react-native-sp')
    compile project(':react-native-sensor-manager')
    compile project(':react-native-dialogs')
    compile fileTree(dir: "libs", include: ["*.jar"])
    compile "com.android.support:appcompat-v7:23.0.1"
    compile "com.facebook.react:react-native:+"  // From node_modules
}

// 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'
}

Could anyone please guide me where to look?

EDIT 1
In my quest to find out where javax.inject module was used twice I did a grep -r "javax.inject" in the node_modules folder and found this

react-native/android/com/facebook/react/react-native/0.34.1/react-native-0.34.1.pom:      <groupId>javax.inject</groupId>
react-native/android/com/facebook/react/react-native/0.34.1/react-native-0.34.1.pom:      <artifactId>javax.inject</artifactId>
react-native/ReactAndroid/src/main/third-party/java/jsr-330/BUCK:    url = 'mvn:javax.inject:javax.inject:jar:1',
react-native/ReactAndroid/src/main/java/com/facebook/react/CoreModulesPackage.java:import javax.inject.Provider;
react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ModuleSpec.java:import javax.inject.Provider;
react-native/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java:import javax.inject.Provider;
react-native/ReactAndroid/build.gradle:    compile 'javax.inject:javax.inject:1'

Is there something wrong here? I am not very well versed with Java and gradle build system to comprehend it.

解决方案

In your build.gradle file, can you try changing the following line:

compile "com.facebook.react:react-native:+" // From node_modules

To this:

compile("com.facebook.react:react-native:+") {
  exclude module: 'javax.inject'
}

The error basically mean that the @Inject annotation is being included in your final APK multiple times and it's coming from different places. It's hard to pinpoint exactly where, but this transitive dependency from react-native is most likely one of the sources. Excluding it will hopefully leave you with just one "copy" of it in your final apk.

这篇关于编译React本机重复条目时出错:javax / inject / Inject.class的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆