使用" flatDirs"将本地.aar文件添加到Gradle构建不管用

时间:2014-07-01 09:19:31

标签: android android-studio android-gradle build.gradle aar

我知道这个问题:Adding local .aar files to my gradle build但解决方案对我不起作用。

我尝试将此语句添加到build.gradle文件的顶层:

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

我还将slidingmenu.aar文件放入/libs并在dependencies部分引用它:compile 'com.slidingmenu.lib:slidingmenu:1.0.0@aar'但它根本不起作用。

我也试过compile files('libs/slidingmenu.aar'),但没有运气。

我错过了什么?有什么想法吗?

P.S。 Android Studio 0.8.2

15 个答案:

答案 0 :(得分:286)

以Josiah的答案为基础,这里是我如何运作的。

按照他的说明(编辑中)(文件 - >新 - >新模块 - >导入.JAR / .AAR )并导入.AAR。

然后在你的项目build.gradle(不是顶级的那个,' app'下面的那个)中添加以下内容(在依赖项部分中):

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

注意,您的项目名称应与导入AAR文件后添加的文件夹名称相匹配(与最高级别文件夹下的app/.idea级别相同)。或者换句话说......

MyApplication
  .idea
  app
  build.gradle (here's where to add compile project(':ProjectName') to dependency section)
  ProjectName (added automatically after importing, matching the name of your aar file)
  build
  gradle
  etc

这适用于运行Android Studio 0.8.0。在执行此操作后,不要忘记同步gradle(使用工具栏按钮或文件 - >同步)。

(感谢Josiah让我朝着正确的方向前进)

(注意:在此之前我尝试将其添加到libs文件夹,尝试操作顶级build.gradle和应用级build.gradle,但这些都不适用于我的aars文件 - jar的工作正常,但不是aar文件)

答案 1 :(得分:185)

更新:正如@ amram99所述,issue已在Android Studio v1.3发布时修复。

使用以下规格进行测试和验证

  • Android Studio v1.3
  • gradle plugin v1.2.3
  • Gradle v2.4

现在有效吗

  • 现在您可以通过 文件>新建>新建导入本地aar文件 模块>在Android Studio v1.3中导入.JAR / .AAR包 选项

  • 但是,无论Android Studio的更改如何,以下答案都是正确有效的,因为它基于gradle脚本。


旧答案: 在最近的一次更新中,Android的用户通过Android Studio添加新的模块菜单选项打破了包含本地aar文件的麻烦。 查看此处列出的Issue。 无论进入和退出IDE的功能列表,下面的方法在使用本地aar文件时都有效。(今天测试过):

将aar文件放在libs目录中(如果需要,创建它),然后在build.gradle中添加以下代码:

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

答案 2 :(得分:24)

修改 使用本地AAR文件作为构建依赖项的正确方法(当前)是使用模块导入向导(文件|新模块|导入.JAR或.AAR包),它将自动将.aar作为库模块添加到您的库中。项目

旧答案

试试这个:

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

...

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

答案 3 :(得分:14)

我在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')
        }
    }
}

App模块的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')
}

就是这样。清洁和建设。

答案 4 :(得分:6)

现在最简单的方法是将其添加为模块

enter image description here

这将创建一个包含aar文件的新模块,因此您只需要将该模块作为依赖项加入

答案 5 :(得分:5)

你可以这样做。它需要采用maven格式:

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

然后你的AAR需要进入组ID为“com.example”的文件夹结构:

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

然后引用为依赖:

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

其中version是您的aar文件的版本(即3.0等)

答案 6 :(得分:4)

这是我的结构,以及我如何解决这个问题:

  

MyProject的/应用/库/的 MYLIB-1.0.0.aar

     

MyProject的/应用/ myModulesFolder / myLibXYZ

build.gradle

来自项目/ app / myModulesFolder / myLibXYZ

我已经说过了:

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

完成并正常工作,我的子模块XYZ取决于主模块中的某个库。

