【问题标题】:"Uses reserved file or directory name 'lib'" error when trying to build android app bundle尝试构建 Android 应用程序包时出现“使用保留文件或目录名称‘lib’”错误
【发布时间】:2019-03-28 16:04:48
【问题描述】:

我正在尝试构建应用程序包,但出现以下错误:

File 'root/lib/x86_64-MacOSX-gpp/jni/libjunixsocket-native-2.0.4.jnilib' uses reserved file or directory name 'lib'.

对于我从类似问题中看到的情况,这个问题通常是通过在项目结构中处理依赖项或文件来解决的,但在这种情况下,如果我没记错的话,它似乎指向应用程序架构中涉及的本机库。任何想法如何解决这个问题?

【问题讨论】:

    标签: android kotlin android-app-bundle


    【解决方案1】:

    看起来您正在将依赖项添加为 jar 而不是 aar

    aar 包含应用程序中应将哪些文件视为 Android 资源、本机库等的信息。 jar 只是一个没有 Android 概念的简单文件列表。因为您所依赖的jar 包含一个目录lib,所以这些文件通常最终会被视为本机库,但是由于这些文件来自 jar 而不是 aar,因此构建系统会警告它不太可能是一个原生库,在运行时可能会产生意想不到的后果。

    尝试将该库打包为.aar 而不是.jar。请参阅此文档:https://developer.android.com/studio/projects/android-library

    编辑: 请注意,如果该文件按原样包含在 APK 中,则 Android 平台无法加载此文件,因此即使以前的构建系统允许您将任何内容放入 APK 中,Android App Bundle 的限制性更强,以确保您不要意外放置不必要的文件,这会不必要地增加您的应用程序的大小。

    【讨论】:

    • 感谢@Pierre,我有一个应用程序模块正在编译为 .jar 文件(因为在我的情况下它是纯 kotlin 代码)。我试图将它编译为 .aar 文件,但我得到了同样的错误。它可以是外部依赖吗?如何确定哪个依赖项正在使用此文件?
    • 在谷歌快速搜索后,我找到了这个post,它解释了如何列出应用程序的依赖项。然后,您也许可以查找包含“junixsocket”的内容以查看该依赖项来自何处?
    • 我知道如何列出我的应用程序的依赖项,我不知道如何在依赖项中搜索给我带来麻烦的文件,我会尝试这种方法并返回
    • 迟到总比没有好!我进行了更多研究,对我来说破解它的是在以前构建的 apk 上使用 apk 分析器。我正在使用生成 NDK 文件(.so 文件)的 openTok SDK,并将它们放在 lib 文件夹内的各种 ABI 配置的子目录中。我一直在努力寻找解决方案,但还没有找到。有什么建议? @皮埃尔
    【解决方案2】:

    好的,现在可以使用了!我用来发现问题的步骤(感谢@Pierre 指出我正确的方向)

    从您的终端运行gradle build --scan 或转到Android Studio 中的Gradle 选项卡,选择:app、help、androidDependencies 以查看您的依赖关系图。

    在依赖图中搜索与问题相关的库名称(在我的例子中,我搜索的是 socket,例如 libjunixsocket 没有匹配项)。

    在依赖树上向上走,我意识到这是由 'io.voucherify.android.client:voucherify-android-sdk:2.1.0' 依赖引起的。

    我刚刚在依赖项实现的末尾添加了@aar,并且我设法构建了应用程序包。

    implementation 'io.voucherify.android.client:voucherify-android-sdk:2.1.0@aar'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-09
      • 2018-08-12
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      相关资源
      最近更新 更多