2016-07-29 22 views
2

私はプロジェクトlibsディレクトリからロードされたcordova.jarに依存するライブラリプロジェクトを持っています。aarからjar-libraryを除外する

私はmavenネクサスにaarとしてデプロイするこのライブラリプロジェクトです。

アプリケーションプロジェクトでは、ライブラリプロジェクトaar(コンパイル...)に依存しています。しかし、アプリケーションプロジェクトはcordova.jarと同じ依存関係にあります。

のでapplicatonプロジェクトをビルドするとき、私はこのエラーを取得:

: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') 
    } 
} 

しかし、これは動作しません。私は何か間違っているのですか?

私の2番目の質問です: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.jarはまだアールにパッケージ化されています。提供されたスコープは単に機能しないのでしょうか、何か不足していますか?

+1

'compile'設定を使うのではなく、' provided'を使います。これは、ライブラリがあなたの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

関連する問題