簡體   English   中英

從aar中排除jar庫

[英]Exclude jar-library from aar

我有一個庫項目,它依賴於cordova.jar,它從項目libs目錄加載。

我將這個庫項目部署為maven nexus。

在應用程序項目中,我依賴於庫項目aar(編譯...)。 但是應用程序項目與cordova.jar具有相同的依賴性。

因此,在構建應用程序項目時,我收到此錯誤:

:transformClassesWithDexForDebug
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Lorg/apache/cordova/AuthenticationToken;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:579)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:535)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:517)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:164)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:504)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)
    at com.android.dx.command.dexer.Main.run(Main.java:277)
    at com.android.dx.command.dexer.Main.main(Main.java:245)
    at com.android.dx.command.Main.main(Main.java:106)

為了解決這個問題,我試圖在我的應用程序項目中加載庫時排除cordova.jar:

dependencies {
    compile ('com.my.library:hybridstory:1.0'){
        exclude (group: 'org.apache.cordova')
    }
}

但這不起作用。 難道我做錯了什么?

我的第二個問題是:

將庫項目作為aar上傳時,是否可以排除/libs/cordova.jar,而不是在應用程序中加載庫時排除cordova.jar? 我怎么能用這個gradle實現這個目標:

apply plugin: 'com.android.library'
apply plugin: 'maven'

archivesBaseName = 'hybridstory'
group = 'com....'
version = '16.3.0-SNAPSHOT'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 1
        versionName version
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    provided files('libs/cordova-5.1.1.jar')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com....'
}

task createJavadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    title = archivesBaseName + " " + version
    options.overview = "src/main/doc-files/overview.html"
    doLast {
        copy {
            from "src/main/doc-files"
            into "$buildDir/docs/javadoc"
        }
    }
}

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: 'https://maven..../content/repositories/om-releases/')
            snapshotRepository(url: 'https://maven..../content/repositories/om-snapshots/')
        }
    }
}

task androidJavadocsJar(type: Jar, dependsOn: createJavadoc) {
    classifier = 'javadoc'
    from createJavadoc.destinationDir
}

task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.srcDirs
}

artifacts {
    archives androidSourcesJar
    archives androidJavadocsJar
}

###更新###

我按照Xaver Kapeller的建議嘗試了“提供”的gradle范圍(謝謝!)。 但仍然有cordova.jar打包到aar。 提供的范圍是不起作用還是我遺漏了什么?

您只需將庫文件從dir yourmodule / libs移動到dir yourmoudle /並將“提供的文件('libs / yourlibrary.jar')”修改為“提供的文件('yourlibrary.jar')”依賴。

然后清理項目並重建。

嘗試使用compileOnly關鍵字來標記資源僅用於編譯。

檢查答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM