Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.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文件依赖项_Android_Android Gradle Plugin_Aar - Fatal编程技术网

生成Android库时出错:不支持直接本地.aar文件依赖项

生成Android库时出错:不支持直接本地.aar文件依赖项,android,android-gradle-plugin,aar,Android,Android Gradle Plugin,Aar,我们最近升级到Android Gradle插件4.0.0-beta03。我们现在在构建一个库模块时看到了这个错误 $ ./gradlew library_module:assemble Execution failed for task ':library_module:bundleDebugAar'. > Direct local .aar file dependencies are not supported when building an AAR. The resulting AAR

我们最近升级到Android Gradle插件4.0.0-beta03。我们现在在构建一个库模块时看到了这个错误

$ ./gradlew library_module:assemble Execution failed for task ':library_module:bundleDebugAar'. > Direct local .aar file dependencies are not supported when building an AAR. The resulting AAR would be broken because the classes and Android resources from any local .aar file dependencies would not be packaged in the resulting AAR. Previous versions of the Android Gradle Plugin produce broken AARs in this case too (despite not throwing this error). The following direct local .aar file dependencies of the :library_module project caused this error: ______.aar $./gradlew库\模块:组装 任务“:库\模块:BundledBugaar”的执行失败。 >生成aar时不支持直接的本地.aar文件依赖项。 由此产生的AAR将被破坏,因为类和Android资源来自任何local.AAR 文件依赖项不会打包到结果AAR中。Android的早期版本 Gradle插件在这种情况下也会产生损坏的AAR(尽管没有抛出此错误)。这个 以下:library_模块项目的直接本地.aar文件依赖项导致了此错误: ______阿尔先生 我看这是几个月前的事了。但他们没有提供进一步的原因信息

