Android Studio 3.3 不允许 SDK 版本低于 26 的自适应图标

Posted

技术标签:

【中文标题】Android Studio 3.3 不允许 SDK 版本低于 26 的自适应图标【英文标题】:Android Studio 3.3 disallows adaptive icons for SDK version less than 26 【发布时间】:2019-06-08 20:45:17 【问题描述】:

刚刚从 android Studio 3.2.1 升级到 3.3。以前我的项目 - 针对 SDK v28 - 构建没有问题,现在我得到这个构建错误:

出了什么问题:任务 ':app:processDebugResources' 执行失败。

Android 资源链接失败 C:\app\src\main\res\mipmap-anydpi-v25\ic_launcher_round.xml: 错误: 元素要求 sdk 版本至少为 26。 错误:链接文件资源失败。

显然,我在mipmap-anydpi-v25 文件夹中有一个<adaptive-icon> 资源。

那么,哪个 AS 版本正确处理了这个问题; 3.2.1 还是 3.3?我应该删除我的v25 图标吗?我以为 Lollipop 支持这种类型的图标...

【问题讨论】:

最低支持的 API 与最低版本的 SDK 无关。只需增加使用的 SDK 的编译版本,并使缓存失效。 targetSdkVersion 28 在我的 gradle 文件中。还将 v28 SDK 更新到修订版 6。仍然是同样的问题... 我说的不是目标sdk,而是编译sdk 嗯,其实我也设置了compileSdkVersion 28 这里一样,我的编译和目标都设置为27 【参考方案1】:

哪个 AS 版本正确处理了这个问题; 3.2.1 还是 3.3?

大概是 3.3,因为 adaptive icons were added in Android 8.0(API 级别 26)。

我应该删除我的 v25 图标吗?

将目录更改为mipmap-anydpi-v26/,您仍然可以将该图标用于Android 8.0+。如果您的 minSdkVersion 低于此值(我假设是这样),则您将需要为旧设备的图标实现替代实现。

我认为 Lollipop 支持这种类型的图标...

Lollipop 是 Android 5.x,API 级别 21-22。您的 -v25 目录不会用于这些 API 级别。

【讨论】:

看起来我设法在 3.2 中欺骗了编译器。如here所述,进行了一些资源重定向。 @l33t:操作系统可能对<adaptive-icon> 提供了未记录的支持。要么,要么 AS 3.2 有点忽略了你的指示,并生成了一些工作,而没有试图在 Android 7.1 上强加一个自适应图标。由于 Android 7.1 及更早版本没有对 <adaptive-icon> 的记录支持,因此 AS 3.3 强制您执行的操作应该会降低某些设备因意外资源类型而阻塞的可能性。【参考方案2】:

对我来说,在 AS 3.4 中,我必须:

我无法使用 add New |自适应图标导致的图像资产直到我从列表中删除 SDK 25 的最后一步,即使在尝试正确选择项目 SDK 和构建目标之后也是如此。

我尝试了几件事,这是使它对我有用的最后一步。我不知道这是否是我的配置中的特定内容,但这让我克服了它。

【讨论】:

太棒了,看来你也在学习 Angela Yu Udemy 的课程【参考方案3】:

我遇到了同样的问题,原因是我手动弄乱了文件,但直到更新我才注意到它。 在我的情况下,更新到 AS 3.3 后,冲突的文件是:

drawable/ic_launcher_background.xml drawable-v24/ic_launcher_foreground.xml

虽然通过更改 app/build.gradle 上的 min sdk "minSdkVersion 26" 可以无错误地构建 AS,但它对于发布目的并不实用。 简单快速的解决方案是:

新建一个空白项目 复制完全相同的文件 并在冲突项目中替换它们

【讨论】:

【参考方案4】:

当 SDK 中的 API 少于 26 时会显示错误。

从 SDK 中删除旧 API:

    点击文件。 选择项目结构。 在平台设置中选择 SDK。 在右侧检查是否有任何较旧的 API 显示 API 26。 选择旧 API 并单击删除 (-) 按钮。

删除所有比 API 26 更旧的 API。 点击应用,确定。

它会起作用的:)

【讨论】:

【参考方案5】:

这是我修复它的方法。

    文件 -> 项目结构 选择模块 将编译 SDK 更改为 API 26 以上(我认为是可选的) 选择默认配置选项卡并将目标 SDK 版本更改为 API 26 以上

【讨论】:

以上是关于Android Studio 3.3 不允许 SDK 版本低于 26 的自适应图标的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 3.3,Advanced Profiling 对所选进程不可用

Android (Studio) FileNotFoundException 但文件在 SD 卡上

Android Studio 3.3+ 每次打开项目出现AppCompatActivity等组件找不到的解决办法

如何使用 android studio 从应用程序中的内部或外部存储(SD 卡)读取文件?

更新后Android Studio 3.3到3.4 AAPT2生成错误

在Android Studio中将Gradle从3.3升级到4.1后出错