【问题标题】:Android AAR lib - resource linking failedAndroid AAR lib - 资源链接失败
【发布时间】:2019-06-30 01:58:11
【问题描述】:

我正在尝试将 Android 应用程序转换为 lib 模块,而不复制源代码。 我做到了(修改了 build.gradle 文件),它会同步和构建,但是当我将生成的 AAR 文件的依赖项添加到另一个项目(我想使用这个 lib)时,构建失败并且资源链接失败。

我不明白为什么:

  • 原始应用程序构建和运行

  • lib 模块(从应用转换而来)构建

  • 使用该库中的 AAR 的项目无法构建,并在此 AAR 中发现错误。

例如,可能的错误之一是:

Android resource linking failed
error: resource style/TextAppearance.Design.Tab (aka bv.dev.aarlibtester:style/TextAppearance.Design.Tab) not found.
error: failed linking references.

所以它说找不到资源,并指向我在那个库中使用的依赖项(在这个例子中是design

我创建了测试项目以通过简单的示例来演示这一点。

Github

  • aar-res-app 是一个使用design 依赖的简单应用项目

  • aar-res-lib 是从此项目创建的库(已转换)

  • aar-res-lib-tester 是使用该库的简单应用项目。


目前我将库包重命名为与应用程序包不匹配,并使用jar 而不是aar

我使用Gradle -> root -> Tasks -> Other -> createFullJarRelease 创建它。

结果在Build > Intermediates > Full_jar > Release > CreateFullJarRelease > full.jar

【问题讨论】:

  • 我在“aar-lib-res-problem/aar-res-lib”存储库中看不到任何“build”文件夹。顺便说一句,你为什么通过“实现文件(”../../aar-res-lib/app/build/outputs/aar/app-release.aar“)”指令在你的gradle中包含.aar文件而不是简单地将文件放在应用程序的 lib 文件夹中?
  • @NicolaGallazzi "build" 文件夹被标准 .gitignore 忽略,并且不包含在提交中。我也尝试过这种方法,它不会改变结果。
  • 您是否尝试从库模块中删除 AppTheme?它与您的应用程序模块一具有相同的名称,并且可能在解决依赖关系时导致一些冲突
  • @NicolaGallazzi 尝试重命名它以及其他类似的名称,但毕竟它再次显示相同的错误

标签: java android android-studio gradle aar


【解决方案1】:

真正的问题是,以这种方式创建的aarjar 不包含它们所依赖的库。如果以这种方式添加库,您需要将其所有依赖项添加到使用它的项目中。

在我的例子中是implementation 'com.android.support:design:28.0.0'

如果项目包含大量此类依赖项,则应将其全部添加。但是您仍然可以遇到诸如“清单合并失败”和其他问题的问题。

或者您可以尝试将您的 lib 部署到 maven 或 jitpack,但您需要正确设置以确保生成的 pom 文件包含所有需要的依赖项,以便能够轻松使用此库。

【讨论】:

    猜你喜欢
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多