web-dev-qa-db-ja.com

私のgradleビルドにローカルの.aarファイルを追加する

だから私はAndroid-Libraryを作成し、このaarファイルと呼ばれる.aarファイルに正常にコンパイルしました:"projectx-sdk-1.0.0.aar"今、私の新しいプロジェクトがこのaarに依存するようにしたいので、私がしたことはこの投稿に従います: http://life.nimbco.us/referencing-local-aar-files-with-Android-studios-new-gradle-based-build-system/

しかし、目的の結果が得られないので、投稿は私を混乱させます:

Aarのパッケージ名はcom.projectx.photosdkで、内部のモジュールはsdkと呼ばれます

現在のプロジェクト構造は次のとおりです。

|-SuperAwesomeApp
|--.idea
|--gradle
|--App
|---aars
|----projectx-sdk-1.0.0.aar
|---build
|---jars
|---src
|---build.gradle

そして彼は私のgradleビルドファイルです:

apply plugin: 'Android'

buildscript {
    repositories {
        mavenCentral()
        flatDir {
            dirs 'aars'
        }
    }
}

Android {
    compileSdkVersion 19
    buildToolsVersion "19.0.1"

    defaultConfig {
        minSdkVersion 11
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.Android.support:gridlayout-v7:19.0.1'
    compile 'com.Android.support:support-v4:19.0.1'
    compile 'com.Android.support:appcompat-v7:19.0.1'


    compile 'com.projectx.photosdk:sdk:1.0.0@aar'
//    compile files( 'aars/sdk-1.0.0.aar' ) // Does not work either
}

// EDIT

私が得ているエラー:

Failed to refresh Gradle project 'SuperAwesomeApp'
     Could not find com.projectx.photosdk:sdk:1.0.0.
     Required by:
     SuperAwesomeApp:App:unspecified
66
sn0ep

flatDirブロックを間違ったrepostoriesブロックに入れました。 repositories内のbuildscriptブロックは、Android-Gradleプラグインの場所をGradleに指示しますが、残りの依存関係は指示しません。次のような別のトップレベルrepositoriesブロックが必要です。

repositories {
    mavenCentral()
    flatDir {
        dirs 'aars'
    }
}

これをテストしましたが、セットアップで問題なく動作します。

69
Scott Barta

1.3でテストされたAndroid St​​udioの最新バージョンでは、maven/jcenterリポジトリから取得したものではなくローカル.AARファイルを使用するには、File> New> New moduleに移動します。JAR/.AARパッケージのインポートを選択します。

最終的には、非常に単純なbuild.gradleファイルを含むプロジェクト内の新しいモジュールになります。

configurations.create("default")
artifacts.add("default", file('this-is-yours-package-in-aar-format.aar'))

もちろん、他のプロジェクトは、通常のcompile projectディレクティブでこの新しいモジュールを参照する必要があります。したがって、単純なこの新しいモジュールを使用するプロジェクトでは、ローカル.aarファイルにbuild.gradleが含まれています

[...]
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    ompile 'com.Android.support:appcompat-v7:23.1.0'
    compile 'com.Android.support:design:23.1.0'
    [...]

    compile project(':name-of-module-created-via-new-module-option-described-above')
}
[...]
41
pelotasplus

Android gradle 3.0.1のStudio 3.1.3で。
他のflatdirなしでimplementation fileTree(dir: 'libs', include: ['*.aar'])またはimplementation files('libs/app-release.aar')を追加するだけで機能します。

11
Yen

最近の(この質問から1年以上)Android St​​udio> 1.0では、ローカルの依存関係は正しく機能します。

  • Android SDKは、デフォルトのローカルリポジトリで依存関係を探します:$Android_HOME/extras/Android/m2repository/
  • ローカルライブラリプロジェクトでは、このディレクトリにaarを公開できます。モジュールのbuild.gradleファイルに追加できるスニペットを次に示します(例:sdk/build.gradle)

    apply plugin: 'maven'
    
    uploadArchives {
        repositories {
            mavenDeployer {
                repository(url: "file://localhost" + System.getenv("Android_HOME")
                    + "/extras/Android/m2repository/")
                pom.version = '1.0-SNAPSHOT'
                pom.groupId = 'your.package'
                pom.artifactId = 'sdk-name'
            }
        }
    }
    
  • ライブラリプロジェクトで、./gradlew uploadArchivesを実行して、そのディレクトリにaarを公開します
  • ライブラリを使用するアプリケーションプロジェクトで、project/app/build.gradleに依存関係を追加します。 compile 'your.package:sdk-name:1.0-SNAPSHOT'

ローカル依存関係の場合、次のgradleビルドは以前にデプロイされたアーカイブを見つける必要があり、それだけです!


私の場合、ローカルdevに上記を使用しますが、各ビルドを共有Nexusアーティファクトリポジトリに公開するライブラリ用のBamboo継続的統合サーバーもあります。アーティファクトを展開する完全なライブラリコードは次のようになります。

uploadArchives {
    repositories {
        mavenDeployer {
            if (System.getenv("BAMBOO_BUILDNUMBER") != null) {
                // Deploy to shared repository
                repository(url: "http://internal-nexus.url/path/") {
                    authentication(userName: "user", password: "****")
                }
                pom.version = System.getenv("BAMBOO_BUILDNUMBER")
            } else {
                // Deploy to local Android sdk m2repository
                repository(url: "file://localhost" + System.getenv("Android_HOME")
                        + "/extras/Android/m2repository/")
                pom.version = '1.0-SNAPSHOT'
            }

            pom.groupId = 'your.package'
            pom.artifactId = 'sdk-name'
        }
    }
}

アプリケーションに内部Nexusリポジトリからダウンロードするように指示するために、project/build.gradleの両方の「リポジトリ」ブロックのjcenter()のすぐ上に内部Nexus mavenリポジトリを追加しました

repositories {
    maven {
        url "http://internal-nexus.url/path/"
    }
    jcenter()
}

アプリケーションの依存関係はcompile 'your.package:sdk-name:45'のようになります。45バージョンを46に更新すると、プロジェクトはNexusサーバーから新しいアーティファクトを取得します。

5
Stan Kurdziel

最新のGradleバージョンでは、Stanが提案したことを行うためのわずかに更新された方法があります( maving publishing を参照)

apply plugin: 'maven-publish'

publishing {
    publications {
        aar(MavenPublication) {
            groupId 'org.your-group-id'
            artifactId 'your-artifact-id'
            version 'x.x.x'

            // Tell maven to prepare the generated "*.aar" file for publishing
            artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
        }
    }
    repositories {
        maven {
            url("file:" + System.getenv("HOME") + "/.m2/repository")
        }
    }
}
1
mir

ローカル依存関係はまだサポートされていないため、.aarファイルを追加しているようです(0.5.0 Betaでサポートされる予定です)

https://code.google.com/p/Android/issues/detail?id=5586

ただし、依存関係でライブラリを使用する方法は、ライブラリが中央のMavenリポジトリまたはローカルのMavenリポジトリにある場合にのみ機能します。

モジュールの依存関係で.aarを使用するためのローカルMavenリポジトリの使用方法については、これを参照してください。

http://www.flexlabs.org/2013/06/using-local-aar-Android-library-packages-in-gradle-builds

0
pyus13