2016-08-15 14 views
0

Androidスタジオでarrパッケージを作成しようとしています。このパッケージにはZendeskの依存関係が含まれています:Gradle:リポジトリから依存ファイルを出力してaarファイルを出力する方法

allprojects { 
    repositories { 
     maven { url 'https://zendesk.artifactoryonline.com/zendesk/repo' } 
    } 
} 

compile (group: 'com.zendesk', name: 'sdk', version: '1.7.0.1') { 
    transitive = true 
} 

compile (group: 'com.zopim.android', name: 'sdk', version: '1.3.1.1') { 
    transitive = true 
} 

このパッケージをUnity3dプロジェクト用にビルドします。このパッケージには、Zendeskのすべての依存関係(transitive = trueプロパティ)が含まれている必要があります。 aarファイルを開くと、Zendeskの依存関係はありません。なにが問題ですか?

答えて

3

デフォルトでは、AARには依存関係は含まれていません。あなたがそれらを含めたい場合は、手動でそれを実行して、パッケージにartifactory /あなたのキャッシュフォルダからこれらのlibsをコピーする必要がまたはこのタスクはあなたを助けるかもしれない:https://stackoverflow.com/a/33539941/4310905

0

プロジェクトをコンパイルすると、は、それがコンパイルされています必要なライブラリに対してはのライブラリは自動的にパッケージ化されません。

「fatjar/uberjar」と呼ばれるものは、Gradle shadow pluginで実現できます。

+0

しかし、resは削除されます。 –

0

私はこの答えは少し遅れていますが、知っているあなたが書いた、まだ...

transitive paramはのpom.xmlファイルに設定する必要が推移的依存関係(あなたの依存関係の依存関係)を含むように起こっています依存関係をcompileに設定します。したがって、他の目的のために意図されていない限り、aarパッケージングのためにそれを行う必要はありません。

まず、( libsフォルダに)あなたには、いくつかのjarの内部でaarをパッケージ化できると思いますが、あなたはaaraarをパッケージ化することはできません。

あなたの問題を解決するためのアプローチがある:。

  • はあなたに興味があるの依存から解決アーティファクトを入手
  • 解決アーティファクトのものがjarファイルであることを確認します。
  • jarの場合は、それらをフォルダにコピーし、dependenciesクロージャのそのフォルダのcompileに設定します。このよう

だから、多かれ少なかれ何か:

configurations { 
    mypackage // create a new configuration, whose dependencies will be inspected 
} 

dependencies { 
    mypackage 'com.zendesk:sdk:1.7.0.1' // set your dependency referenced by the mypackage configuration 
    compile fileTree(dir: "${buildDir.path}/resolvedArtifacts", include: ['*.jar']) // this will compile the jar files within that folder, although the files are not there yet 
} 

task resolveArtifacts(type: Copy) { 
    // iterate over the resolved artifacts from your 'mypackage' configuration 
    configurations.mypackage.resolvedConfiguration.resolvedArtifacts.each { ResolvedArtifact resolvedArtifact -> 

     // check if the resolved artifact is a jar file 
     if ((resolvedArtifact.file.name.drop(resolvedArtifact.file.name.lastIndexOf('.') + 1) == 'jar')) { 
      // in case it is, copy it to the folder that is set to 'compile' in your 'dependencies' closure 
      from resolvedArtifact.file 
      into "${buildDir.path}/resolvedArtifacts" 
     } 
    } 
} 

今、あなたは./gradlew clean resolveArtifacts buildを実行することができますし、aarパッケージが内部解決jar秒を持っています。

こちらがお役に立てば幸いです。

関連する問題