- 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:为什么是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
**
**
C:项目中的相关版本文件
**
如果在开发工具中可能通过查看以下文件中的片段
cordova-android版本号在
<项目名>/platforms/platforms.json
{
"android": "4.0.2"
}
我的cordova版本是
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, 没有那个文件或目录