在API < 21上更新build.gradle后,使用矢量图停止工作的项目。

7

我有一个正在运行的项目。

  • minSdkVersion 17
  • com.android.tools.build:gradle:2.3.3
  • gradle 4.1
  • Android Studio 3 Canary 6

我的gradle文件中有:

defaultConfig {
        vectorDrawables.useSupportLibrary = true
        vectorDrawables.generatedDensities = []
}

我也呼叫活动:
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)

应用程序运行完美。现在更改为:

  • com.android.tools.build:gradle:3.0.0-alpha6
  • 添加到repositories google()

执行gradle clean assembleDebug

在API > 20的设备上,应用程序可以继续工作。但是对于API < 21(谷歌Android模拟器),启动应用程序时会崩溃。 我在logcat中看到错误:Resources$NotFoundException:Resource ID #0x7f080058(0x7f080058是可绘制的abc_vector_test)。

为什么?

更新2017-07-19:已修复并发布在com.android.tools.build:gradle:3.0.0-alpha7中。


如果尚未在https://issuetracker.google.com/issues/new?component=190923上开启,请提交一个错误报告。 - Androiderson
已完成:https://issuetracker.google.com/issues/63646848 - Yura Shinkarev
3个回答

8

我需要添加到gradle.properties中的行:

android.enableAapt2=false

并且它解决了我的错误。

更新 2017-07-19: 它已经在com.android.tools.build:gradle:3.0.0-alpha7中修复并发布。


1

从版本3开始,Gradle插件使用新的AAPT,但存在一些错误。
在阅读漏洞跟踪器上的一些问题后,我发现Gradle有一个完全禁用AAPT2的选项:android.enableAapt2=false

此外,从alpha5的发布说明中可以看到:

AAPT2。我们正在继续稳定AAPT2,这使得增量资源处理成为可能。如果由于资源处理问题而导致构建失败,请向我们发送错误报告。要暂时禁用AAPT,请在您的gradle.properties文件中设置android.enableAapt2=false。
Roboelectric目前与AAPT2不兼容。


0

我也遇到了同样的问题,将 Android Studio 降级到之前的 canary5 版本,并在 build.gradle 中写入以下内容:

buildscript {
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-alpha5'
    ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接