Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用“添加本地.aar文件到Gradle build”;flatDirs“;它不起作用了_Android_Android Studio_Android Gradle Plugin_Build.gradle_Aar - Fatal编程技术网

Android 使用“添加本地.aar文件到Gradle build”;flatDirs“;它不起作用了

Android 使用“添加本地.aar文件到Gradle build”;flatDirs“;它不起作用了,android,android-studio,android-gradle-plugin,build.gradle,aar,Android,Android Studio,Android Gradle Plugin,Build.gradle,Aar,我知道这个问题:但解决方案对我不起作用 我尝试将此语句添加到我的build.gradle文件的顶层: repositories { mavenCentral() flatDir { dirs 'libs' } } 我还将slidingmenu.aar文件放入/libs中,并在dependencies部分中引用它:compile'com.slidingmenu.lib:slidingmenu:1.0。0@aar“但它根本不起作用 我也试过编译文件('lib

我知道这个问题:但解决方案对我不起作用

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

repositories {
    mavenCentral()
    flatDir {
        dirs 'libs'
    }
}
我还将
slidingmenu.aar
文件放入
/libs
中,并在
dependencies
部分中引用它:
compile'com.slidingmenu.lib:slidingmenu:1.0。0@aar“
但它根本不起作用

我也试过编译文件('libs/slidingmenu.aar'),但没有成功

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

p.S.Android Studio 0.8.2

编辑: 使用本地AAR文件作为构建依赖项的正确方法(当前)是使用模块导入向导(文件| New module | import.JAR或.AAR包),该向导将自动将.AAR添加为项目中的库模块

旧答案

试试这个:

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

...

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

以约西亚的回答为基础,以下是我如何让它发挥作用的

按照他的指示(在编辑下)(文件->新建->新模块->导入.JAR/.AAR)并导入您的.AAR

然后在您的project build.gradle(不是顶级版本,而是“app”下的版本)中添加以下内容(在依赖项部分):

注意:项目名称应与导入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 我的申请 主意 应用程序 build.gradle(这里是将编译项目(':ProjectName')添加到依赖项部分的位置) ProjectName(导入后自动添加,与aar文件的名称匹配) 建造 格拉德尔 等 这对我运行Android Studio 0.8.0很有效。完成此操作后,不要忘记同步gradle(使用工具栏按钮或在文件->同步中)

(感谢约西亚让我走上了正确的方向)


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

更新:正如@amram99所提到的,自Android Studio v1.3发布之日起,该问题已得到修复

按照以下规范进行测试和验证

  • Android Studio v1.3
  • gradle插件v1.2.3
  • 格雷德尔v2.4
现在什么有效

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

  • 但是,不管Android Studio的变化如何,下面的答案都是正确有效的,因为这是基于gradle脚本编写的。


旧答案: 在最近的一次更新中,android的人员通过android Studio的“添加新模块”菜单选项打破了本地aar文件的限制。 检查此处列出的选项。 不管IDE功能列表中的任何内容,下面的方法在处理本地aar文件时都有效。(今天已经测试过了):

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

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

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

repositories {
  maven { url uri('folderName')}
}
然后,您的AAR需要进入组id“com.example”的文件夹结构中:

然后将引用作为依赖项:

implementation fileTree(dir: 'libs', include: ['*.jar'])
compile'com.示例:myaar:version@aar“


其中,
version
是aar文件的版本(例如,3.0等)

对于在Android Studio 1.4中出现此问题的任何人,我通过在项目中创建一个包含两个内容的模块使其工作

  • build.gradle包含以下内容:

    配置。创建(“默认值”)

    artifacts.add(“默认”,文件('facebook-android-sdk-4.7.0.aar'))

  • aar文件(在本例中为“facebook-android-sdk-4.7.0.aar”)

  • 然后将新库作为模块依赖项包含。现在,您可以使用构建的aar,而无需在项目中包含源


    这是Facebook的功劳。我在将Android SDK集成到一个项目中时找到了解决方案。

    在我的例子中,上述答案都不起作用!因为我有不同的产品口味只是添加

    repositories {
        flatDir {
             dirs 'libs'
        }
    }
    
    没用!我最后指定了libs目录的确切位置:

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

    我想,当build.gradle中有不同的产品风格时,应该引入这样的FlatDir。我有一个名为“Native_Ads”的模块,可以在多个项目中共享

    首先,我在本机的_ads模块中创建了一个名为“aars”的目录,然后将aar文件放在其中

    目录结构:

    libs/
    aars/    <-- newly created
    src/
    build.gradle
    etc
    
    应用程序模块的build.gradle文件: -不变

    Settings.gradle文件(包括模块):

    本机_Ads模块的渐变文件:

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

    就这样。清理并构建。

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


    这将创建一个包含aar文件的新模块,因此您只需在以后将该模块作为依赖项包含进去

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

    MyProject/app/libs/mylib-1.0.0.aar

    MyProject/app/myModulesFolder/myLibXYZ

    build.gradle上

    来自Project/app/myModulesFolder/myLibXYZ

    我这样说:

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

    完成并运行良好,我的子模块XYZ依赖于主模块中的某个库。

    在我的例子中,我只是将AAR文件放在libs中,然后添加

    dependencies {
        ...
        api fileTree(dir: 'libs', include: ['*.aar'])
        ...
    }
    
    build.gradle
    中,它可以工作。我认为这与默认生成的依赖项类似:

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

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

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

    在应用程序中添加以下渐变文件 实施项目
    dependencies {
        ...
        api fileTree(dir: 'libs', include: ['*.aar'])
        ...
    }
    
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    
    implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs/')
    
    |-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
    
    // 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"))))
    }
    
    // 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")
    }
    
    // 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
    )
    
    repositories {
    mavenCentral()
    flatDir {
        dirs 'libs'
    }
    
    dependencies {
    api fileTree(include: ['*.aar'], dir: 'libs')
    implementation files('libs/<yourAarName>.aar')
    
    repositories {
    flatDir {
        dirs 'libs'
    }}
    
    dependencies {
    api fileTree(include: ['*.aar'], dir: 'libs')
    implementation files('libs/<yourAarName>.aar')