Cordova Android 项目无法编译

10

Cordova版本:4.3.0

Java版本:“1.8.0_40” 64位

操作系统:OS X 10.10.2

Ant版本:1.9.4

输入图像描述

我正在使用的目标Android SDK是19。

当我在platforms/android/CordovaLib文件夹中运行“ant release”时,会出现以下带有错误的输出:

Buildfile: .../platforms/android/CordovaLib/build.xml

-set-mode-check:

-set-release-mode:

-release-obfuscation-check:
     [echo] proguard.config is ${proguard.config}

-pre-build:

-check-env:
 [checkenv] Android SDK Tools Revision 24.1.2
 [checkenv] Installed at /Users/.../Library/Android/sdk

-setup:
     [echo] Project Name: MainActivity
  [gettype] Project Type: Android Library

-build-setup:
[getbuildtools] Using latest Build Tools: 21.1.2
     [echo] Resolving Build Target for MainActivity...
[gettarget] Project Target:   Android 4.4.2
[gettarget] API level:        19
     [echo] ----------
     [echo] Creating output directories if needed...
    [mkdir] Created dir: .../platforms/android/CordovaLib/bin/rsObj
    [mkdir] Created dir: .../platforms/android/CordovaLib/bin/rsLibs
     [echo] ----------
     [echo] Resolving Dependencies for MainActivity...
[dependency] Library dependencies:
[dependency] No Libraries
[dependency] 
[dependency] ------------------
     [echo] ----------
     [echo] Building Libraries with 'release'...
   [subant] No sub-builds to iterate on

-code-gen:
[mergemanifest] No changes in the AndroidManifest files.
     [echo] Handling aidl files...
     [aidl] No AIDL files to compile.
     [echo] ----------
     [echo] Handling RenderScript files...
     [echo] ----------
     [echo] Handling Resources...
     [aapt] No changed resources. R.java and Manifest.java untouched.
     [echo] ----------
     [echo] Handling BuildConfig class...
[buildconfig] Generating BuildConfig class.

-pre-compile:

