我正在写一个简单的分级任务,它应该包含所有的中级课程,并将它们打包到
.jar
文件中,任务被插入到用于构建android库的渐变任务链中。
请注意,Android库没有打包在
*.aar
归档,我有几个任务,将构建jar,构建几个共享对象,并将它们放在一个目录中。
到目前为止,我写的任务如下:
task createDevJarRelease(type: Jar) {
from 'build/intermediates/classes/release'
manifest {
attributes 'Implementation-Title': 'MYJar library',
'Implementation-Version': '1.0'
}
archiveName "my-jar.jar"
doLast {
// Copy the jar in the target directory.
copy {
include "my-jar.jar"
from "build/libs/"
into "targetDir"
}
}
}
所发生的是,jar被正确地创建并放置在
targetDir
但我不能在android项目中实际使用它,因为
jar
文件中还包含来自android依赖项的其他类,这些类在包含在android应用程序中时会导致冲突。
我进去了
build/intermediates/classes/release
注意到以下目录层次结构:
build/intermediates/classes/release
|_ android
| |_ arch
| | |_ core
| | |_ ...
| | |_ lifecycle
| | |_ ...
| |_ support
| |_ ...
| | |_ ...
| |_ ...
|_ my
|_ package
|_ name
|_ foo.class
|_ bar.class
我尝试了不同的在线解决方案,以排除下面的类
android
但没有成功。
我试着明确地添加
exclude
命令在上面的梯度任务,但根本没有工作(阶级仍然存在)。
exclude 'build/intermediates/classes/release/android'
使用此命令生成应用程序时出现的错误
罐子
是:
> Task :app:transformDexArchiveWithDexMergerForDebug
Dex: Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Landroid/arch/lifecycle/R;
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/arch/lifecycle/R;
com.android.dex.DexException: Multiple dex files define Landroid/arch/lifecycle/R;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:661)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:616)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:598)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:198)
at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:61)
at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:36)
at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
FAILURE: Build failed with an exception.
项目依赖项为:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
implementation 'com.android.support:appcompat-v7:27.1.1'
testImplementation 'junit:junit:4.12'
}