「flatDirs」を使用してGradleビルドにローカル.aarファイルを追加しても機能しない


159

私はこの質問を認識しています。gradleビルドにローカルの.aarファイルを追加していますが、ソリューションが機能しません。

私はbuild.gradleファイルのトップレベルにこのステートメントを追加してみました:

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

また、slidingmenu.aarファイルをセクションに入れて/libs参照しましたが、まったく機能しませんでした。dependenciescompile 'com.slidingmenu.lib:slidingmenu:1.0.0@aar'

私も試しcompile files('libs/slidingmenu.aar')たが運が悪かった。

何が欠けていますか?何か案は?

PS Android Studio 0.8.2


1
flatDirs + compile(name: 'libname'、ext: 'aar')は、Android Studio 8.2.0、gradle 1.12で動作します。したがって、ビルドファイルに問題があるはずです。それをもう一度確認してください以上のコード投稿
より

回答:


293

ジョサイアの答えに基づいて、これが私がそれを機能させた方法です。

彼の指示に従って(編集中)(ファイル->新規->新しいモジュール-> .JAR / .AARのインポートをインポート)をインポートします。

次に、プロジェクトbuild.gradle(トップレベルではなく、「app」の下にあるもの)に、次の行を追加します(依存関係セクションにあります)。

dependencies {
    compile project(':Name-Of-Your-Project')
}

注Name-Of-Your-Projectは、AARファイルをインポートした後に追加されたフォルダーの名前と一致する必要があります(app/.idea最上位のフォルダーの下と同じレベル)。または別の言い方をすると...

私のアプリケーション
  。考え
  アプリ
  build.gradle(コンパイルプロジェクト( ':ProjectName')を依存関係セクションに追加する場所)
  ProjectName(インポート後に自動的に追加され、aarファイルの名前と一致します)
  建てる
  グラドル
  等

これは、Android Studio 0.8.0を実行している私にとってはうまくいきました。この後、gradleを同期することを忘れないでください(ツールバーボタンを使用するか、[ ファイル]> [同期 ]を使用)。

(正しい方向に進んでくれたJosiahに感謝)

(注:これより前に、それをlibsフォルダーに追加して、トップレベルbuild.gradleとアプリレベルを操作しようとしbuild.gradleましたが、私のaarsファイルでは機能しませんでした。jarは正常に機能しますが、aarファイルは機能しません)


1
うわぁ!これはトリックでした、詳細な説明をありがとうございます。フードインポートマスターは、ツールサイトで説明されているのと同じことを実行します。この新しいサブプロジェクトに依存する他のGradleサブプロジェクトを単に持つことができます。この新しいサブプロジェクトでは、次の内容でbuild.gradleを作成するだけです。 ( 'somelib.aar')) "
アレクセイドミトリエフ14

エラーが発生します:.. Error:(25, 0) Required keys [path] are missing from map {name=mylibrary-debug}.を使用した場合、compile project(name:'mylibrary-debug')何が欠けていますか?
MysticMagicϡ

2
最近のgradleプラグインはこれを壊しました。ここでのソリューション:stackoverflow.com/a/28816265/560600
Sky Kelsey

1
上記のすべての手順の後に、クリーンビルドも実行してください。
広告

1
の行で、.aarファイルの名前(拡張子なし)compile project(':Name-Of-Your-Project')に置き換えName-Of-Your-Projectました.aar。そしてそれはうまくいった。
スーフィアン2017

190

更新:@ amram99で述べたように、この問題はAndroid Studio v1.3のリリース時点で修正されています。

以下の仕様でテストおよび検証済み

  • Android Studio v1.3
  • Gradleプラグインv1.2.3
  • Gradle v2.4

現在機能しているもの

  • これで、Android Studio v1.3 の[ファイル]> [新規]> [新しいモジュール]> [.JAR / .AARパッケージのインポート ]オプションを使用して、ローカルaarファイルをインポートできます

  • ただし、これはGradleスクリプトに基づいているため、Android Studioの変更に関係なく、以下の答えは真実かつ効果的です。


