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

Android Gradle应用程序和库jar冲突

乜昆
2023-03-14

我想把一个大的应用程序从Ant迁移到Gradle。由于应用程序被(错误地)创建为多个库,第一次迁移将保留相同的模块(它将在第二步中重构),并且它可能最终会以以下结构结束:


    -- Project/
           |-- App/
                  |-- libs/
                  |-- src/...
                  |-- build.gradle
           |-- Module1/
                  |-- libs/
                         |-- lib1.jar
                         |-- lib2.jar
                  |-- src/...
                  |-- build.gradle
           |-- Module2/
                  |-- libs/
                         |-- lib2.jar
                         |-- lib3.jar
                  |-- src/...
                  |-- build.gradle
         build.gradle
         settings.gradle

应用程序build.gradle是这样的:


    ...

    apply plugin: 'com.android.application'

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:support-v4:20.0.0'
        compile 'com.android.support:appcompat-v7:20.0.0'

        compile project(':Module1')
        compile project(':Module2')
    }

    ...

然后每个模块build.gradle将如下所示:


    ...

    apply plugin: 'com.android.library'

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:support-v4:20.0.0'
        compile 'com.android.support:appcompat-v7:20.0.0'
    }

    ...

每个模块都正确编译,但问题发生在构建APK时,因为lib2.jar被复制了两次,导致一个错误:

错误:Gradle:任务“:app:PackageDebug”执行失败。

复制了APK meta-inf/asl2.0中的重复文件,然后是2个jar的路径。

当从每个模块构建APK时,我如何告诉Gradle不要多次复制相同的JAR?此时此刻,我不能将依赖项移动到Maven central repo,即使我将来会这样做。也许添加父应用程序中的所有库?在我看来不是很好...在这种情况下,如何在build.gradle模块中指定依赖项?

共有1个答案

袁鸿雪
2023-03-14

在您的gradle项目文件中,您可以将此添加到“Android”块中吗:

packagingOptions {
    exclude 'META-INF/ASL2.0'
}

META-INF/ASL2.0文件似乎是重复的。

 类似资料:
  • 使用JDeveloper 12.1.3.0.0,我创建了一个Java桌面应用程序,它使用Oracle JDBC和BC4J Oracle域库(通过项目属性->库和类路径添加它们)。在JDeveloper中,所有的东西都可以很好地编译和运行,但是我很难部署一个工作的JAR文件。这个JAR文件需要包含库,因为它将直接放置到客户端机器上。 当前失败得尝试:我已在项目属性中创建了部署配置文件.这个概要文件将

  • 我正在使用log4j2库来管理日志记录过程。我创建了一个名为log4j2的配置文件。包含appender和logger配置的xml。然后,我在每个类中定义了一个记录器 我没有在任何地方指定conf文件的名称,所以我认为库隐式地获取并读取它。 现在,我需要以jar文件的形式提供我的应用程序,所以我需要使配置文件可用,以便用户可以修改和配置它。 在我的例子中,我建议在jar文件级别创建一个XXX文件夹

  • 我有一个java应用程序,需要部署在weblogic服务器中。我目前正在为该应用程序制作ear文件。我的ear文件中有一个ejb jar。我想将log4j2 jar添加到此应用程序中。所以我的文件夹结构是 目前,我已经将JAR放在APP-INF文件夹/lib和META-INF/application中。xml我把JAR放在了模块中。这是我的申请表。xml 但它不接受log4j罐子。有什么解决方案吗

  • 请帮帮我,我用两个外部jar文件开发了一个简单的应用程序。在清理和构建的同时,它为应用程序和dist目录中的库文件夹创建了一个jar文件。当我尝试作为jar执行时,它执行得很完美

  • 我有一个servlet,它使用了通过JNI共享的librared,我在tomcat9下遇到了以前在tomcat7上没有的问题。 共享库本身位于java(LD LIBRARY)路径上,因此由tomcat OK拾取。但是,我在放置相应jar文件的位置上遇到了问题。 如果我将jar文件放在webapps/WEB-INF/lib中并重新启动tomcat,一切正常。但是,如果我使用Web管理器界面重新加载应

  • 有一个Spring应用程序“A”打包为JAR(带有maven),应用程序“A”的POM文件包含一些定义的特定maven依赖项。 在另一个打包为JAR的spring boot应用程序“B”中,添加了应用程序“A”的依赖项,但在执行“B”时,它对应用程序“A”中提到的依赖项抛出了几个ClassNotFound/NoClassDef错误。 注意-应用程序“A”不是一个引导项目。这是一个简单的用maven