当前位置: 首页 > 知识库问答 >
问题:

Gradle排除或添加库classes.JAR中硬包含的JAR文件的引用

傅啸
2023-03-14

我在我的项目中包含的一个库遇到了一些麻烦:在开始时,这只是一个相互冲突的依赖问题,我通过排除< code>support-v4解决了这个问题,它是一个公共共享的模块。

问题是其中一个lbsLib-version似乎是在开发人员构建之前在根项目中使用普通的. jar文件构建的。

通过运行<代码>。/gradlew app:dependencies我验证了在构建图中没有引用依赖关系。

我发现这个support-v4嵌入类中。jar位于:app/build/internedites/exploded aar/MyQaaAndroid/lbsLib-release/nuntined/classes。jar/,如下图所示:

我自己无法重建项目,因为它不是开源库,所以有两个问题:

>

  • 如果我添加编译 '网站支持:支持-v4:18.0.'build.gradle,在构建时会引发多个 dex 文件错误,因此库被引用两次。

    UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define Landroid/support/v4/app/BackStackState;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
    at com.android.dx.command.dexer.Main.run(Main.java:246)
    at com.android.dx.command.dexer.Main.main(Main.java:215)
    at com.android.dx.command.Main.main(Main.java:106)
    

    `

    如果我删除所有需要 support-v4 的库,则会在应用程序运行时引发缺少依赖项的错误。

    所以我想知道是否有可能排除这个< code >。jar文件或使其他库依赖于< code>lbsLib-release嵌入的< code>support-v4 。jar

    compile (project(':lbsLib-release')) {
        exclude module: 'support-v4'
    }
    
    compile ('com.sothree.slidinguppanel:library:2.0.4'){
        exclude module: 'support-v4'
    }
    
    compile('com.google.android.gms:play-services:6.5.87') {
        exclude module: 'support-v4'
    }
    
  • 共有2个答案

    王叶五
    2023-03-14

    在多个dex文件中定义land roid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat很容易,因为< code > exclude module:' support-v4 '

    例子

    dependencies {
        compile('com.commonsware.cwac:camera-v9:0.5.4') {
          exclude module: 'support-v4'
        }
    
        compile 'com.android.support:support-v4:18.0.+'
    }
    
    邢和光
    2023-03-14

    尝试在根< code>build.gradle处使用< code > resolution strategy (API参考)。

    // Top-level build file where you can add configuration options common to all sub-projects/modules.
    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:1.0.0'
        }
    }
    
    allprojects {
        repositories {
            jcenter()
        }
        configurations.all((Closure) {
            resolutionStrategy {
                force 'com.android.support:support-v4:21.0.2' // your version of support library
            }
        })
    
    }
    
     类似资料:
    • 我试图从。classpath文件中排除一些JAR,该文件是由gradle eclipse插件生成的。尽管我在build.gradle中做了以下工作来排除这些jar,但类路径仍然包含这些jar文件。 我已经尝试了所有的方法提到的年级文件,但没有一个对我有效。我使用的是gradle 2.7版。要创建类路径,我运行'gradle eclipse'命令。有人能帮帮我吗。

    • 我试图从gradle eclipse插件生成的.classpath文件中排除一些JAR。虽然我在build.gradle中做了以下工作来排除这些jar,但类路径仍然包含这些jar文件。 我已经尝试了所有的方法提到的梯度文件,但他们没有一个对我有效。我用的是Gradle2.7版本。为了创建类路径,我运行'gradle eclipse'命令。有人能帮我一下吗。

    • 我正在尝试编译一个APK,它在一个JAR文件中使用一个遗留库。 我已经做了其他的问题,但没有一个对我有帮助:1、2、3和4。我甚至在github上发现了一个与我的痛苦gradle/gradle/issues/1184相关的未解决问题--没有列出本地文件依赖关系...这很糟糕,因为我花了很多时间思考文件依赖项没有被包括在内。 总之,这是我项目的build.gradle文件: 这是应用程序的构建.Gr

    • 我想镜像两个文件夹,但排除某些文件类型(例如js文件)。我可以用 /XF选项来做到这一点。 我遇到的问题是,如果目标文件夹中有一个带有js文件的Foo文件夹,但源文件夹中没有Foo文件夹,那么下面的robocopy命令将删除目标端的Foo文件夹以及其中的js文件。 机器人复制。exe d:\Source d:\Destination/E/PURGE/XF*。js/COPYALL/FFT 我想要的是

    • 问题内容: 我正在做一个Maven项目。当在一个想法中编译和运行我的项目时,一切都很好,但是每当我创建jar文件时,都无法将web / lib /中的外部jar文件复制到jar文件中。为什么会发生这种情况?我可以将所有文件插入jar文件吗? 问题答案: 是的,我找到了解决方案。

    • 我想包括JavaDoc for库,但在网站上,他们只提供一个HTML。 我试过了: 下载html并将文件夹添加为jar的JavaDoc, 下载并压缩到index.html,并将下载的文件夹压缩到 添加URL 但有什么好结果。. 我怎样才能做到这一点?