以前の回答:最近のアップデートで、Androidの人々は、Android Studioの[新しいモジュールを追加]メニューオプションを介してローカルaarファイルを含めることを破っていました。ここにリストされている問題を確認してください。IDEの機能リストに出入りするものに関係なく、ローカルaarファイルの操作に関しては、以下の方法が機能します(今日テスト済み):

aarファイルをlibsディレクトリに配置し(必要に応じて作成)、次にbuild.gradleに次のコードを追加します。

dependencies {
   compile(name:'nameOfYourAARFileWithoutExtension', ext:'aar')
 }
repositories{
      flatDir{
              dirs 'libs'
       }
 }

1
これが正解であり、最新の方法です。この回答に投票してください;)
lmo 2015年

コードをコピーしましたが、なぜこのエラーが発生したのかわかりますか?「エラー:プロジェクト ':app'の構成中に問題が発生しました。>アーティファクト 'signalr-client-sdk-android-release.aar(:signalr-client-sdk-android-release :)'が見つかりません。次の場所で検索されました: jitpack.io//signalr-client-sdk-android-release//… "
toddmo

10
機能するためには、グローバルなrepositories部分が異なり build.gradleます。dependencies一部は、モジュールの中に入りますbuild.gradle。そのため、エラーが発生しました。
toddmo

@toddmoしたがって、私の答えは実際にはローカルAARファイルに適用されます。つまり、libsディレクトリ内にある.aarファイル。
ニシャント。

1
ありがとう。古いバージョンは私にとってはうまくいきませんでした、新しいインポート方法はうまくいきました!Gradle 3.5、groovy 2.4.10
Arnold Schrijver 2017

26

編集: ローカルAARファイルをビルドの依存関係として(現在)使用する正しい方法は、モジュールインポートウィザード(ファイル|新規モジュール| .JARまたは.AARパッケージのインポート)を使用することで、ライブラリモジュールとして.aarを自動的に追加します。プロジェクトで。

古い答え

これを試して:

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

...

compile(name:'slidingmenu', ext:'aar')

1
どちらも動作しませんでした...まだ修正されていない既知のバグのようです:code.google.com/p/android/issues/detail?id
Alexey Dmitriev

編集で言ったとおりにしましたが、最後には何も追加されませんでした。ウィザードで、AARファイルへのパスを選択し、モジュール名を指定しました。[完了]をクリックすると、Gradleファイルが同期されていましたが、新しいファイルやbuild.gradleの行は表示されませんでした(私のGitの作業コピーに変更はありませんでした)。AARファイルとJARファイルの両方を試しましたが、結果は同じでした。(私はAndroid Studio 0.8.1を使用しています)
Alexey Dmitriev

3
この古い答えは、flatDir { dirs 'libs' }AS 8.13 / Gradle 2.1を使用するOPに記載されているブロックを含める限り、実際に機能します
qix

4
新しいインポート方法を使用して.aarファイルをインポートしました。しかし、ハーフネームを入力してCtrl + Spaceを押すと、ライブラリのクラス名が表示されません。そのため、ライブラリはまだ考慮されていません。何か案が?
MysticMagicϡ

1
編集されたバージョンは、Android Studio 1.2.1.1で正常に動作します。他のGradelスクリプトを実行する必要はありません。上記のように新しいモジュールを作成できます。[新しいモデルを作成]ダイアログで、ライブラリのaarファイルへのパスを選択します(例:MyLib \ mylibrary \ build \ outputs \ aar)。ASはファイルを新しいローカルフォルダーにコピーします。アプリケーションプロジェクトを再ビルドすると、新しいライブラリモジュールがプロジェクトビューに表示されます。これで、ライブラリモジュールをプロジェクト構造のアプリケーションモジュール(たとえば、「app」)の依存関係として追加できます。モジュール| アプリ| 依存関係| 追加| モジュールの依存関係。
クリスチャンシュルツェンドルフ2015

15

私はこれをAndroid Studio 2.1で動作させました。複数のプロジェクトで共有されている「Native_Ads」というモジュールがあります。

