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




gradle build aar with dependencies (4)

Android Studio> 1.0の最近(この質問の後1年以上)、ローカル依存関係は正常に機能します:

  • 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を実行して、そのディレクトリに./gradlew uploadArchivesを公​​開します
  • ライブラリを使用するアプリケーションプロジェクトで、プロジェクト/ app / build.gradleに依存関係を追加します。 compile 'your.package:sdk-name:1.0-SNAPSHOT'

ローカル依存関係の場合、次のグラデルビルドで以前にデプロイされたアーカイブが見つかるはずです。

私の場合は、上記のものをローカルの開発者に使用しますが、各ビルドを共有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リポジトリからダウンロードするように指示するため、プロジェクト/ build.gradleの両方の「リポジトリ」ブロックにjcenter()の直上に内部Nexus Mavenリポジトリを追加しました

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

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

だから私はアンドロイド - ライブラリを作成し、これをaarファイルにまとめました。これは"projectx-sdk-1.0.0.aar"です。私の新しいプロジェクトはこの"projectx-sdk-1.0.0.aar"に依存しています。この投稿に続く: http://life.nimbco.us/referencing-local-aar-files-with-android-studios-new-gradle-based-build-system/ : http://life.nimbco.us/referencing-local-aar-files-with-android-studios-new-gradle-based-build-system/

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

com.projectx.photosdkのパッケージ名は: 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:[email protected]'
//    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

flatDirブロックを間違ったrepostoriesブロックにrepostoriesます。 buildscript中のrepositoriesブロックは、GradleにAndroid-Gradleプラグインがどこにあるかを示しますが、残りの依存関係は見つかりません。 次のような別のトップレベルrepositoriesブロックが必要repositories

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

私はこれをテストし、私のセットアップで大丈夫です。


最新のGradleバージョンでは、Stanが提案したものを少し更新した方法があります( 公開を参照)

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")
        }
    }
}

最近のバージョンのAndroid Studio(1.3でテスト済み)を使用して、ローカルの.AARファイルを使用し、maven / jcenterリポジトリからフェッチしたものではなく、 ファイル>新規>新規モジュールに進み、 .JAR / .AARパッケージのインポートを選択します。

あなたが終わることになるのは、あなたのプロジェクトの新しいモジュールです。このモジュールには、非常に単純なbuild.gradleファイルが含まれています。このファイルは多かれ少なかれ次のように見えます:

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

もちろん、他のプロジェクトでは、この新しいモジュールを通常のコンパイルプロジェクト指令で参照する必要があります 。 したがって、この新しいモジュールを使用するプロジェクトでは、単純なローカル.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')
}
[...]




aar