升级Cordova环境后编译报错:找不到drawable/notification_icon资源
升级Cordova环境后Android编译报错:找不到drawable/notification_icon资源
错误详情
编译应用时触发如下错误:
Execution failed for task ':app:processDebugResources'. > A failure occurred while executing com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask$TaskAction > Android resource linking failed ERROR: C:\Users\rolin\dev\myApp\platforms\android\app\src\main\AndroidManifest.xml:34:9-140: AAPT: error: resource drawable/notification_icon (aka com.myApp:drawable/notification_icon) not found.
已确认所有资源文件存在,甚至重新保存文件确保未损坏,但错误依旧无法消除。
关键配置内容
AndroidManifest.xml 核心片段
<?xml version='1.0' encoding='utf-8'?> <manifest android:hardwareAccelerated="true" android:versionCode="5020" android:versionName="0.50.20" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <!-- 省略其他非关键配置 --> <application android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true"> <!-- 省略其他组件配置 --> <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/notification_icon" /> </application> </manifest>
环境升级记录
- cordova-cli:从11.1.0升级到v12.0
- cordova-android:从11.0升级到v13.0
- Node.js:从v14.22升级到v22.16
- JDK:从11升级到v17
- 本地Gradle:从6.9.1升级到7.6.5(已知cordova-android自带Gradle,此升级非必需)
当前环境信息
Ionic: Ionic CLI : 6.17.0 (C:\Users\rolin\AppData\Roaming\npm\node_modules\@ionic\cli) Ionic Framework : ionic1 1.3.4 @ionic/v1-toolkit : 3.2.20 Cordova: Cordova CLI : 12.0.0 (cordova-lib@12.0.2) Cordova Platforms : android 13.0.0 Cordova Plugins : no whitelisted plugins (8 plugins total) Utility: cordova-res : 0.15.4 native-run : 1.7.1 System: Android SDK Tools : 26.1.1 (C:\Users\rolin\AppData\Local\Android\sdk) NodeJS : v22.16.0 (C:\Program Files\nodejs\node.exe) npm : 11.4.1 OS : Windows 10
已移除大部分插件仅保留核心依赖,仍无法解决问题。此前使用cordova-android v11及以下版本(基于Ionic v1)时一切正常,升级后出现该资源找不到的问题,怀疑是版本兼容性导致。
解决方法
1. 核对资源文件的位置和命名
- 确认
notification_icon文件在platforms/android/app/src/main/res/下的各个drawable-xxx(如drawable-hdpi、drawable-xhdpi)目录中都有对应尺寸版本,文件名必须全小写、无空格或特殊字符。 - 如果图标实际放在
mipmap目录,把Manifest里的@drawable/notification_icon改成@mipmap/notification_icon。
2. 彻底清理并重建项目
执行以下命令重置Android平台:
cordova clean android cordova platform remove android cordova platform add android@13.0.0 cordova build android
3. 按cordova-android 13规则管理资源
cordova-android 13的资源打包逻辑有变化,不要直接修改platforms目录里的文件,而是在项目根目录创建res/android/drawable文件夹,把图标放进去,然后在config.xml里配置自动复制:
<platform name="android"> <resource-file src="res/android/drawable/notification_icon.png" target="app/src/main/res/drawable/notification_icon.png" /> <!-- 其他密度的图标比如drawable-hdpi/notification_icon.png也要对应添加 --> </platform>
4. 修复Firebase插件的兼容性问题
旧版Cordova Firebase插件可能不支持cordova-android 13:
- 升级插件到最新版,或者换成
cordova-plugin-firebasex替代旧插件。 - 如果是插件自动生成的Manifest配置出错,可以在config.xml里强制修改默认通知图标:
<platform name="android"> <edit-config file="AndroidManifest.xml" target="/manifest/application/meta-data[@android:name='com.google.firebase.messaging.default_notification_icon']" mode="merge"> <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@mipmap/ic_launcher" /> </edit-config> </platform>
5. 确保JDK版本配置正确
在platforms/android/gradle.properties里指定JDK 17路径,避免Gradle找不到正确的JDK:
org.gradle.java.home=C:\\Program Files\\Java\\jdk-17
内容的提问来源于stack exchange,提问作者rolinger
相关产品推荐
相关产品推荐