まず、Native_adsモジュールに「aars」という名前のディレクトリを作成し、そこにaarファイルを配置しました。

ディレクトリ構造:

libs/
aars/    <-- newly created
src/
build.gradle
etc

次に、他の変更:

トップレベルのGradleファイル:

allprojects {
    repositories {
        jcenter()
        // For module with aar file in it
        flatDir {
            dirs project(':Native_Ads').file('aars')
        }
    }
}

アプリモジュールのbuild.gradleファイル:-変更なし

Settings.gradleファイル(モジュールを含める):

include ':app'
include 'Native_Ads'
project(':Native_Ads').projectDir = new File(rootProject.projectDir, '../path/to/Native_Ads')

Native_AdsモジュールのGradleファイル:

repositories {
    jcenter()
    flatDir {
        dirs 'aars'
    }
}
dependencies {
    compile(name:'aar_file_name_without_aar_extension', ext:'aar')
}

それでおしまい。クリーンでビルドします。


'Native_Ads'の複数のaarファイルでも機能します。非常に良い解決策です!
クリスチャンシュルツェンドルフ2016年

8

今最も簡単な方法は、それをモジュールとして追加することです

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

これにより、aarファイルを含む新しいモジュールが作成されるため、後でそのモジュールを依存関係として含める必要があります。


[インポート]を選択nextしたCreate New Module後、ダイアログで私のボタンがグレー表示される理由について何か考えがありJAR/AAR Packageますか?
Kevin Crain、2016年

1
私が.aarファイルを選択して名前を付けたことに注意してください
Kevin Crain

理由がわかりました。IDEがパスをチェックして、.aarファイルがプロジェクトディレクトリ内にあるかどうかを確認.aarしています。デスクトップにを配置して再試行しただけです。解決策に感謝します!
Kevin Crain、2016年

多分ばかげた質問かもしれso you just need to include that module as a dependency afterwardsませんが、それに関して-あなたはそれをどのように行いますか?
Boltup_im_coding 2017

1
@MarianKlühspies私が今見ているのは、十分なはずだと思っていincludeましたsettings.gradle。うまくいきました。ありがとう!
Boltup_im_coding 2017

7

これは私の構造であり、私がこれをどのように解決するかです:

MyProject / app / libs / mylib-1.0.0.aar

MyProject / app / myModulesFolder / myLibXYZ

オンbuild.gradle

プロジェクト/アプリ/ myModulesFolder / myLibXYZ

私はこれを入れました:

repositories {
   flatDir {
    dirs 'libs', '../../libs'
  }
}
compile (name: 'mylib-1.0.0', ext: 'aar')

完了し、正常に動作しています。私のサブモジュールXYZは、メインモジュールのライブラリに依存しています。


5

この方法でそれを行うことができます。それはmavenフォーマットで行く必要があります:

repositories {
  maven { url uri('folderName')}
}

次に、AARはグループID「com.example」のフォルダー構造に入る必要があります。

folderName/
  com/
    example/
       verion/
          myaar-version.aar

次に、依存関係として参照します。

compile 'com.example:myaar:version@aar'

versionaarファイルのバージョンはどこですか(つまり、3.0など)。


3

Android Studio 1.4の時点でこの問題が発生している人のために、プロジェクト内に2つのものを含むモジュールを作成することで問題を解決しました。

  1. 次の内容のbuild.gradle:

    configurations.create("default")

    artifacts.add("default", file('facebook-android-sdk-4.7.0.aar'))

  2. aarファイル(この例では 'facebook-android-sdk-4.7.0.aar')

次に、新しいライブラリをモジュールの依存関係として含めます。これで、プロジェクト内にソースを含めずに、ビルドされたaarを使用できます。

このハッキングのFacebookへのクレジット。Android SDKをプロジェクトに統合しているときに解決策を見つけました。


どのようなモジュールを作成しましたか?ファイル>新規>新しいモジュール>?
Al Lelopath、2015

この場合、GUIを使用してモジュールを作成すると、モジュールタイプは「Androidライブラリ」になります。モジュールのbuild.gradleを変更して、既存のモジュールをAndroidライブラリにすることができます。変更 apply plugin: 'com.android.application'apply plugin: 'com.android.library'
ビクターウデ

