web-dev-qa-db-ja.com

Gradle:リポジトリから出力aarファイルへの依存関係を含める方法

Android Studioでarrパッケージをビルドしようとしています。このパッケージには、Zendeskの依存関係が含まれています。

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のすべての依存関係が含まれている必要があります(推移的= trueプロパティ)。 aarファイルを開くと、Zendeskの依存関係はありません。なにが問題ですか?

5

デフォルトでは、AARには依存関係は含まれていません。それらを含めたい場合は、手動で行うか、このタスクが役立つ可能性があるか、artifactory/your cacheフォルダーからパッケージにこれらのライブラリをコピーする必要があります: https://stackoverflow.com/a/33539941/ 4310905

8
and_dev

私はこの答えが少し遅れることを知っています、しかしそれでも...

作成したtransitiveパラメータには、推移的な依存関係(依存関係の依存関係)が含まれます。これは、compileに設定した依存関係のpom.xmlファイルで設定する必要があります。したがって、他の目的を意図していない限り、aarパッケージに対して実際にそれを行う必要はありません。

まず、aarを(jarフォルダー内の)いくつかのlibsと一緒にパッケージ化できるが、aaraar内にパッケージ化することはできないと考えてください。

問題を解決するためのアプローチは次のとおりです。

  • 関心のある依存関係から解決されたアーティファクトを取得します。
  • 解決されたアーティファクトのどれがjarファイルであるかを確認します。
  • それらがjarの場合は、それらをフォルダーにコピーし、compileクロージャー内のそのフォルダーをdependenciesに設定します。

だから多かれ少なかれこのようなもの:

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パッケージには解決されたjarsが含まれます。

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

2
Piripo