-compile:
    [javac] Compiling 98 source files to .../platforms/android/CordovaLib/bin/classes
    [javac] warning: [options] source value 1.5 is obsolete and will be removed in a future release
    [javac] warning: [options] target value 1.5 is obsolete and will be removed in a future release
    [javac] warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
    [javac] .../platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewClient.java:35: error: cannot find symbol
    [javac] import android.webkit.ClientCertRequest;
    [javac]                      ^
    [javac]   symbol:   class ClientCertRequest
    [javac]   location: package android.webkit
    [javac] .../platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewClient.java:145: error: cannot find symbol
    [javac]     public void onReceivedClientCertRequest (WebView view, ClientCertRequest request)
    [javac]                                                            ^
    [javac]   symbol:   class ClientCertRequest
    [javac]   location: class CordovaWebViewClient
    [javac] .../platforms/android/CordovaLib/src/org/apache/cordova/CordovaChromeClient.java:342: error: cannot find symbol
    [javac]     public boolean onShowFileChooser(WebView webView, final ValueCallback<Uri[]> filePathsCallback, final WebChromeClient.FileChooserParams fileChooserParams) {
    [javac]                                                                                                                          ^
    [javac]   symbol:   class FileChooserParams
    [javac]   location: class WebChromeClient
    [javac] .../platforms/android/CordovaLib/src/org/apache/cordova/CordovaClientCertRequest.java:25: error: cannot find symbol
    [javac] import android.webkit.ClientCertRequest;
    [javac]                      ^
    [javac]   symbol:   class ClientCertRequest
    [javac]   location: package android.webkit
    [javac] .../platforms/android/CordovaLib/src/org/apache/cordova/CordovaClientCertRequest.java:32: error: cannot find symbol
    [javac]     private final ClientCertRequest request;
    [javac]                   ^
    [javac]   symbol:   class ClientCertRequest
    [javac]   location: class CordovaClientCertRequest
    [javac] .../platforms/android/CordovaLib/src/org/apache/cordova/CordovaClientCertRequest.java:34: error: cannot find symbol
    [javac]     public CordovaClientCertRequest(ClientCertRequest request) {
    [javac]                                     ^
    [javac]   symbol:   class ClientCertRequest
    [javac]   location: class CordovaClientCertRequest
    [javac] .../platforms/android/CordovaLib/src/org/apache/cordova/CordovaChromeClient.java:340: error: cannot find symbol
    [javac]     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    [javac]                                   ^
    [javac]   symbol:   variable LOLLIPOP
    [javac]   location: class VERSION_CODES
    [javac] .../platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebView.java:197: error: cannot find symbol
    [javac]         if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
    [javac]                                                        ^
    [javac]   symbol:   variable LOLLIPOP
    [javac]   location: class VERSION_CODES
    [javac] .../platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebView.java:200: error: cannot find symbol
    [javac]             cookieManager.setAcceptThirdPartyCookies(this, true);
    [javac]                          ^
    [javac]   symbol:   method setAcceptThirdPartyCookies(CordovaWebView,boolean)
    [javac]   location: variable cookieManager of type CookieManager
    [javac] .../platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewClient.java:143: error: method does not override or implement a method from a supertype
    [javac]     @Override
    [javac]     ^
    [javac] .../platforms/android/CordovaLib/src/org/apache/cordova/CordovaChromeClient.java:341: error: method does not override or implement a method from a supertype
    [javac]     @Override
    [javac]     ^
    [javac] .../platforms/android/CordovaLib/src/org/apache/cordova/CordovaChromeClient.java:348: error: cannot find symbol
    [javac]                     Uri[] result = WebChromeClient.FileChooserParams.parseResult(resultCode, intent);
    [javac]                                                   ^
    [javac]   symbol:   variable FileChooserParams
    [javac]   location: class WebChromeClient
    [javac] Note: Some input files use or override a deprecated API.
    [javac] Note: Recompile with -Xlint:deprecation for details.
    [javac] 12 errors
    [javac] 3 warnings

BUILD FAILED
/Users/.../Library/Android/sdk/tools/ant/build.xml:720: The following error occurred while executing this line:
/Users/.../Library/Android/sdk/tools/ant/build.xml:734: Compile failed; see the compiler error output for details.

Total time: 3 seconds

android,ant,java都在PATH中。

我已经尝试过调整目标SDK并尝试下载不同版本,但是我已经没有其他想法了。任何帮助都将不胜感激。

来自CordovaLib文件夹的AndroidManifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="org.apache.cordova" android:versionName="1.0" android:versionCode="1">
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />
</manifest>
不理解为什么错误信息中提到LOLLIPOP,以及为什么它找不到已经安装的内容。

嗨@diva,Ant版本是1.9.4,操作系统是OS X 10.10.2 Yosemite。 - L4zl0w
是的,它是一台带有最新Java的Mac电脑。 - L4zl0w
是的,我已经将它添加到帖子中了。谢谢。 - L4zl0w
2
你有没有升级CLI工具而不更新项目的机会?cordova platform显示版本号是多少?此外,我认为3.7.1在CLI 4.3中将SDK升级到了21 - http://cordova.apache.org/announcements/2015/02/06/cordova-android-3.7.1.html? - laughingpine
1
最终它可以与目标SDK 21一起工作。如果您将其添加为答案,我会接受 :) - L4zl0w
显示剩余6条评论
3个回答

15

我在这里没有看到任何参考资料:https://cordova.apache.org/docs/en/4.0.0/guide_platforms_android_index.md.html,可能应该添加到文档中。但这对我也起作用了。 - TyBourque

13

从SDK管理器中安装Android构建工具版本21和22。
安装完构建工具之后,删除应用程序内的平台文件夹。
进入Cordova并再次添加Android平台 (使用 cordova platform add android 命令)。
重新安装平台后,重新构建应用程序 (使用 cordova build 命令) 即可成功构建。


3
删除平台文件夹并重新创建应用程序,就解决了问题。 - N-JOY

6
您的Cordova版本过高,无法与Android Api 19兼容。这意味着它使用了Api 19没有的库,因此会出现错误。因此,您需要将其降级。

请卸载它:

sudo npm uninstall -g cordova 

然后安装一个与API 19兼容的较旧版本的Cordova:

sudo npm install -g cordova@4.0.0

现在,您需要从头开始重新执行所有操作。例如:“cordova create blabla”,“cordova platform add android”,“cordova run android”等。

要获取Cordova版本列表,请执行以下操作:

npm view cordova versions

但我知道4.0.0版本将与Api 19兼容,因为我遇到过相同的问题。


很棒的答案。或者,如果您不介意使用19,您可以更新您的目标。您可以运行“android list targets”来查看您的选项,然后通过运行“android update project --target android-23 -p ~/< MY PROJECT DIRECTORY >/platforms/android -s”从“platforms/android”升级。我遇到了与提问者相同的错误,将其更新为android-23后问题得到解决。 - Sarah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接