gpt4 book ai didi

android - 从 aar 中排除 jar-library

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:40:43 27 4
gpt4 key购买 nike

我有一个库项目,它依赖于从项目 libs 目录加载的 cordova.jar。

我将这个库项目作为 aar 部署到 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)

为了解决这个问题,我尝试在我的应用程序项目中加载库 aar 时排除 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。提供的范围是根本不起作用还是我遗漏了什么?

最佳答案

您可以简单地将库文件从目录 yourmodule/libs 移动到目录 yourmoudle/并将依赖项中的“provided files('libs/yourlibrary.jar')”修改为“provided files('yourlibrary.jar')”。

然后清理项目并重建。

关于android - 从 aar 中排除 jar-library,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38658378/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com