Cordova构建Android应用时':app:compileDebugJavaWithJavac'任务执行失败求助
Cordova构建Android应用时出现
:app:compileDebugJavaWithJavac错误 环境与配置信息
- Cordova版本:11.0.0
- Cordova已安装平台:android 9.1.0、ios 5.1.1
- Java版本:1.8.0_341
- Npm版本:6.14.15
- Node版本:14.18.1
- JAVA_HOME路径:
/Library/Java/JavaVirtualMachines/jdk1.8.0_341.jdk/Contents/Home - Android SDK平台:API 29至32
- Android SDK工具:API 29至32
- 运行设备:搭载M1芯片的MacBook Pro,系统为macOS Ventura 13.1
相关配置文件
config.xml
<?xml version='1.0' encoding='utf-8'?> <widget android-packageName="com.test.testapp" ios-CFBundleIdentifier="com.test.testapp" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0" xmlns:android="http://schemas.android.com/apk/res/android"> <name>Test App</name> <description> Just a Test App. </description> <author email="test@test.com" href="http://test.com"> Test Team </author> <content src="sourcePath"/> <plugin name="cordova-plugin-whitelist" spec="1"/> <access origin="*"/> <allow-intent href="http://*/*"/> <allow-intent href="https://*/*"/> <allow-intent href="tel:*"/> <allow-intent href="sms:*"/> <allow-intent href="mailto:*"/> <allow-intent href="geo:*"/> <allow-navigation href="https://*/*" /> <preference name="Orientation" value="portrait"/> <platform name="android"> <icon src="../assets/android/icon.png"/> <allow-intent href="market:*"/> <preference name="android-targetSdkVersion" value="31"/> <preference name="AndroidXEnabled" value="true" /> <config-file parent="/manifest/application" target="AndroidManifest.xml"> <meta-data android:name="com.google.android.gms.wallet.api.enabled" android:value="true" /> </config-file> <edit-config file="AndroidManifest.xml" target="/manifest/application/activity" mode="merge"> <activity android:exported="true"/> </edit-config> </platform> <platform name="ios"> <feature name="CDVWKWebViewEngine"> <param name="ios-package" value="CDVWKWebViewEngine"/> </feature> <allow-navigation href="*://js.stripe.com/*"/> <allow-navigation href="*://stripe.com/*"/> <allow-intent href="itms:*"/> <allow-intent href="itms-apps:*"/> <edit-config target="NSLocationWhenInUseUsageDescription" file="*-Info.plist" mode="merge"> <string>Needs for locating user's order delivery address</string> </edit-config> <edit-config target="NSLocationAlwaysUsageDescription" file="*-Info.plist" mode="merge"> <string>Needs for locating user's order delivery address</string> </edit-config> <preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine"/> <preference name="StatusBarOverlaysWebView" value="false"/> <preference name="StatusBarBackgroundColor" value="000000"/> <preference name="WKWebViewOnly" value="true"/> </platform> <preference name="SplashScreenDelay" value="0"/> <engine name="android" spec="<9.0.0"/> <engine name="ios" spec="~5.1.1"/> </widget>
package.json
{ "name": "helloworld", "displayName": "HelloCordova", "version": "1.0.0", "description": "A sample Apache Cordova application that responds to the deviceready event.", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [ "ecosystem:cordova" ], "author": "Apache Cordova Team", "license": "Apache-2.0", "dependencies": { "cordova-android": "^9.0.0", "cordova-ios": "^5.1.1", "cordova-plugin-device": "^2.0.3", "cordova-plugin-geolocation": "^4.0.1", "cordova-plugin-inappbrowser": "^3.2.0", "cordova-plugin-network-information": "^2.0.1", "cordova-plugin-splashscreen": "^5.0.2", "cordova-plugin-statusbar": "^2.4.2", "cordova-plugin-whitelist": "1.3.4", "cordova-plugin-wkwebview-engine": "^1.2.1", "cordova-plugin-x-toast": "^2.7.3", "es6-promise-plugin": "^4.2.2", "xml-js": "^1.6.11" }, "devDependencies": {}, "cordova": { "plugins": { "cordova-plugin-splashscreen": {}, "cordova-plugin-whitelist": {}, "cordova-plugin-wkwebview-engine": {}, "cordova-plugin-x-toast": {}, "cordova-plugin-geolocation": {}, "cordova-plugin-network-information": {}, "cordova-plugin-inappbrowser": {}, "cordova-plugin-statusbar": {}, "cordova-plugin-device": {} }, "platforms": [ "android", "ios" ] } }
generate_builds.sh
### Constants # Must be equal to <widget> -> <name> in app/config.xml file APP_NAME="Test App" ### Operations # navigate to app/ directory cd app/ # delete all generated folders rm -rf platforms/ node_modules/ # run npm install to make sure that new libraries are installed npm install # this command will add all plugins listend in package.json file in /plugins folder and also generate ios and android platforms cordova prepare # Add Plugman plugins - we use Plugman to install some plugins only for android platform and some only for iOS platform. In this way we avoid plugin conflicts. # IMPORTANT: Plugins installed with Plugman are not listed in the package.json neither in config.xml files # for ios platform plugman install --platform ios --project ./platforms/ios/ --plugin cordova-plugin-firebasex --plugins_dir ./plugins/ plugman install --platform ios --project ./platforms/ios/ --plugin cordova-plugin-stripe --plugins_dir ./plugins/ plugman install --platform ios --project ./platforms/ios/ --plugin cordova-plugin-dynamic-applepay-stripe --plugins_dir ./plugins/ # for android platform plugman install --platform android --project ./platforms/android/ --plugin cordova-plugin-firebasex --plugins_dir ./plugins/ plugman install --platform android --project ./platforms/android/ --cordova-plugin-androidx --plugins_dir ./plugins/ plugman install --platform android --project ./platforms/android/ --cordova-android-play-services-gradle-release --plugins_dir ./plugins/ plugman install --platform android --project ./platforms/android/ --plugin cordova-plugin-apple-pay-google-pay --plugins_dir ./plugins/ # Replace all iOS image folder with the one from /app/assets/ios/Images.xcassets # delete generated folders rm -rf platforms/ios/"$APP_NAME"/Images.xcassets/ cp -r ../assets/ios/Images.xcassets/ platforms/ios/"$APP_NAME"/Images.xcassets/ # Add firebase push notification files in ios and android platforms # ios rm -f platforms/ios/"$APP_NAME"/Resources/GoogleService-Info.plist cp ../assets/ios/firebase/GoogleService-Info.plist platforms/ios/"$APP_NAME"/Resources/GoogleService-Info.plist # android rm -f platforms/android/app/google-services.json cp ../assets/android/firebase/google-services.json platforms/android/app/google-services.json # Replace Google Pay plugin files in android platform. rm -f platforms/android/app/src/main/java/com/plugin/googlepay/ApplePayGooglePay.java cp ../assets/android/gpay/ApplePayGooglePay.java platforms/android/app/src/main/java/com/plugin/googlepay/ApplePayGooglePay.java
错误详情
> Task :app:compileDebugJavaWithJavac /Users/userName/Documents/Projects/TestApp/app/platforms/android/app/src/main/java/org/apache/cordova/firebase/FirebasePluginMessagingService.java:261: error: cannot find symbol if(getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.S && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { ^ symbol: variable S location: class VERSION_CODES /Users/userName/Documents/Projects/TestApp/app/platforms/android/app/src/main/java/org/apache/cordova/firebase/FirebasePluginMessagingService.java:261: error: cannot find symbol if(getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.S && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { ^ symbol: variable S location: class VERSION_CODES Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: /Users/userName/Documents/Projects/TestApp/app/platforms/android/app/src/main/java/org/apache/cordova/firebase/FirebasePlugin.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 2 errors > Task :app:compileDebugJavaWithJavac FAILED FAILURE: Build failed with an exception.
解决办法
错误原因
Build.VERSION_CODES.S是Android API 31(Android 12)对应的版本常量,当前使用的Cordova Android 9.x版本默认编译SDK版本低于API 31,导致Firebase插件代码中引用的该常量无法被识别。
具体步骤
升级Cordova Android平台
Cordova Android 9.x对Android 12(API 31)支持有限,升级到10.x及以上版本:cordova platform remove android cordova platform add android@10.1.2(可根据插件兼容性选择更高稳定版本,如11.x)
适配Firebase插件版本
安装支持API 31的cordova-plugin-firebasex版本,例如:plugman install --platform android --project ./platforms/android/ --plugin cordova-plugin-firebasex@16.0.0 --plugins_dir ./plugins/(版本号参考插件官方文档确认)
明确编译SDK版本
在config.xml的Android平台配置中添加以下偏好设置,指定编译SDK和构建工具版本:<platform name="android"> <!-- 保留原有配置 --> <preference name="android-compileSdkVersion" value="31" /> <preference name="android-buildToolsVersion" value="31.0.0" /> </platform>清理并重新构建
执行命令清理缓存,重新安装依赖并构建:rm -rf platforms/android node_modules npm install cordova prepare android cordova build android
可选修复
如果仍有问题,手动修改platforms/android/app/build.gradle文件,确保compileSdkVersion与targetSdkVersion一致:
android { compileSdkVersion 31 defaultConfig { targetSdkVersion 31 // 其他原有配置 } }
内容的提问来源于stack exchange,提问作者Kaloyan
相关产品推荐
相关产品推荐

