You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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插件代码中引用的该常量无法被识别。

具体步骤

  1. 升级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)

  2. 适配Firebase插件版本
    安装支持API 31的cordova-plugin-firebasex版本,例如:

    plugman install --platform android --project ./platforms/android/ --plugin cordova-plugin-firebasex@16.0.0 --plugins_dir ./plugins/
    

    (版本号参考插件官方文档确认)

  3. 明确编译SDK版本
    在config.xml的Android平台配置中添加以下偏好设置,指定编译SDK和构建工具版本:

    <platform name="android">
        <!-- 保留原有配置 -->
        <preference name="android-compileSdkVersion" value="31" />
        <preference name="android-buildToolsVersion" value="31.0.0" />
    </platform>
    
  4. 清理并重新构建
    执行命令清理缓存,重新安装依赖并构建:

    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:01:04