【问题标题】:Error aapt: Attribute "font" already defined with incompatible format. Original attribute defined here错误 aapt:属性“字体”已使用不兼容的格式定义。此处定义的原始属性
【发布时间】:2017-12-14 14:27:21
【问题描述】:

在将 supportlibs 更新到 27.0.2 并将 compileVersion 更新到 27 后,我收到以下错误消息

Error:(252, 5) Attribute "font" already defined with incompatible format.

> /home/ralfi/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.0.1.aar/644e31926a52609e6fffe47c9016abcc/res/values/values.xml
> Error:(252, 5) Attribute "font" already defined with incompatible
> format. Error:(252, 5) Original attribute defined here.
> /home/ralfi/ProjectFolder/android-example/app/build/intermediates/res/merged/internal/debug/values/values.xml
> Error:(631) Attribute "font" already defined with incompatible format.
> Error:(607) Original attribute defined here.

还有这个:

> Error:java.util.concurrent.ExecutionException:
> com.android.ide.common.process.ProcessException: Error while executing
> process /opt/sdk/build-tools/26.0.2/aapt with arguments {package -f
> --no-crunch -I /opt/sdk/platforms/android-27/android.jar -M /home/ralfi/ProjectFolder/android-example/build/intermediates/manifests/full/internal/debug/AndroidManifest.xml
> -S /home/ralfi/ProjectFolder/android-example/build/intermediates/res/merged/internal/debug
> -m -J /home/ralfi/ProjectFolder/android-example/build/generated/source/r/internal/debug
> -F /home/ralfi/ProjectFolder/android-example/build/intermediates/res/internal/debug/resources-internalDebug.ap_
> -D /home/ralfi/ProjectFolder/android-example/build/intermediates/multi-dex/internal/debug/manifest_keep.txt
> --custom-package com.example.android -0 apk -c de,en --output-text-symbols /home/ralfi/ProjectFolder/android-example/build/intermediates/symbols/internal/debug
> --no-version-vectors}
  1. 将 supportLibs 设置回 25 也会告诉我同样的错误。
  2. 删除构建文件夹没有帮助

在我的 values/attrs.xml 中编辑与字体相关的名称仅出现如下:

 <declare-styleable name="Styleable">
        <attr name="fontFace" format="string"/>
        <attr name="underlined" format="boolean"/>
        <attr name="android:lineSpacingMultiplier"/>
        <attr name="android:textSize"/>
 </declare-styleable>

还有这个标签:

<attr name="minFontSize" format="reference|dimension"/>

Both Project and Module Gradle file

【问题讨论】:

  • 您使用的是自定义 TextView 还是 EditText?
  • 看起来 font 是一个在某处声明了两次(或多次)的变量
  • 不要在@RalfWickum 外部添加 gradle 文件。将它们直接添加到问题中

标签: android android-studio gradle aapt build-tools


【解决方案1】:

重命名自定义 TextView 类中的 type="font" 并将其更改为任何其他名称 &lt;attr name="font" format="string" /&gt;&lt;attr name="typefont" format="string" /&gt;

并在每个 xml 文件中替换它 app:typefont="ProximaNova-Light.ttf"

【讨论】:

  • 在哪里可以找到替换内容的文件?我搜索了所有 /res 并没有出现“字体”
  • 它将是 attrs.xml
【解决方案2】:

在您的attrs.xml 中找到以下属性

<attr name="font" format="string" />

并将字体替换为其他名称,例如&lt;attr name="font_name" format="string" /&gt;

之后将每个 xml 文件中的 app:font 替换为 app:font_name


为什么会出现这个错误?

将android版本nougat更新为oreo后,有构建功能Downloadable Fonts

所以该字体已经定义了不兼容的格式。

有关更多信息,请参阅此链接。

https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts.html

希望对您有所帮助。

【讨论】:

  • 请分享您的 gradle 文件。
【解决方案3】:

发生这种情况的原因可能很少。第一个是您定义了自己的字体属性。但根据您粘贴的代码,不是这样。

第二个可能是您更新了依赖项。由于 android gradle 插件无法正确处理这种情况,可能是该属性与旧版本的库冲突。如果是这种情况,./gradlew clean 将解决问题。

第三个选项可能是您的依赖项之一是定义字体属性。您是否包含任何其他使用字体的库?

我记得的最后一个选项是其他一些库正在导入不同版本的 appcompat 库。这不是 likley,但您可以通过在终端中运行 ./gradlew :app:dependencies 来查看。

编辑

aapt2 是在最新版本的 androud 构建系统中引入的。也许这就是问题所在。您可以通过将android.enableAapt2=false 放入您的gradle.properties 文件来禁用它,以验证这是否是问题所在。

【讨论】:

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