Cordova编译异常小结

2 篇文章 0 订阅
2 篇文章 0 订阅
  1. java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor version 52.0

完整的异常stack

* What went wrong:
Execution failed for task ':preDexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    <ANDROID_HOME>/build-tools/24.0.0/dx --dex --output /home/xiaofanku/marsspace/iqido_app/platforms/android/build/intermediates/pre-dexed/debug/classes-b09293f2934475cc245ffcab36ea10739c783336.jar /home/xiaofanku/marsspace/iqido_app/platforms/android/build/intermediates/exploded-aar/android/CordovaLib/unspecified/debug/classes.jar
  Error Code:
    1
  Output:
    Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor version 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

注意从以下标题中查找原因

**

A:Android target

**
图1

问题1:为什么是android-23?
cordova-android版本决定了所支持Android SDK版本列表

cordova-android—>Version Supported Android API-Levels
5.X.X—>14 - 23
4.1.X—>14 - 22
4.0.X—>10 - 22
3.7.X—>10 - 21

cordova-android版本支持的Android SDK上限即为cordova项目的Android target版本号,例如:cordova-android版本为5.xx,哪么当前cordova项目的Android target就为23

问题2:查看cordova-android当前的版本?

 cordova platform ls

问题3:更改cordova-android当前的版本?

更新到最新版本

cordova platform update android

更新到指定的版本

cordova platform update android@<4.0.2>

**

B:Android SDK Manager

**

图2

**

C:项目中的相关版本文件

**

如果在开发工具中可能通过查看以下文件中的片段

cordova-android版本号在
<项目名>/platforms/platforms.json

{
    "android": "4.0.2"
}

我的cordova版本是
图3

android target版本号在
<项目名>/platforms/android/project.properties

# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
# Project target.
target=android-22
android.library.reference.1=CordovaLib

<项目名>/platforms/android/AndroidManifest.xml

<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="iqido.app" xmlns:android="http://schemas.android.com/apk/res/android">
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:supportsRtl="true">

    </application>
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="22" />

</manifest>

以上两个文件名在<项目名>/platforms/android/CordovaLib/下也存在该名称的文件,此目录下文件名虽一样,但内容不一样,cordova build时以哪个为主呢?最好还是使用上面的update命令

我试过不用update命令,只改这4个文件中的android target也可以成功编译apk

总结:

Android SDK Build-tools 的版本号大于Android target

附注另一个异常

* What went wrong:
Execution failed for task ':CordovaLib:processDebugResources'.
> java.io.IOException: Cannot run program "<ANDROID_HOME>/build-tools/22.0.1/aapt": error=2, 没有那个文件或目录

我用的是64位ubuntu 14.04,参考此文可以kill掉此异常:Cannot run program “XXXXX/android-sdks/build-tools/aapt.exe”: error=2, 没有那个文件或目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值