答案 7 :(得分: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')

  3. 然后将新库包含为模块依赖项。现在,您可以使用构建的aar而不包括项目中的源。

    对于这次黑客攻击Facebook。我在将Android SDK集成到项目中时找到了解决方案。

答案 8 :(得分:3)

就我而言,上述答案都没有奏效!因为我有不同的productFlavors只添加repositories{ flatDir{ dirs 'libs' } }

没用!我最终指定了 libs 目录的确切位置:

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

}

猜猜当 build.gradle

中有不同的productFlavors时,应该引入这样的flatDirs

答案 9 :(得分:1)

此解决方案适用于Android Studio 4.0.1。

除了上述解决方案中建议的创建新模块之外,您还可以尝试此解决方案。

如果您的应用程序中有多个模块,并且只想向其中一个模块添加aar,则此解决方案会派上用场。

在您的根项目中 build.gradle

添加

<ul>
    <?php
    $categories= get_terms( 'product_cat', array( 'parent' => 15, 'hide_empty' => false ) );
    foreach($categories as $category): ?>
        <li>
            <div class="grid-subheader">
                <?php 
                    $metaArray = get_option('taxonomy_' . $category->term_id);
                    $productCatMetaTitle = $metaArray['wh_meta_title'];
                    $type = get_term_by( 'id', $category->parent, 'product_cat' );
                    
                    $args = array(
                        'post_type'             => 'product',
                        'post_status'           => 'publish',
                        'ignore_sticky_posts'   => 1,
                        'posts_per_page'        => 1,
                        'tax_query'             => array(
                            array(
                                'taxonomy'      => 'product_cat',
                                'field' => 'term_id', //This is optional, as it defaults to 'term_id'
                                'terms'         => $category->term_id,
                                'operator'      => 'IN' // Possible values are 'IN', 'NOT IN', 'AND'.
                            )
                        )
                    );

                    $products = new WP_Query($args);

                    foreach ($products as $prod){
                        $link = get_the_permalink($prod->ID);   
                    }
                ?>

                <h3><?php echo $productCatMetaTitle; ?></h3>
                <p><?php echo $category->description; ?></p>
                <a href="<?php echo $link; ?>">
                    <div class="button-menu">
                        <?php //echo $type->name; ?> <?php echo $category->name; ?>
                    </div>
                </a>
            </div>
        </li> 
    <?php endforeach; ?> 
</ul>

然后在要在本地添加.aar文件的模块中。只需在下面的代码行中添加。

repositories {
flatDir {
    dirs 'libs'
}}

}

快乐编码:)

答案 10 :(得分:0)

就我而言,我只是将aar文件放入libs中,然后添加

from _dbm import *

在build.gradle中,它可以工作。我认为这与默认生成的依赖项相似:

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

答案 11 :(得分:0)

此行包括aar文件夹中的所有jarlibs文件:

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

答案 12 :(得分:0)

在应用gradle文件中添加以下内容 实施项目(路径:“:项目名称”)

答案 13 :(得分: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. 使用相同的方法,例如使用flatDirs从本地/远程maven存储库中获取
// 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
)

免责声明: 使用1号方法和flatDirs 2号方法的区别,我还是不太了解,您可能需要编辑/注释此答案。

参考:

  1. https://stackoverflow.com/a/56828958/3763032
  2. https://github.com/gradle/gradle/issues/9272

答案 14 :(得分:0)

此解决方案适用于Android Studio 4.0.1。

除了上述解决方案中建议的创建新模块之外,您还可以尝试此解决方案。

如果您的应用程序中有多个模块,并且只想向其中一个模块添加aar,则此解决方案会派上用场。

在您的根项目build.gradle

添加

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

然后在要在本地添加.aar文件的模块中。只需在下面的代码行中添加。

dependencies {
api fileTree(include: ['*.aar'], dir: 'libs')
implementation files('libs/<yourAarName>.aar')

}

快乐编码:)