1つのモジュールに複数のaarを追加することは可能ですか?そうでなければ、私の
aar

@MarianKlühspiesは、私が最初にこの回答を書いてから多くの変更がありました。私は、プロジェクト内のAARを含むために公式ドキュメントを試してみることをお勧めします:developer.android.com/studio/projects/...
ビクターウデ

3

私の場合、上記の答えはどれもうまくいきませんでした!私は異なる製品フレーバーを追加しただけなのでrepositories{ flatDir{ dirs 'libs' } }

動作しませんでした!libsディレクトリの正確な場所を指定することになりました。

repositories{
flatDir{
    dirs 'src/main/libs'
}

}

build.gradleに異なるproductFlavorsがある場合は、このようなflatDirを導入する必要があると思います


2

私の場合は、aarファイルをlibsに入れて、

dependencies { ... api fileTree(dir: 'libs', include: ['*.aar']) ... }

build.gradleで動作します。私はそれがデフォルトで生成された依存関係と似ていると思います:

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


「api fileTree(dir: 'libs'、include:['* .aar])」はうまく機能しました。「api」の代わりに「実装」を使用した場合は機能しませんでした。Victor Udeのソリューションで複数のaarを使用することはできませんでした。もう1つの洞察:リソース(レイアウトなど)を使用している場合は、リンク先のaarにapkと同じ名前のリソースが含まれていないことを確認してください。レイアウトでIDの1つが見つからないというエラーが発生する場合があります。問題は、それがaarレイアウトのidに間違った名前空間を使用することです。
Tom Rutchik

1

この行はすべて含まaarjarからファイルlibsのフォルダを:

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

0

以下をアプリのgradleファイル実装プロジェクトに追加します(パス: ':プロジェクト名')


0

Kotlin Gradle DSLを既に使用している場合は、この方法の代わりにこの方法を使用します。

これが私のプロジェクト構造です

|-root
|----- app
|--------- libs // I choose to store the aar here
|-------------- my-libs-01.aar
|-------------- my-libs-02.jar
|--------- build.gradle.kts // app module gradle
|----- common-libs // another aar folder/directory
|----------------- common-libs-01.aar
|----------------- common-libs-02.jar
|----- build.gradle.kts // root gradle

ぼくの app/build.gradle.kts

  1. シンプルなアプローチを使用して fileTree
// android related config above omitted...

dependencies {
    // you can do this to include everything in the both directory
    // Inside ./root/common-libs & ./root/app/libs
    implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar"))))
    implementation(fileTree(mapOf("dir" to "../common-libs", "include" to listOf("*.jar", "*.aar"))))
}
  1. ローカル/リモートのMavenリポジトリからフェッチするのと同じアプローチを使用して flatDirs
// android related config above omitted...

repositories {
    flatDir {
        dirs = mutableSetOf(File("libs"), File("../common-libs") 
    }
}

dependencies {
   implementation(group = "", name = "my-libs-01", ext = "aar")
   implementation(group = "", name = "my-libs-02", ext = "jar")

   implementation(group = "", name = "common-libs-01", ext = "aar")
   implementation(group = "", name = "common-libs-02", ext = "jar")
}

これgroupは、kotlinの必須(オプションではない/デフォルト値があるため)のために必要でした。implementation以下を参照してください。

// Filename: ReleaseImplementationConfigurationAccessors.kt
package org.gradle.kotlin.dsl

fun DependencyHandler.`releaseImplementation`(
    group: String,
    name: String,
    version: String? = null,
    configuration: String? = null,
    classifier: String? = null,
    ext: String? = null,
    dependencyConfiguration: Action<ExternalModuleDependency>? = null
)

免責事項:no.1&を使用した違い flatDirs no.2のアプローチ、私はまだあまり知りません、あなたはこの答えを編集/コメントしたいと思うかもしれません。

参照:

  1. https://stackoverflow.com/a/56828958/3763032
  2. https://github.com/gradle/gradle/issues/9272
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.