新しいGradle Androidビルドシステムを使用して外部aarパッケージを手動で含める方法


406

私は新しいandroidビルドシステムを試していて、小さな問題に遭遇しました。「actionbarsherlock.aar」と呼んだActionBarSherlockの独自のaarパッケージをコンパイルしました。私がやろうとしていることは、実際にこのaarを使用して私の最終的なAPKをビルドすることです。コンパイルプロジェクト( ':actionbarsherlock')を使用して、メインプロジェクトにActionBarSherlockライブラリ全体をandroid-libraryモジュールとして含めると、問題なくビルドできます。

しかし、私の問題は、その依存関係をaarファイルパッケージとして手動で提供したいのですが、JARを作成する場合でも、プロジェクトに適切に含める方法を理解できないようです。コンパイル構成を使用しようとしましたが、これは機能していないようです。コンパイル中にシンボルを見つけることができません。aarパッケージのclasses.jarがクラスパスに含まれていないことを示しています。

aarパッケージをファイルとして手動で含めるための構文を知っている人はいますか?

build.gradle

buildscript {

 repositories {
     mavenCentral()
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:0.4'
  }
}
apply plugin: 'android'

repositories {
   mavenCentral()
}
dependencies {
    compile files('libs/actionbarsherlock.aar')
}

android {
    compileSdkVersion 15
    buildToolsVersion "17.0"
}

編集:それで答えは現在それがサポートされていないということです、あなたがそれを追跡したいならここに問題があります。

編集:現在これはまだ直接サポートされていないため、最善の代替案は@RanWakshlakから提案された解決策のようです

編集:@VipulShahによって提案された構文を使用することによっても簡単になります


Vipul Shahの応答を考えてみましょう。AndroidStudio 0.5.8の時点で、ローカルのMavenリポジトリーなしで、最終的に機能しました。
shkschneider

私の質問を見て、ここに答えてくださいstackoverflow.com/a/31662782/746347
ミクセル2015

Gradle 3.0.0以降を使用している場合は、次の簡単なGradleセットアップでうまくいきました。 stackoverflow.com/questions/29081429/...
user1506104を

回答:


670

機能させるには、以下の手順に従ってください(Android Studio 2.2までテストしました)

