問題の説明
プロジェクトが作成されると、最初のモジュールであるアプリが生成されます。
モジュール:アプリはモジュールに依存します:baseapp
モジュール:baseappはモジュールに依存します:c
特別な依存関係がない場合、この時点でコンパイルによって問題が発生することはありません。
module:baseappはbaseapp / libs /android_gif_drawable.aarに依存します。通常の処理では、baseappのbuild.gradleファイルに追加する必要があります
//【步骤1】
dependencies {
compile(name: ‘android_gif_drawable’, ext: ‘aar’)
}
//【步骤2】
repositories {
flatDir {
dirs ‘libs’
}
}
この時点でコンパイルすると、エラーが見つかりました。プロンプト:Android_gif_drawable.aarがアプリのbuild.gradleにあります
Error:A problem occurred configuring project ':app'.
> Could not resolve all dependencies for configuration ':app:_prodDebugApkCopy'.
> Could not find :android_gif_drawable:.
Required by:
project :app > project :baseapp
問題の原因
理由1:flatDir.dirsで何が構成されていますか?
//【步骤1】
dependencies {
compile(name: ‘android_gif_drawable’, ext: ‘aar’)
}
ではbaseapp/build.gradle
、中央、我々は「AAR」依存「android_gif_drawable」形式として宣言し、この依存性は同じレベルとライブラリモジュールであります
ただし、compile project(':jni')
このように参照ライブラリモジュールを使用する場合は、project()
関数を借用して、位置に依存するgradleパスを通知します。
では、aarメソッドの依存関係の特定のリソースパスをgradleに伝える方法は?これがステップ2です
//【步骤2】
repositories {
flatDir {
dirs ‘libs’
}
}
これは相対パスです。で構成されていることに注意してください。baseapp/build.gradle
その後、baseappはgradleがコンパイルされると「oh〜'android_gif_drawable 'はaarであり、そのパスは現在のディレクトリのlibsにあります。baseapp/ libs」です。
これは、baseappがaarとしてパッケージ化されたときに独立してコンパイルできる理由も説明しています
理由2:アプリケーションはすべての依存関係を見つける必要があります
aar自体は一種のライブラリモジュールであり、applyプラグインで直接使用されます: 'com.android.application'
つまり、アプリはbaseappのすべての依存関係の場所を知る必要があります。リモート依存関係の場合は、リモート依存関係のコードをプルダウンします。ローカル依存関係の場合は、ローカル依存関係の場所を見つけます。
したがって、次のようなロジックがあります。
baseappを統合するときにアプリが見つかりました、
「ああ〜android_gif_drawableはaarです、どこにありますか?
flatDir.dirs
が指すパスは、現在のディレクトリのlibs、つまりapp / libsにもあります」
それから私は「ええと、なぜあなたはしなかったのですか?」と知り、エラーを報告しました。
ソリューション
パス1:プロジェクト全体の網羅的なパス
次のように、Projectの下のbuild.gradleのリポジトリに対応する参照を追加します。
allprojects {
repositories {
jcenter()
flatDir {
// 由于Library module中引用了 gif 库的 aar,在多 module 的情况下,
// 其他的module编译会报错,所以需要在所有工程的repositories
// 下把Library module中的libs目录添加到依赖关系中
dirs 'libs'
dirs project(':baseapp').file('libs') //借助 project()函数的位置查找
//dirs '../baseapp/libs' // 直接指明路径,注意前边的../, 要先回到根目录去查找别的module
}
}
}
パス2:モジュールbaseappに依存するすべてのmodules /build.gradleを追加します
repositories {
flatDir {
dirs 'xxx/libs' // Module A的libs的目录地址
}
}
すべてのモジュールをモジュールAのlibsディレクトリの相対アドレスに追加します。