Android Studio 将所有 aar 文件包含在一个目录中

Android Studio include all aar files in a directory

我正在为一个框架编写构建系统,用户(开发人员)可以通过插件对其进行扩展。我的问题是我无法包含所有带有掩码的 aar 文件。例如,我可以像这样包含所有 jar 文件:

compile fileTree(dir: 'libs', include: '*.jar')

但是如果我像这样包含所有 aar 文件:

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

我收到一个错误:

Only Jar-type local dependencies are supported. Cannot handle: /path/to/file.aar

但是可以像这样单独包含每个文件:

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

作为解决方法,在构建期间,我需要列出 'libs' 目录中的文件,手动将所有库插入我的 build.gradle 并保持同步(或每次重写).这是一种骇人听闻的做法,因此我想知道是否有更好的做法。也许有一个 gradle 脚本可以自动完成,或者一些 gradle beta 支持这个:

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

您可以将您的 aar 文件放在一个文件夹中。 您必须在 repositories 块中定义此文件夹。当然你可以使用libs文件夹

类似于:

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

然后你可以在你的依赖中使用像这样的东西:

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

据我所知,无法将所有带有通配符的 aar 包含为 *.

首先添加 flatDir 存储库:

repositories {
    flatDir {
        dirs 'libs'
    }
}

然后在 dependencies 部分后添加:

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'
    ])
}

我知道这个答案已经晚了,但对于其他来到这里的人来说,我没有使用 repository.flatDir。
只需在依赖部分

之后添加 fileTree()
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:27.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
fileTree(dir: 'libs', include: '*.aar')
    .each { File file ->
dependencies.add("compile", files( 'libs/'+file.name ))
}