Android Studio Narwhal 4:创建空应用报错 —— AAPT2 process unexpectedly exit 的排查与解决

大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。
图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:华为HDE/HDG
我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。
展菲:您的前沿技术领航员
👋 大家好,我是展菲!
📱 全网搜索“展菲”,即可纵览我在各大平台的知识足迹。
📣 公众号“Swift社区”,每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。
💬 微信端添加好友“fzhanfei”,与我直接交流,不管是项目瓶颈的求助,还是行业趋势的探讨,随时畅所欲言。
📅 最新动态:2025 年 3 月 17 日
快来加入技术社区,一起挖掘技术的无限潜能,携手迈向数字化新征程!
文章目录
- 前言
- 问题回顾
- 一步步的“从快到深”修复建议
- 1) 清空 Gradle 缓存 + 重启 Android Studio(最常见、最快)
- 2) 刷新依赖、强制重新下载(`--refresh-dependencies`)
- 3) 检查杀软 / 文件锁 / Windows 特殊问题
- 4) 检查 Android SDK Build-Tools / aapt2 版本兼容性
- 5) 增大 Gradle / aapt2 的内存(万一是 OOM)
- 6) 如果报错特定到某个 PNG(资源损坏),尝试定位并替换该资源
- 7) 作为最后手段:收集日志并上报或搜索相同版本的已知 issue
- 为什么这些方法能解决问题
- 可运行的最小 Demo
- 实用调试命令合集
- 如果以上都不能解决,收集这些信息发帖求助
- 快速总结
前言
最近你在 Android Studio Narwhal 4 创建了一个空项目,运行就报这个错误:
AAPT2 aapt2-8.13.0-13719691-windows Daemon #0: Unexpected error during compile '...notification_oversize_large_icon_bg.png', attempting to stop daemon.
这是个常见但不太好定位的错误:看起来是 AAPT2 在处理 aar 里的 PNG 资源时崩溃了。下面我把可能的原因、一步步的检查与修复方案,以及能直接运行/验证的 demo 和脚本都放齐了,方便你直接试。
我在下面的关键建议引用了社区/issue 实例:清理 Gradle 缓存是常见且有效的快速修复办法,还有一些 buildserver / CI 中也出现了类似 aapt2 在处理 PNG 时报错的案例,可参考。(Stack Overflow)
问题回顾
-
Android Studio:Narwhal 4(即比较新的 Studio 版本)
-
Gradle wrapper:
gradle-9.2.0 -
compileSdk / targetSdk = 36
-
报错集中在
:app:processDebugResources,进一步是AarResourcesCompilerTransform在 transformandroidx.core:core:1.13.1的资源(notification_oversize_large_icon_bg.png)编译时报错并停止 aapt2 daemon。 -
你已尝试网上很多方法但仍未解决。
从错误信息看,核心是 AAPT2 在编译某个 PNG 时“意外退出”。社区里的常见有效方法有:清理 / 删除 Gradle 缓存、Invalidate Caches / Restart、检查本地 Gradle 缓存是否损坏、排查杀毒/锁文件、检查构建工具版本等。(Stack Overflow)
一步步的“从快到深”修复建议
下面把最常见且实用的修复按优先级列出,按顺序做,通常前三条就能解决大多数因缓存或临时文件损坏导致的 aapt2 崩溃问题。
1) 清空 Gradle 缓存 + 重启 Android Studio(最常见、最快)
许多报 AAPT2 的问题是 Gradle 缓存或 transform 中间产物损坏导致的。可以先删掉 .gradle\caches(Windows)或 ~/.gradle/caches(Linux/Mac),然后 Android Studio 执行 Invalidate Caches / Restart。这个方法在社区帖里多次验证有效。(Stack Overflow)
Windows PowerShell(管理员)示例:
# 关闭 Android Studio
Stop-Process -Name studio -ErrorAction SilentlyContinue# 删除 .gradle 缓存(路径按你的用户目录调整)
Remove-Item -Recurse -Force "$env:USERPROFILE\.gradle\caches"# (可选)删除项目里的 .gradle 和 build 目录
Remove-Item -Recurse -Force ".gradle"
Remove-Item -Recurse -Force "app\build"# 重新打开 Android Studio,执行 Build -> Clean Project -> Rebuild Project
Linux / macOS:
# 退出 Android Studio,然后
rm -rf ~/.gradle/caches
rm -rf <your-project>/.gradle
rm -rf <your-project>/app/build
# 打开 Android Studio -> File -> Invalidate Caches / Restart
为什么:AAPT2 的中间产物(transform 的 workspace)存放在 Gradle cache 里,如果某个资源在缓存里损坏或 transform 中间状态不对,AAPT2 会在处理该文件时崩溃。清缓存能让构建重新下载 AAR 和资源并重新 transform。(Stack Overflow)
2) 刷新依赖、强制重新下载(--refresh-dependencies)
在项目目录运行 gradle 刷新依赖,避免使用损坏的缓存 artifact:
./gradlew clean assembleDebug --refresh-dependencies --no-daemon --stacktrace
--stacktrace 会打印更完整的堆栈,便于进一步排查。
3) 检查杀软 / 文件锁 / Windows 特殊问题
在 Windows 下,杀毒软件或文件索引程序可能会锁定 Gradle 缓存里的文件,导致 aapt2 读写异常或崩溃。常见做法:
-
临时关闭杀毒软件(或把
C:\Users\<你>\.gradle\caches加入白名单); -
检查是否有权限问题(以管理员身份运行 Android Studio);
-
检查路径过长问题(Windows 下 path length),把项目放到
C:\projects\myapp这样短路径试试。
4) 检查 Android SDK Build-Tools / aapt2 版本兼容性
虽然 AAPT2 是随 Android Gradle Plugin (AGP) 提供,但如果 build-tools 或 AGP 版本出现兼容问题,也可能触发 aapt2 崩溃。建议:
-
在 SDK Manager 中确保已安装 Android SDK Build-Tools(对应 API 36 的推荐版本);
-
确保使用的 JDK 是 Java 11(你的
compileOptions已设 Java 11,确认 Android Studio 使用的 JDK 也是 11)。
你可以在 gradle.properties 或 Studio 配置里设置 org.gradle.java.home 指向 JDK 11。
5) 增大 Gradle / aapt2 的内存(万一是 OOM)
有时候 aapt2 在处理大量或复杂资源(某些 PNG)时会因内存问题崩溃。可以在 gradle.properties 中增加 JVM 内存:
org.gradle.jvmargs=-Xmx4g -Dfile.encoding=UTF-8
注意不要把内存设得超过机器可用内存。
6) 如果报错特定到某个 PNG(资源损坏),尝试定位并替换该资源
错误中指出具体文件 notification_oversize_large_icon_bg.png 在 androidx.core:core:1.13.1 aar 里。通常这是库内资源,你不应该直接修改库。但可以:
-
手动解压该 aar(位于 Gradle 缓存),查看该 PNG 是否损坏;
-
如果确实损坏,可以删除该 aar 缓存,强制重新下载(第 1、2 步已涵盖);
-
如果你有公司镜像/离线仓库,确认仓库里的 artifact 没问题。
7) 作为最后手段:收集日志并上报或搜索相同版本的已知 issue
如果以上步骤都没解决,收集完整构建日志(带 --stacktrace --debug),并把 aapt2 的崩溃堆栈贴到 Issue Tracker / StackOverflow / Android Issue Tracker。社区里也有类似 CI 报错案例(aapt2 在 Linux/Windows 上处理某些 PNG 崩溃的记录),能作为参考。(about.gitlab.com)
为什么这些方法能解决问题
-
Gradle 缓存损坏或中间 transform 文件损坏,是 aapt2 崩溃的高频原因;删除缓存通常能复原。(Stack Overflow)
-
Windows 文件锁、杀毒或路径问题会导致 aapt2 无法正常读取资源,从而退出。
-
aapt2 有时会因为 OOM 或资源损坏崩溃,增加内存或替换资源可以避免。
-
如果是库 artifact 本身损坏(rare),需要重新下载或从其他源获取正确的 artifact。(monitor.f-droid.org)
可运行的最小 Demo
下面给出一个最小 build.gradle(Gradle Kotlin DSL 或 Groovy 都行),以及 gradle-wrapper.properties。你可以新建一个项目,直接替换成下面配置来验证构建是否成功(目的是排除你项目里其他自定义配置的问题)。
settings.gradle(Groovy):
rootProject.name = 'MyApp'
include ':app'
app/build.gradle(Groovy 最小示例;把你的 libs alias 风格先去掉以便排查):
plugins {id 'com.android.application' version '8.2.0' apply falseid 'org.jetbrains.kotlin.android' version '1.9.0' apply false
}apply plugin: 'com.android.application'
apply plugin: 'org.jetbrains.kotlin.android'android {namespace 'com.example.myapplication'compileSdk 36defaultConfig {applicationId "com.example.myapplication"minSdk 24targetSdk 36versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled false}}compileOptions {sourceCompatibility JavaVersion.VERSION_11targetCompatibility JavaVersion.VERSION_11}kotlinOptions {jvmTarget = '11'}buildFeatures {compose true}
}dependencies {implementation 'androidx.core:core:1.13.1'implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.1'implementation 'androidx.activity:activity-compose:1.7.2'implementation platform('androidx.compose:compose-bom:2024.09.00')implementation 'androidx.compose.ui:ui:1.6.0'implementation 'androidx.compose.material3:material3:1.1.0'testImplementation 'junit:junit:4.13.2'androidTestImplementation 'androidx.test.ext:junit:1.1.6'
}
gradle-wrapper.properties(保持你当前的 gradle-9.2.0):
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip
运行:
./gradlew clean assembleDebug --refresh-dependencies --no-daemon --stacktrace
如果最小项目能成功构建,说明问题更可能出在你原项目的某个插件、libs alias 或 buildSrc/catalog 配置上;如果最小项目也失败,那问题更可能和本地 Gradle 缓存 / aapt2 二进制 / SDK 安装 / 系统环境相关。
实用调试命令合集
- 强制刷新依赖并看详细日志:
./gradlew clean assembleDebug --refresh-dependencies --no-daemon --stacktrace --info
- 只删除特定缓存文件夹(Windows 示例):
# 删除 specific transformed workspace(按报错路径定位)
Remove-Item -Recurse -Force "$env:USERPROFILE\.gradle\caches\9.2.0\transforms\7cda8e4fd21abbb6eb18516f272159af"
- 查看 aapt2 可执行文件(AGP 会通过 gradle cache 提供 aapt2):
# 在 Linux/macOS 上
find ~/.gradle -type f -name "aapt2*"# 在 Windows PowerShell
Get-ChildItem -Path "$env:USERPROFILE\.gradle" -Recurse -Filter "aapt2*"
如果以上都不能解决,收集这些信息发帖求助
-
完整的错误堆栈(用
--stacktrace --info或--debug); -
gradle.properties、build.gradle(project + app)、gradle-wrapper.properties; -
java -version(确认 JDK 版本); -
运行 OS(Windows 版本 / mac / linux)和 Android Studio 版本;
-
是否使用公司内部 Maven 镜像或离线仓库;
-
是否能复现在最小 demo(如上示例)上。
把这些信息提供给 StackOverflow / Android Issue Tracker / Android Studio 问题反馈,开发者或社区能更快定位 root cause。社区里已有类似 CI/构建服务遇到 aapt2 在处理 notification_oversize_large_icon_bg.png 时崩溃的 issue,可作为参考。(about.gitlab.com)
快速总结
-
先删
~/.gradle/caches+ 项目.gradle/build,Invalidate Caches / Restart Studio。(Stack Overflow) -
./gradlew clean assembleDebug --refresh-dependencies --stacktrace(观察是否重现)。 -
关杀毒或把
.gradle\caches加白名单;尝试短路径(如 C:\proj)避免 Windows 路径问题。 -
检查 JDK 11、SDK Build-tools 安装与 AGP 版本是否匹配;增加
org.gradle.jvmargs内存(如必要)。 -
若依然失败,收集
--stacktrace --debug日志并上报社区 / issue。