aarファイルをlibsフォルダーに保持しているとしましょう。(ファイル名がであると想定cards.aar

次に、アプリでbuild.gradle以下を指定し、「Gradleファイルを使用してプロジェクトを同期」をクリックします。プロジェクトレベルのbuild.gradleを開き、flatDir{dirs 'libs'}以下のように追加します

allprojects {
   repositories {
      jcenter()
      flatDir {
        dirs 'libs'
      }
   }
}

アプリレベルのbuild.grdleファイルを開いてファイルを追加し.aarます

    dependencies {
       compile(name:'cards', ext:'aar')
}

すべてがうまくいけば、ライブラリのエントリがビルドで作成されていることがわかります->展開されたaar

また、依存関係がある別のプロジェクトから.aarファイルをインポートする場合は、これらもbuild.gradleに含める必要があります。


5
@VipulShah libsディレクトリはどこにありますか?
StuStirling 2014

2
たぶん、一番上のフォルダ 'build.gradle'ではなく、アプリモジュール 'build.gradle'に変更を加えることをお勧めします。
loloof64 2015年

4
上記の私の質問への回答が見つかりました:compile依存関係の代わりに2つの依存関係を追加debugCompile(name:'cards-debug', ext:'aar')しますreleaseCompile(name:'cards-release', ext:'aar')
Iftah

2
サンプルコードと混同しないでください。最初のブロックallprojects {...}は「プロジェクト」レベルのGradleファイルに移動し、2番目のブロックはdependencies {...}「アプリ」レベルのGradleファイルに移動する必要があります。
Kirill Karmazin 2017年

8
回答を更新してください:警告:構成 'compile'は廃止され、 'implementation'および 'api'に置き換えられました。2018年末に削除されます。詳細については、d.android.com
/ r / tools / update-dependency-configurations.html

248
  1. プロジェクトを右クリックし、「モジュール設定を開く」を選択します。

モジュール設定を開く

  1. ウィンドウの左上隅にある「+」ボタンをクリックして、新しいモジュールを追加します。

新しいモジュールを追加

  1. 「.JARまたは.AARパッケージのインポート」を選択し、「次へ」ボタンをクリックします。

AARをインポート

  1. 「ファイル名」フィールドの横にある省略ボタン「...」を使用してAARファイルを検索します。

AARファイルを検索

  1. アプリのモジュールを選択したまま、[ 依存関係 ] ペインをクリックして、新しいモジュールを依存関係として追加します。

依存関係ペイン

  1. 依存関係画面の「+」ボタンを使用して、モジュール依存関係」を選択します。

モジュールの依存関係を追加する

  1. モジュールを選択し、「OK」をクリックします。

モジュールを選択


4
ベストアンサー、その後に留意してくださいAlt+B>クリーンでプロジェクトを再構築します。Android Studioを使用する理由 Android開発プラットフォームとしてNetBeans IDEを使用したい
java acm

@オリバーあなたは素晴らしいです!
ankit purwar 2017年

あなたは最高です!
codezombie 2018

2
aarプロジェクトにいくつかのlibを追加するたびに新しいモジュールを作成することは最良のアイデアではありません
Kirill Karmazin

あなたは素晴らしい友達です!! これに乾杯。
Timothy Macharia、

112

リポジトリからaarファイルを参照できます。Mavenはオプションですが、より簡単な解決策があります。aarファイルをlibsディレクトリに置き、ディレクトリリポジトリを追加します。

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

次に、依存関係セクションでライブラリを参照します。

  dependencies {
        implementation 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
}

詳細については、Min'anブログ投稿をチェックしてください。


1
これはうまく機能し、承認された/より高い評価の回答よりも優れています。シンプルであり、ファイルを各開発者のローカルMavenリポジトリに追加せずにバージョン管理に含めることができるためです(必要な場合は、最初にGradleを使用する理由) ?)ありがとう!
ajpolt 2014

@ajpoltおそらく代わりに(プロプライエタリdep用に)リポジトリサーバーをセットアップして、開発マシンやプロジェクトのlibフォルダーに置く必要がないようにすることをお勧めします。依存関係が1つしかない場合は、それをMaven構造化Googleコードリポジトリ(一時リポジトリとして)に捨てます
Lo-Tan

4
この回答で注意すべき最も重要な点は、依存関係の最後にある「@aar」に言及することです。
Atharva 2014年

:私は、これは、最新のGradleプラグインでもう動作しませんと仮定しstackoverflow.com/questions/60878599/...
デヴィッド・

これは、最も単純な形式を含む、唯一の唯一の答えであり、最新の構文(すべてを含む)を含みますimplementation。これは、ソリューションをコピーして貼り付けます。AndroidビルドGradleプラグイン4.0.0が壊れた.aarパスを無視する代わりにエラーをスローするようになったため、たくさんの新しい賛成投票が入ります
Patrick

51

