Cordova编译异常小结

来源:互联网 发布:ieee 802.11 mac协议 编辑:程序博客网 时间:2024/06/05 08:22
  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-22android.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
原创粉丝点击