2016-07-29 2 views
2

프로젝트 libs 디렉토리에서로드 된 cordova.jar에 대한 종속성이있는 라이브러리 프로젝트가 있습니다.aar에서 jar-library 제외

나는이 라이브러리 프로젝트를 메이븐 넥서스에 배포합니다.

응용 프로그램 프로젝트에서 나는 도서관 프로젝트 aar (compile ...)에 의존합니다. 그러나 응용 프로그램 프로젝트는 cordova.jar와 동일한 종속성을 갖습니다. APPLICATION 응용 프로젝트를 빌드 할 때

그래서, 나는이 오류 얻을 : 내 응용 프로그램 프로젝트의 라이브러리 AAR을로드 할 때

: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로 라이브러리 프로젝트를 업로드하는 대신 응용 프로그램에서 라이브러리를로드 할 때 cordova.jar을 제외하면

는 /libs/cordova.jar를 제외 할 수 있습니까? 나는이 Gradle을에이를 수있는 방법 : 나는 XAVER Kapeller에 의해 제안 "제공"는 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 
} 

### UPDATE ### (감사합니다!). 하지만 여전히 cordova가 있습니다. 항아리가 포장되어 있습니다. 제공된 범위가 단순히 작동하지 않거나 무언가를 놓치고 있습니까?

+1

'compile' 설정을 사용하는 대신'given'을 사용하십시오. 이것은 라이브러리가 귀하의 aar에 패키지되지 않는다는 것을 의미합니다! –

+1

완벽하게 들리지만 작동하지 않습니다. 제공된 파일 ('libs/cordova-5.1.1.jar')로 컴파일 파일 ('libs/cordova-5.1.1.jar')을 변경했으나 cordova-5.1.1.jar은 여전히 ​​aar에 패키지되었습니다. – rickul

+0

그건 불가능합니다. 전체 build.gradle을 게시하여 살펴 보시기 바랍니다. –

답변

9

라이브러리 파일을 dir yourmodule/libs에서 dir yourmoudle/ 으로 이동하고 "제공된 파일 ('libs/yourlibrary.jar')"을 "제공된 파일 ('yourlibrary.jar')"로 종속성으로 수정할 수 있습니다 .

그런 다음 프로젝트를 정리하고 다시 작성하십시오.

+0

이 매우 간단한 답변은 수많은 사람들이 실패한 곳에서 효과가있었습니다. (http://stackoverflow.com/a/41700243/4571656) 정말 고마워요. –

+0

부인, 이것은 실제 거래입니다. 감사! – turnipinrut