以下のアプローチは、最新のAndroidスタジオ(> v0.8.x)で動作します。

  • 保存aarアプリモジュールの下のファイルlibsフォルダ(例:<project>/<app>/libs/myaar.aar

  • 「プロジェクト」ルートのbuild.gradleではなく、「app」モジュールフォルダーのbuild.gradleに以下を追加します。コンパイル行の名前に注意してください。myaar.aarではなくmyaar @ aarです。

    dependencies {
        compile 'package.name.of.your.aar:myaar@aar'
    }
    
    repositories{
        flatDir{
            dirs 'libs'
        }
    }
  • クリック Tools -> Android -> Sync Project with Gradle Files


3
AS 1.0で完璧に機能
Pablo Johnson

1
誰かがそれを必要とする場合、
gradle

1
このソリューションはAS2.2で適切に機能します。gradleは、AARファイルの構文に驚くほどうるさいです。
ジム・アンドレアス

更新または削除してください。コンパイルは非推奨であり、この問題もあります。stackoverflow.com
David

49

前(デフォルト)

implementation fileTree(include: ['*.jar'], dir: 'libs')

配列に追加'*.aar'するincludeだけです。

implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')

Android Studio 3.xで正常に動作します。

一部のライブラリを無視する場合は、このようにします。

implementation fileTree(include: ['*.jar', '*.aar'], exclude: 'test_aar*', dir: 'libs')
debugImplementation files('libs/test_aar-debug.aar')
releaseImplementation files('libs/test_aar-release.aar')

2
このコードは質問に答えることがありますが、問題を解決する方法理由に関する追加のコンテキストを提供すると、回答の長期的な価値が向上します。
Alexander

1
正常に動作しているので、ライブラリがシンプルな場合はこれでうまくいきます。しかし、それらはここでの問題です。それを機能させるには、aarファイルにインポートされたすべてのライブラリをインポートする必要があります。この方法では、aarファイルからのインポートは反映されません。
Tobliug、2018年

または、もっと簡単です:implementation fileTree(include: ['*.?ar'], dir: 'libs')
friederbluemle

@friederbluemle理論的には、単純ではなく、短く、同時に不特定であると言います。
デビッド

21

私は成功しました!

  1. mylib-0.1.aarファイルをlibs /フォルダーにコピーします。

  2. 次の行をbuild.gradleの下部に追加します(プロジェクトではなく、appである必要があります)。

    repositories {
       flatDir {
           dirs 'libs'
       }
    }
    dependencies {
        compile 'com.example.lib:mylib:0.1@aar'
    }
  3. ここまでは順調ですね。ここで最も重要なポイントが来ます:

オフラインモードが有効になっていない限り、Gradleは依存関係についてネットワークにアクセスする必要があります。

Project Structures / Gradleのチェックボックスでオフライン作業が有効になっていることを確認してください

-または-

ネットワークにアクセスするためにプロキシ設定を構成します。

プロキシ設定を構成するには、プロジェクトのgradle.propertiesファイルを変更する必要があります。以下のように、httpとhttpsを個別に構成します。

systemProp.http.proxyHost=proxy.example.com
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=user
systemProp.http.proxyPassword=pass
systemProp.http.nonProxyHosts=localhost
systemProp.http.auth.ntlm.domain=example <for NT auth>

systemProp.https.proxyHost=proxy.example.com
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=user
systemProp.https.proxyPassword=pass
systemProp.https.nonProxyHosts=localhost
systemProp.https.auth.ntlm.domain=example <for NT auth>

これがうまくいくことを願っています。


更新または削除してください。コンパイルは非推奨であり、この問題もあります。stackoverflow.com
David

20

現在ローカルの.aarファイルを参照することはサポートされていません(Xavier Ducrochetによって確認されています)。

代わりにできることは、ローカルのMavenリポジトリーをセットアップし(思ったよりもはるかに単純)、そこから.aarを参照することです。

私はそれをここで動作させる方法を詳述するブログポストを書きました:

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


アーティファクトがスナップショットの場合、どうにか機能しませんでした。なぜでしょうか。
tbruyelle 2013年

これをEclipseまたはAndroidスタジオのみで動作させましたか?eclipseでは、「gradle eclipse」はaarファイルをクラスパスに追加しますが、eclipseはその中のクラスを認識しません。
andrej_k 2013

この質問のチェックstackoverflow.com/questions/20911665/...をチュートリアル、ローカル.aarファイルを実行した後(のGradle 1.9上以上)が見つからない場合
Maragues

更新または削除してください。この回答は廃止されました。
デビッド

19

複数追加できます aar数行のコードで依存関係をます。

ローカルflatDirリポジトリを追加:

repositories {
    flatDir {
        dirs 'libs'
    }
} 

ディレクトリaar内のすべてlibscompile依存関係構成に追加します。

fileTree(dir: 'libs', include: '**/*.aar')
        .each { File file ->
    dependencies.add("compile", [name: file.name.lastIndexOf('.').with { it != -1 ? file.name[0..<it] : file.name }, ext: 'aar'])
}

これは機能しましたが、どのようにしてチェックを入れることができますか?依存関係がすでにMaven依存関係として追加されている場合、aarファイルを追加する必要はありません、PS:これを使用して、私のaarをandroidプロジェクトに自動的に追加するプラグインを作成しますbuild.gradleに依存関係を追加
Adi

@AdiすでにMaven依存関係がある場合は、対応するaarをlibsフォルダーに配置しないでください。
ミクセル2016年

回答いただきありがとうございます。前述したように、ライブラリへのaarの追加は、開発時にAndroidスタジオプラグインによって自動化されるため、プラグインがbuild.gradleファイルに追加する依存関係がすでに以前に追加されているかどうかを知りたいです。
Adi

今は答えがありません。別の質問を作成する方が良いと思います。
ミクセル2016年

15

残念ながら、ここでの解決策はどれもうまくいきませんでした(未解決の依存関係が発生します)。最終的に機能し、IMHOで最も簡単な方法は、Android Studioからプロジェクト名を強調表示し、[ファイル]-> [新しいモジュール]-> [JARまたはAARパッケージをインポート]です。クレジットはこの投稿のソリューションに行きます


1
Android Studioのインポートウィザードは非常に曖昧であることに注意してください。手順の1つで「ファイル名」と表示されている場合、実際に求めているのはファイルのパスです...このメッセージが他の人の頭痛の種から救われることを願っています。
塚城2015年

13

2つの方法があります。

最初の方法

  1. Android Studioを開き、Create New Moduleウィンドウに移動しますFile -> New -> New Module

ここに画像の説明を入力してください

  1. Import .JAR/.AAR Packageアイテムを選択してNextボタンをクリックします

  2. モジュールにbuild.gradle属するファイルに依存関係を追加しますapp

    dependencies {
        ...
        implementation project(path: ':your aar lib name')
    }

それで全部です。

第二の方法

  1. libsなどのディレクトリにフォルダを作成しますaars

  2. aar libをaarsフォルダーに配置します。

  3. コードスニペットを追加する

repositories {
    flatDir {
        dirs 'libs/aars'
    }
}

あなたのbuild.gradleファイルにアプリモジュールに属しています。

  1. モジュールにbuild.gradle属するファイルに依存関係を追加しますapp
dependencies {
    ...
    implementation (name:'your aar lib name', ext:'aar')
}

それで全部です。

あなたが中国を読むことができるならば、あなたはブログをチェックすることができます什么是AAR文件以及如何在のAndroid开发中使用を


この回答は私にとって本当に役に立ちました
Csabi

最初の方法に従うと、aarファイル内のクラスがメインプロジェクトで検出されません。追加の構成を追加する必要がありますか?
キラン、

更新または削除してください。回答がすでに投稿されており、2番目の「コンパイル」は非推奨です。
デビッド

12

Android Studio 3.4とGradle 5では、次のようにするだけです。

dependencies {
    implementation files('libs/actionbarsherlock.aar')
}

1
これが最良の答えです。依存関係は明示的で非常に単純です。
Nikmoon

1
これが最良の答えであることに同意しました。即座に動作し、React Nativeライブラリに.aar依存関係を追加するのに最適でした。
Josh Baker

1
:これはGradleのプラグイン4で始まるエラーをスローstackoverflow.com/questions/60878599/...
デヴィッド・

@Davidレポートをありがとう、できるだけ早くテストしてみます。
m0skit0

10

ANDROID STUDIO 3.4を更新

  1. [ファイル] -> [ プロジェクト構造]に移動します

ここに画像の説明を入力してください

  1. モジュールをクリックして+

ここに画像の説明を入力してください

  1. 「.aarパッケージのインポート」を選択します

ここに画像の説明を入力してください

  1. .aarルートを見つける

ここに画像の説明を入力してください

  1. 終了して適用し、パッケージが追加されているかどうかを確認します

ここに画像の説明を入力してください

  1. 今すぐアプリモジュールで、をクリック+モジュールの依存関係

ここに画像の説明を入力してください

  1. ライブラリパッケージを確認し、OK

ここに画像の説明を入力してください

  1. 追加された依存関係を確認する

ここに画像の説明を入力してください

  1. そして、このようなプロジェクト構造

ここに画像の説明を入力してください


1
これは、最終的に追加された依存関係を読んだ17番目の回答です。eeh
Taras Matsyk

6

私もこの問題を抱えています。この問題レポート:https : //code.google.com/p/android/issues/detail?id=55863は、.AARファイルを直接参照することはサポートされていないことを示唆しているようです。

おそらく今のところ代替策は、プロジェクトの親ディレクトリの下でGraddleライブラリとしてactionbarsherlockライブラリを定義し、それに応じて参照することです。

構文はここで定義されていますhttp://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Referencing-a-Library


問題をご参照いただきありがとうございます。はい、Gradle Android Libraryを使用してこれを機能させる方法は知っていますが、このオプションは、私が取り組んでいるプロジェクトには実際には最適ではありませんが、そうです!
ミゲルラヴィーン2013年

3

この回避策は、Androidの問題トラッカーで見つかりました:https : //code.google.com/p/android/issues/detail?id=55863#c21

トリック(修正ではない)は、.aarファイルをサブプロジェクトに分離し、ライブラリをアーティファクトとして追加することです。

configurations.create("default")
artifacts.add("default", file('somelib.jar'))
artifacts.add("default", file('someaar.aar'))

詳細: ローカルのArtifacts-jars-and-aarの推移的依存関係の処理


そうです、ここでの例である:中github.com/textileio/notes/commit/...compile project(':mobile')中アンドロイド/アプリ/ build.gradle、configurations.maybeCreate("default")アンドロイド/携帯/のbuild.gradleで、include ':mobile'中アンドロイド/ settings.gradle
リー鄭

3

私の場合、ライブラリにいくつかの依存関係があり、aarそこからを作成すると、失敗した依存関係のために失敗しました。そのため、私の解決策は、arrファイルからライブラリからすべての依存関係を追加することです。

だから私のプロジェクトレベルbuild.gradleはそう見えます:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'
    }
}