所以

  • 出了什么问题?有更多的信息吗?我在任何地方都找不到一个bug报告
  • 我怎样才能解决这个问题?这是不是说我不能建造一个。aar,这取决于其他当地的。aar?如果这个本地aar托管在Maven Central或另一个远程回购上会怎么样?为什么会有不同

  • 我最近遇到了同样的问题,修复方法是从
    libs/
    中删除库,并使用
    File->New->New Module->import.JAR/.AAR包导入它,然后在库模块
    build.gradle
    文件中引用它:

    dependencies {
      implementation project(":imported_aar_module")
    }
    
    compileOnly files('libs/some-library.aar')
    

    每当我使用此代码时

    api fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
    
    api(name: 'you aar name', ext: 'aar')
    
    有同样的问题

    但是当我替换这个代码时

    api fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
    
    api(name: 'you aar name', ext: 'aar')
    

    它是有效的

    当我将Android插件版本增加到4.0.1时,我也遇到了这个问题,结果出现了错误,尝试了一些解决方案,但在我们的项目中没有一个是可行的。
    由于我们使用的是产品风格,不同的风格使用的是不同的本地aar文件,我们不能仅仅使用
    api(名称:“xxx”,ext:'aar')
    ,因为这些aar文件位于不同的
    flatDir
    中。
    现在我必须回到以前的gradle插件版本。

    如果我发现了安卓Studio 4.0中的漏洞,我将编辑此答案。+/p>。但是,有一个解决方案

    首先,project/build.gradle:

    allprojects {
       repositories {
            google()
            jcenter()
            mavenCentral()
            flatDir {dirs "../MoudleA/aars,../MoudleB/aars,../MoudleC/libs".split(",")
            }
        }
    }
    
    // MoudleA/build.gradle
    
    repositories {
        flatDir {
            dirs 'aars'
        }
    }
    
    dependencies {
        api fileTree(dir: 'libs', include: ['*.jar'])
        //api fileTree(dir: 'aars', include: ['*.aar'])
        // aar
        new File('MoudleA/aars').traverse(
                nameFilter: ~/.*\.aar/
        ) { file ->
            def name = file.getName().replace('.aar', '')
            api(name: name, ext: 'aar')
        }
    }
    
    // MoudleB/build.gradle
    
    repositories {
        flatDir {
            dirs 'aars'
        }
    }
    
    dependencies {
        api fileTree(dir: 'libs', include: ['*.jar'])
        //fullApi fileTree(dir: 'aars/full', include: ['*.aar'])
        //liteApi fileTree(dir: 'aars/lite', include: ['*.aar'])
        // aar
        new File('MoudleB/aars/full').traverse(
                nameFilter: ~/.*\.aar/
        ) { file ->
            def name = file.getName().replace('.aar', '')
            fullApi(name: 'full/' + name, ext: 'aar')
        }
        new File('MoudleB/aars/lite').traverse(
                nameFilter: ~/.*\.aar/
        ) { file ->
            def name = file.getName().replace('.aar', '')
            liteApi(name: 'lite/' + name, ext: 'aar')
        }
    
    }
    
    // MoudleC/build.gradle
    
    repositories {
        flatDir {
            dirs 'libs'
        }
    }
    
    dependencies {
        //api fileTree(dir: 'libs', include: ['*.jar','*.aar'])
        api fileTree(dir: 'libs', include: ['*.jar'])
        // aar
        new File('MoudleC/libs').traverse(
                nameFilter: ~/.*\.aar/
        ) { file ->
            def name = file.getName().replace('.aar', '')
            api(name: name, ext: 'aar')
        }
    }
    
    第二,Moudle/build.gradle:

    allprojects {
       repositories {
            google()
            jcenter()
            mavenCentral()
            flatDir {dirs "../MoudleA/aars,../MoudleB/aars,../MoudleC/libs".split(",")
            }
        }
    }
    
    // MoudleA/build.gradle
    
    repositories {
        flatDir {
            dirs 'aars'
        }
    }
    
    dependencies {
        api fileTree(dir: 'libs', include: ['*.jar'])
        //api fileTree(dir: 'aars', include: ['*.aar'])
        // aar
        new File('MoudleA/aars').traverse(
                nameFilter: ~/.*\.aar/
        ) { file ->
            def name = file.getName().replace('.aar', '')
            api(name: name, ext: 'aar')
        }
    }
    
    // MoudleB/build.gradle
    
    repositories {
        flatDir {
            dirs 'aars'
        }
    }
    
    dependencies {
        api fileTree(dir: 'libs', include: ['*.jar'])
        //fullApi fileTree(dir: 'aars/full', include: ['*.aar'])
        //liteApi fileTree(dir: 'aars/lite', include: ['*.aar'])
        // aar
        new File('MoudleB/aars/full').traverse(
                nameFilter: ~/.*\.aar/
        ) { file ->
            def name = file.getName().replace('.aar', '')
            fullApi(name: 'full/' + name, ext: 'aar')
        }
        new File('MoudleB/aars/lite').traverse(
                nameFilter: ~/.*\.aar/
        ) { file ->
            def name = file.getName().replace('.aar', '')
            liteApi(name: 'lite/' + name, ext: 'aar')
        }
    
    }
    
    // MoudleC/build.gradle
    
    repositories {
        flatDir {
            dirs 'libs'
        }
    }
    
    dependencies {
        //api fileTree(dir: 'libs', include: ['*.jar','*.aar'])
        api fileTree(dir: 'libs', include: ['*.jar'])
        // aar
        new File('MoudleC/libs').traverse(
                nameFilter: ~/.*\.aar/
        ) { file ->
            def name = file.getName().replace('.aar', '')
            api(name: name, ext: 'aar')
        }
    }
    

    它对我有效,您也可以尝试。

    当构建依赖于其他Android库(即,
    aar
    文件)的Android库时,如果将aar文件作为依赖项包含在项目中,您将收到以下错误消息:

    生成aar时不支持直接的本地.aar文件依赖项。结果AAR将被破坏,因为来自任何本地.AAR文件依赖项的类和Android资源不会打包在结果AAR中。以前版本的Android Gradle插件在这种情况下也会产生损坏的AAR(尽管没有抛出此错误)

    正如上面的消息所述,当您构建Android库项目时,它所依赖的任何aar都不会打包。如果您在AGP(Android Gradle插件)4之前以这种方式构建,您可能会注意到您必须在使用库的项目中包含aar依赖项

    您可以通过指定aar依赖项是
    compileOnly
    来编译Android库项目。有关何时使用
    compileOnly
    的更多信息,请参阅

    因此,只需将以下内容添加到您的
    应用程序
    build.gradle
    文件中即可:

    dependencies {
      implementation project(":imported_aar_module")
    }
    
    compileOnly files('libs/some-library.aar')
    
    请注意,如果这样做,则必须在使用库的应用程序项目上包含aar依赖项

    或者,您可以创建一个模块,导入您的
    aar
    依赖项,如上面的答案所述

    另一种方法是将
    aar
    依赖项发布到maven存储库,然后将它们添加到库项目中,如下所示:

    implementation 'mylibrarygroup:mylibraryartifact:version-x.y.z@aar'
    

    现在有一些更改,您需要添加AARJAR作为依赖项

    1.)首先,导航到文件项目结构 [参考图像1]

    2.)然后转到依赖项
    声明的依赖项选项卡,单击并在下拉列表中选择JAR/AAR依赖项 [参考图像2]

    3.)在Addjar/Aar依赖项对话框中,首先输入.Aar或.Jar文件的路径,然后选择应用依赖项的配置。如果库应可用于所有配置,请选择“实现”配置。 [参考图像3]

    4.)单击确定,然后应用确定


    您可以开始了。

    使用此代码时会出现相同的错误

    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation fileTree(include: ['*.aar'], dir: 'libs')
    
    用以下代码替换您的代码

    api(name:'aar_module_name', ext:'aar')
    
    打开顶级“build.gradle”文件并添加

    repositories {
            flatDir {
                dirs('/src/main/libs')
            }
        }
    
    然后在项目的build.gradle中添加以下内容

    api(name:'aar_module_name', ext:'aar')
    

    有了这个解决方案,我们将突然需要更多的模块。遗憾的是,没有更多关于这个新警告的信息,这对我来说不是很符合逻辑,我们的项目是如何工作的。就像没有人在制作gradle时考虑过这个场景一样,我收到了这个错误“无法理解gradle设置。手动添加路径”。有人有办法解决这个问题吗?只是一个正面评论-我在寻找一个解决方案,一个AAR可以包含另一个AAR。这个答案并非如此。第二个AAR已成功创建,但未与第一个AAR绑定。导入.JAR/.AAR包在android studio 4中不可用@spollom@google.com对此有何评论?我得到“未能解析::我的库名:”。无论是在我添加
    api(name:'my_lib_name',ext:'aar')
    还是
    api(name:'libs/my_lib_name',ext:'aar')
    你的答案真的帮了我大忙。谢谢。我不知道这个答案对任何人都有什么帮助。谷歌声明:“你不能将compileOnly配置与AAR依赖项一起使用。”在他们的文档中:@DarkNeuron,这是因为OP的用例不同:你有一个库项目