だから私は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
flatDir
ブロックを間違ったrepostories
ブロックに入れました。 repositories
内のbuildscript
ブロックは、Android-Gradleプラグインの場所をGradleに指示しますが、残りの依存関係は指示しません。次のような別のトップレベルrepositories
ブロックが必要です。
repositories {
mavenCentral()
flatDir {
dirs 'aars'
}
}
これをテストしましたが、セットアップで問題なく動作します。
1.3でテストされたAndroid Studioの最新バージョンでは、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')
}
[...]
Android gradle 3.0.1のStudio 3.1.3で。
他のflatdir
なしでimplementation fileTree(dir: 'libs', include: ['*.aar'])
またはimplementation files('libs/app-release.aar')
を追加するだけで機能します。
最近の(この質問から1年以上)Android Studio> 1.0では、ローカルの依存関係は正しく機能します。
$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を公開します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サーバーから新しいアーティファクトを取得します。
最新の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")
}
}
}
ローカル依存関係はまだサポートされていないため、.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