allprojects {
    repositories {
        mavenCentral()
        //add it to be able to add depency to aar-files from libs folder in build.gradle(yoursAppModule)
        flatDir {
            dirs 'libs'
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle(modile app) そう:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.example.sampleapp"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    //your project depencies
    ...
    //add lib via aar-depency
    compile(name: 'aarLibFileNameHere', ext: 'aar')
    //add all its internal depencies, as arr don't have it
    ...
}

とライブラリbuild.gradle

apply plugin: 'com.android.library'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    //here goes library projects dependencies, which you must include
    //in yours build.gradle(modile app) too
    ...
}

3

私はここですべての解決策を試しましたが、どれも.aarうまくいかず、間違いを犯したことに気づきました、以下のように間違ったフォルダーに入れました、ルートフォルダーに入れるべきだと思ったので、そこにlibsフォルダーを作成しました)、しかしappフォルダー内にはすでにがlibsあります。2番目に入力する必要があります。これがlibs私の問題と同じ問題を抱えている人に役立つことを願っています。

ここに画像の説明を入力してください


3

アプリケーションにAARファイルをインポートする標準的な方法は、https://developer.android.com/studio/projects/android-library.html#AddDependencyにあります。

「ファイル」>「新規」>「新規モジュール」をクリックします。「.JAR / .AARパッケージのインポート」をクリックし、「次へ」をクリックします。コンパイルされたAARまたはJARファイルの場所を入力し、[完了]をクリックします。

次の手順については、上記のリンクを参照してください。


2

答えを単純化するためだけに

.aarファイルがローカルに存在する場合は
compile project(':project_directory')、プロジェクトのbuild.gradleの依存関係に含めます。

.aarファイルがリモートにある場合はcompile 'com.*********.sdk:project_directory:0.0.1@aar'、プロジェクトのbuild.gradleの依存関係に含め ます。


0

私の場合、コンパイルする「プロジェクト」を追加するとうまくいきます:

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


dependencies {
   compile project('com.x.x:x:1.0.0')
}

0

あなたはこのようなことをすることができます:

  1. ローカルライブラリ(拡張子:.jar、.aarなど)を「libs」フォルダ(または必要に応じて別のフォルダ)に配置します。

  2. build.gradle(アプリレベル)で、この行を依存関係に追加します

    実装fileTree(include:['* .jar'、 '* .aar']、dir: 'libs')

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.