【问题标题】:cardslib error resource android:attr/foregroundInsidePadding is private while targeting SDK 26cardlib 错误资源 android:attr/foregroundInsidePadding 在面向 SDK 26 时是私有的
【发布时间】:2017-08-24 15:20:03
【问题描述】:

好的,我在 Android Studio 3.0 中创建了一个全新的项目。 Gradle 构建在这个新实例化的项目中运行良好,直到我在模块的 build.gradle

中插入以下行
dependencies {
    ...
    compile 'com.github.gabrielemariotti.cards:cardslib-core:2.1.0'
    compile 'com.github.gabrielemariotti.cards:cardslib-cards:2.1.0'
    compile 'com.github.gabrielemariotti.cards:cardslib-recyclerview:2.1.0'
}

这是我在构建日志中遇到的错误

/home/sparker0i/.gradle/caches/transforms-1/files-1.1/appcompat-v7-26.0.1.aar/e06e09188fb79d4d895b39247477d1c1/res/values/values.xml
Error:(246, 5) resource android:attr/foregroundInsidePadding is private

当我双击它时,我得到一个values.xml 文件(合并的一个),指针所在的位置

<dimen name="abc_action_bar_content_inset_material">16dp</dimen>

我的最低 SDK 版本是 16,目标 SDK 是 26。我使用的是 Android Studio 3.0 Beta 2,构建工具版本是 26.0.1。 Gradle 插件 3.0.0-beta2.

我敢打赌这是因为 Cardslib 库稍微过时了。有没有办法解决这个问题? (从依赖项中删除这些行可以正常工作)

【问题讨论】:

    标签: android cardslib


    【解决方案1】:

    尝试通过将android.enableAapt2=false 添加到您的gradle.properties 文件来禁用AAPT2

    启用 AAPT2 时构建可能会失败。此外,AAPT2 是 目前与 Robelectric 不兼容。如果您的构建因以下原因而失败 AAPT2 资源处理问题或您想使用 Roboelectric, 您可以通过设置 android.enableAapt2=false 在您的 gradle.properties 文件并通过运行重新启动 Gradle 守护程序 ./gradlew --stop 从命令行。

    参考:here

    我使用的是 Android Studio 3.0 beta 5,其中我禁用了 AAPT2,它解决了我的错误。

    更新日期:2018 年 3 月 28 日

    使用 Android Studio 3.1.1 这可能不起作用。您的图书馆之一可能正在使用 android 的私有资源。您需要找到导致错误的库并将android:attr/foregroundInsidePadding 替换为foregroundInsidePadding 并将其导入到您的项目中。

    1. 在本地克隆库存储库。
    2. 在 Android Studio 中打开存储库找到 xml&lt;attr name="android:foregroundInsidePadding" /&gt; 并将其替换为
      &lt;attr name="foregroundInsidePadding" /&gt; 并构建。
    3. 打开您的项目并将该存储库作为依赖项导入到您的项目中。
    4. 从应用级别 build.gradle 中删除库编译语句。
    5. 现在您也许可以使用AAPT2,因此请尝试将gradle.properties 中的android.enableAapt2=false 更改为true(如果存在)。

    【讨论】:

    • 我在gradle-wrapper.properties 中添加了这个,但这仍然不起作用。
    • 请将其添加到gradle.properties 而不是gradle-wrapper.properties,看看它是否有效。谢谢
    • 之后我有“错误:org.gradle.process.internal.ExecException: Process 'command '/Users/***/Library/Android/sdk/build-tools/26.0.2/ aapt'' 以非零退出值结束 1"
    • 这个错误应该主要通过 gradle clean 来解决。检查发布在 SO 上的类似问题。
    • 在我的 Android-Studio 中,没有 gradle.properties 文件。我该怎么办?
    【解决方案2】:

    这是因为您不应为此资源使用“android”命名空间。要解决此问题,请将 android:foregroundInsidePadding 替换为 foregroundInsidePadding。
    更多信息请关注Android Studio AAPT2 migration guide

    【讨论】:

    • 我在代码中的任何地方都没有使用过 android:foregroundInsidePadding 或 foregroundInsidePadding。这一切都是因为包含了那个特定的库。没有它,代码运行良好。如果我们禁用 aapt2 也没关系
    • 啊,在这种情况下,库的所有者需要更新他们的代码以删除 foregroundInsidePadding 的“android”命名空间。或者你可以 fork 他们的库,修改资源,然后构建为本地库模块。
    【解决方案3】:

    我从以下位置更新了我的依赖项:

    compile 'com.android.support:support-v4:19.1.0'
    compile 'com.android.support:appcompat-v7:19.1.0'
    

    compile 'com.android.support:support-v4:21.0.1'
    compile 'com.android.support:appcompat-v7:21.0.1'
    

    它对我有用

    【讨论】:

    • 只有在您的目标是较低版本的 Android 时才有效。就我而言,我的目标是更高版本。
    • 为什么投反对票?已经有人回复你了。它对我有用,也许也会帮助某人。有时我们有类似的问题,但接受的答案并不适用于所有人,有时我们会通过阅读未接受的答案找到对我们特定情况有所帮助的答案。这就是我分享答案的原因。
    • 如果您的目标是 API 27 等最新版本的 Android,它可能会出现运行时错误
    【解决方案4】:

    试试这个:通过在 gradle-properties 中添加 android.enableAapt2=false 来禁用 AAPT2。还要确保compileSdkVersiontargetSdkVersion 是相同的版本。我的 28 岁,使用 android studio 3.2.1。

    重建你的项目,它应该可以工作。

    【讨论】:

      猜你喜欢
      • 2018-09-25
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      • 2019-08-26
      • 2019-01-29
      • 2019-12-26
      相关资源
      最近更新 更多