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

标签 android gradle android-gradle-plugin

我正在为一个框架编写构建系统,用户(开发人员)可以通过插件对其进行扩展。我的问题是我无法包含所有带有掩码的 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'])

最佳答案

首先添加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'
    ])
}

关于Android Studio 将所有 aar 文件包含在一个目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31081506/

相关文章:

android - 异常 : java. lang.RuntimeException : Unable to instantiate application com. salesforce.androidsdk.phonegap.app.HybridApp

android - 在 Android 相机 Intent 上按后退按钮时应用程序崩溃

android - 无法解析 Butterknife 中的符号 BindViews

android - 如何使用 Gradle 配置 Proguard?

java - 如何从 Gradle 中的 jacoco 插件中排除生成的 sourceSet

java - 将 Flex 构建 ant 目标转换为 gradle。在 gradle 中运行 flex build 需要什么?

android - 在 Android Studio 中创建新 Activity 时禁用自动构建/同步?

macos - 无法在Android Studio项目中构建gradle

android - Intellij IDEA 不从 gradle 导入依赖,不标记 src 目录

android - NoClassDefFoundError android/support/v4/animation/AnimatorCompatHelper