NoClassDefFoundError的在运行时在Android的工作室的.jar库 [英] NoClassDefFoundError for .jar library at runtime in Android Studio

查看:387
本文介绍了NoClassDefFoundError的在运行时在Android的工作室的.jar库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

喜的朋友在堆栈溢出

我最近在我的Andr​​oid应用程序实施Fiksu SDK时遇到的一个问题。一个简短的介绍,Fiksu SDK是一种营销手段来注册的安装和事件。所有与Fiksu的方法是在一个名为ASOTracking.jar.jar文件

的问题:

图书馆设置正确,也没有报告摇篮当项目编译,我甚至可以让调试APK错误。但是,它抛出的java.lang.NoClassDefFoundError的在运行时它会尝试初始化SDK。


日志:

  01-27 14:06:54.801 31166-31166 / com.example.myapp I / dalvikvm:找不到方法com.fiksu.asotracking.FiksuDeviceSettingsManager.getInstance,从方法引用com.fiksu.asotracking.FiksuTrackingManager.getClientId
01-27 14:06:54.801 31166-31166 / com.example.myapp W / dalvikvm:VFY:无法解析静态方法13738:LCOM / fiksu / asotracking / FiksuDeviceSettingsManager; .getInstance()LCOM / fiksu / asotracking / FiksuDeviceSettingsManager;
01-27 14:06:54.801 31166-31166 / com.example.myapp D / dalvikvm:VFY:更换运code 0x71为0x0000
01-27 14:06:54.806 31166-31166 / com.example.myapp I / dalvikvm:找不到方法com.fiksu.asotracking.FiksuConfigurationManager.getInstance,从方法com.fiksu.asotracking.FiksuTrackingManager.initialize引用
01-27 14:06:54.806 31166-31166 / com.example.myapp W / dalvikvm:VFY:无法解析静态方法13733:LCOM / fiksu / asotracking / FiksuConfigurationManager; .getInstance()LCOM / fiksu / asotracking / FiksuConfigurationManager;
01-27 14:06:54.806 31166-31166 / com.example.myapp D / dalvikvm:VFY:在0x000f更换运code 0x71
01-27 14:06:54.806 31166-31166 / com.example.myapp I / dalvikvm:找不到方法com.fiksu.asotracking.FiksuDeviceSettingsManager.getInstance,从方法引用com.fiksu.asotracking.FiksuTrackingManager.isAppTrackingEnabled
01-27 14:06:54.806 31166-31166 / com.example.myapp W / dalvikvm:VFY:无法解析静态方法13738:LCOM / fiksu / asotracking / FiksuDeviceSettingsManager; .getInstance()LCOM / fiksu / asotracking / FiksuDeviceSettingsManager;
01-27 14:06:54.806 31166-31166 / com.example.myapp D / dalvikvm:VFY:更换运code 0x71为0x0000
01-27 14:06:54.806 31166-31166 / com.example.myapp I / dalvikvm:找不到方法com.fiksu.asotracking.FiksuDeviceSettingsManager.getInstance,从方法引用com.fiksu.asotracking.FiksuTrackingManager.setAppTrackingEnabled
01-27 14:06:54.806 31166-31166 / com.example.myapp W / dalvikvm:VFY:无法解析静态方法13738:LCOM / fiksu / asotracking / FiksuDeviceSettingsManager; .getInstance()LCOM / fiksu / asotracking / FiksuDeviceSettingsManager;
01-27 14:06:54.806 31166-31166 / com.example.myapp D / dalvikvm:VFY:更换运code 0x71为0×0010
01-27 14:06:54.806 31166-31166 / com.example.myapp I / dalvikvm:找不到方法com.fiksu.asotracking.FiksuDeviceSettingsManager.getInstance,从方法com.fiksu.asotracking.FiksuTrackingManager.setClientId引用
01-27 14:06:54.806 31166-31166 / com.example.myapp W / dalvikvm:VFY:无法解析静态方法13738:LCOM / fiksu / asotracking / FiksuDeviceSettingsManager; .getInstance()LCOM / fiksu / asotracking / FiksuDeviceSettingsManager;
01-27 14:06:54.806 31166-31166 / com.example.myapp D / dalvikvm:VFY:更换运code 0x71为0×0010
01-27 14:06:54.806 31166-31166 / com.example.myapp I / dalvikvm:找不到方法com.fiksu.asotracking.FiksuConfigurationManager.getInstance,从方法引用com.fiksu.asotracking.FiksuTrackingManager.setDebugModeEnabled
01-27 14:06:54.806 31166-31166 / com.example.myapp W / dalvikvm:VFY:无法解析静态方法13733:LCOM / fiksu / asotracking / FiksuConfigurationManager; .getInstance()LCOM / fiksu / asotracking / FiksuConfigurationManager;
01-27 14:06:54.806 31166-31166 / com.example.myapp D / dalvikvm:VFY:更换运code 0x71为0×0001
01-27 14:06:54.806 31166-31166 / com.example.myapp E / dalvikvm:找不到类的com.fiksu.asotracking.CustomEventTracker,从法com.fiksu.asotracking.FiksuTrackingManager.uploadCustomEvent引用
01-27 14:06:54.806 31166-31166 / com.example.myapp W / dalvikvm:VFY:无法解析新的实例2112(LCOM / fiksu / asotracking / CustomEventTracker;)在LCOM / fiksu / asotracking / FiksuTrackingManager;
01-27 14:06:54.806 31166-31166 / com.example.myapp D / dalvikvm:VFY:在0x000f更换运code输入0x22
01-27 14:06:54.806 31166-31166 / com.example.myapp E / dalvikvm:找不到类的com.fiksu.asotracking.PurchaseEventTracker,从法com.fiksu.asotracking.FiksuTrackingManager.uploadPurchase引用
01-27 14:06:54.806 31166-31166 / com.example.myapp W / dalvikvm:VFY:无法解析新的实例2125(LCOM / fiksu / asotracking / PurchaseEventTracker;)在LCOM / fiksu / asotracking / FiksuTrackingManager;
01-27 14:06:54.806 31166-31166 / com.example.myapp D / dalvikvm:VFY:更换运code输入0x22为0×0022
01-27 14:06:54.806 31166-31166 / com.example.myapp E / dalvikvm:找不到类的com.fiksu.asotracking.PurchaseEventTracker,从法com.fiksu.asotracking.FiksuTrackingManager.uploadPurchaseEvent引用
01-27 14:06:54.806 31166-31166 / com.example.myapp W / dalvikvm:VFY:无法解析新的实例2125(LCOM / fiksu / asotracking / PurchaseEventTracker;)在LCOM / fiksu / asotracking / FiksuTrackingManager;
01-27 14:06:54.806 31166-31166 / com.example.myapp D / dalvikvm:VFY:更换运code输入0x22为0x0014
01-27 14:06:54.806 31166-31166 / com.example.myapp E / dalvikvm:找不到类的com.fiksu.asotracking.RegistrationEventTracker,从法com.fiksu.asotracking.FiksuTrackingManager.uploadRegistration引用
01-27 14:06:54.806 31166-31166 / com.example.myapp W / dalvikvm:VFY:无法解析新的实例2126(LCOM / fiksu / asotracking / RegistrationEventTracker;)在LCOM / fiksu / asotracking / FiksuTrackingManager;
01-27 14:06:54.806 31166-31166 / com.example.myapp D / dalvikvm:VFY:在0x001e更换运code输入0x22
01-27 14:06:54.806 31166-31166 / com.example.myapp E / dalvikvm:找不到类的com.fiksu.asotracking.RegistrationEventTracker,从法com.fiksu.asotracking.FiksuTrackingManager.uploadRegistrationEvent引用
01-27 14:06:54.806 31166-31166 / com.example.myapp W / dalvikvm:VFY:无法解析新的实例2126(LCOM / fiksu / asotracking / RegistrationEventTracker;)在LCOM / fiksu / asotracking / FiksuTrackingManager;
01-27 14:06:54.806 31166-31166 / com.example.myapp D / dalvikvm:VFY:更换运code输入0x22为0×0010
01-27 14:06:54.806 31166-31166 / com.example.myapp D / dalvikvm:DexOpt:无法选择在0x2B访问直接调用0x35ce在LCOM / fiksu / asotracking / FiksuTrackingManager; .initialize
01-27 14:06:54.806 31166-31166 / com.example.myapp D / dalvikvm:DexOpt:无法选择在0x2E之间直接调用0x35c5在LCOM / fiksu / asotracking / FiksuTrackingManager; .initialize
01-27 14:06:54.811 31166-31166 / com.example.myapp D / dalvikvm:DexOpt:无法在LCOM / fiksu / asotracking / FiksuTrackingManager选择直接调用0x359b在0x15; .uploadCustomEvent
01-27 14:06:54.811 31166-31166 / com.example.myapp D / dalvikvm:DexOpt:无法在LCOM / fiksu / asotracking / FiksuTrackingManager选择直接调用0x35cf在为0x30; .uploadPurchase
01-27 14:06:54.811 31166-31166 / com.example.myapp D / dalvikvm:DexOpt:无法在LCOM / fiksu / asotracking / FiksuTrackingManager选择直接调用0x35cf在0x23; .uploadPurchaseEvent
01-27 14:06:54.811 31166-31166 / com.example.myapp D / dalvikvm:DexOpt:无法在LCOM / fiksu / asotracking / FiksuTrackingManager选择直接调用0x35d1在0X26; .uploadRegistration
01-27 14:06:54.811 31166-31166 / com.example.myapp I / dalvikvm:DexOpt:无法在LCOM / fiksu / asotracking / FiksuTrackingManager优化静态字段裁判0x1507在为0x16; .uploadRegistrationEvent
01-27 14:06:54.811 31166-31166 / com.example.myapp D / dalvikvm:DexOpt:无法在LCOM / fiksu / asotracking / FiksuTrackingManager选择直接调用0x35d1处的0x19; .uploadRegistrationEvent
01-27 14:06:54.811 31166-31166 / com.example.myapp D / AndroidRuntime:关闭虚拟机
01-27 14:06:54.811 31166-31166 / com.example.myapp W / dalvikvm:主题ID = 1:螺纹未捕获异常退出(组= 0x41ecb700)
01-27 14:06:54.821 31166-31166 / com.example.myapp E / AndroidRuntime:致命异常:主要
    java.lang.NoClassDefFoundError的:com.fiksu.asotracking.FiksuConfigurationManager
            在com.fiksu.asotracking.FiksuTrackingManager.initialize(FiksuTrackingManager.java:83)
            在com.example.userinterface.MyApplication.onCreate(MyApplication.java:56)
            在android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1024)
            在android.app.ActivityThread.handleBindApplication(ActivityThread.java:4684)
            在android.app.ActivityThread.access $ 1400(ActivityThread.java:159)
            在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1376)
            在android.os.Handler.dispatchMessage(Handler.java:99)
            在android.os.Looper.loop(Looper.java:137)
            在android.app.ActivityThread.main(ActivityThread.java:5419)
            在java.lang.reflect.Method.invokeNative(本机方法)
            在java.lang.reflect.Method.invoke(Method.java:525)
            在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1187)
            在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
            在dalvik.system.NativeStart.main(本机方法)
 


我的本地环境:

  1. 在项目是在Android工作室开发
  2. 在我使用的Mac OS X 10.8.5山狮
  3. compileSdkVersion 21,buildToolsVersion21.1.2, gradleVersion ='2.2.1',com.android.tools.build:gradle:1.0.0
  4. 这是一个多模块项目。应用模块称为用户界面中库模块,并且该SDK就在于此库模块。

我已经试过:

  1. 在我做确保了SDK(JAR)文件是正确安装和有报道摇篮没有编译错误
  2. 我要确保没有语法错误的地方SDK方法被称为
  3. 在我检查调用此SDK,以确保不存在相关问题的模块的依赖关系。我走这么远,我甚修剪整个依赖关系树(我知道这是不必要的)。
  4. 在我尝试删除所有模块的构建目录下并重新构建整个项目
  5. 在我的Andr​​oid工作室
  6. 执行无效高速缓存/重新启动操作
  7. 在我执行通过终端./gradlew清理命令,在两个根目录和应用模块目录。
  8. 我咨询了申通快递下面的链接,但没有成功:

<一个href="http://stackoverflow.com/questions/16779959/android-studio-importing-external-library-jar">Android工作室 - 导入外部库/罐

Android的工作室:添加JAR作为库

<一个href="http://stackoverflow.com/questions/20311659/android-studio-gradle-could-not-find-method-compile">Android工作室摇篮找不到方法编译()

<一个href="http://stackoverflow.com/questions/6247862/getting-caused-by-java-lang-verifyerror/10677757#10677757">Getting &QUOT;产生的原因:java.lang.VerifyError:&QUOT;

<一个href="http://stackoverflow.com/questions/10710693/unable-to-find-classes-in-android-library-file">Unable找到类的Andr​​oid库文件

<一个href="http://stackoverflow.com/questions/16620635/noclassdeffounderror-with-libraries-in-android-studio">NoClassDefFoundError在机器人工作室库


最后的思考:

我需要一些严重的帮助,因为我已经尝试了一切,我知道。该SDK正常工作之前,我移植这个项目从Eclipse中。现在,它的Andr​​oid Studio中运行时,会抛出异常怪异。

最后还有一件事是有点可疑---在机器人工作室(该***。IMI文件)的类路径的文件,我重新安排它的类路径条目,它仍然无法正常工作。

感谢你们您的帮助!

解决方案

新发现

我的GS4(安卓4.3)不能运行这个程序,但HTC 1个M8(安卓5.0.1),可以运行它

根源

65K方法限制 请参考本文档:<一href="https://developer.android.com/tools/building/multidex.html">https://developer.android.com/tools/building/multidex.html 基本上有一个方法引用限制,唯一的解决办法是使用multidex配置。但也有实现的平台之前5.0和5.0之后,

解决方案

将溶液在两个描述: <一href="https://developer.android.com/tools/building/multidex.html">https://developer.android.com/tools/building/multidex.html <一href="https://developer.android.com/reference/android/support/multidex/MultiDexApplication.html">https://developer.android.com/reference/android/support/multidex/MultiDexApplication.html 对于我的项目,因为它支持的Andr​​oid旧版本,我去与multidex支持库的解决方案。

  1. 设置所有的库模块的构建工具版本和应用程序模块到最新的21.1.2
  2. 对于模块,具有应用类中,添加编译com.android.support:multidex:1.0.0作为依赖
  3. 请参考以下链接来修改你的应用程序类。 <一href="https://developer.android.com/reference/android/support/multidex/MultiDexApplication.html">https://developer.android.com/reference/android/support/multidex/MultiDexApplication.html
  4. 在同一个摇篮的脚本,在机器人 - > defaultConfig块,加上multiDexEnabled真正的
  5. 如果您的系统提供了Java堆大小的错误,在应用程序模块的摇篮脚本中添加以下

dexOptions {     增量真     javaMaxHeapSize4G }

Hi Friends at Stack Overflow

I recently run into a problem when implementing Fiksu SDK in my Android app. A brief intro, Fiksu SDK is a marketing tool to register installation and events. All the methods related to Fiksu is in a .jar file called "ASOTracking.jar"

The problem:

The library is setup correctly, there is no error reported by Gradle when project compiles and I can even make debug apk. However, it throws "java.lang.NoClassDefFoundError" at runtime when it tries to initialize the SDK.


The log:

01-27 14:06:54.801  31166-31166/com.example.myapp I/dalvikvm﹕ Could not find method com.fiksu.asotracking.FiksuDeviceSettingsManager.getInstance, referenced from method com.fiksu.asotracking.FiksuTrackingManager.getClientId
01-27 14:06:54.801  31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve static method 13738: Lcom/fiksu/asotracking/FiksuDeviceSettingsManager;.getInstance ()Lcom/fiksu/asotracking/FiksuDeviceSettingsManager;
01-27 14:06:54.801  31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x0000
01-27 14:06:54.806  31166-31166/com.example.myapp I/dalvikvm﹕ Could not find method com.fiksu.asotracking.FiksuConfigurationManager.getInstance, referenced from method com.fiksu.asotracking.FiksuTrackingManager.initialize
01-27 14:06:54.806  31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve static method 13733: Lcom/fiksu/asotracking/FiksuConfigurationManager;.getInstance ()Lcom/fiksu/asotracking/FiksuConfigurationManager;
01-27 14:06:54.806  31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x000f
01-27 14:06:54.806  31166-31166/com.example.myapp I/dalvikvm﹕ Could not find method com.fiksu.asotracking.FiksuDeviceSettingsManager.getInstance, referenced from method com.fiksu.asotracking.FiksuTrackingManager.isAppTrackingEnabled
01-27 14:06:54.806  31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve static method 13738: Lcom/fiksu/asotracking/FiksuDeviceSettingsManager;.getInstance ()Lcom/fiksu/asotracking/FiksuDeviceSettingsManager;
01-27 14:06:54.806  31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x0000
01-27 14:06:54.806  31166-31166/com.example.myapp I/dalvikvm﹕ Could not find method com.fiksu.asotracking.FiksuDeviceSettingsManager.getInstance, referenced from method com.fiksu.asotracking.FiksuTrackingManager.setAppTrackingEnabled
01-27 14:06:54.806  31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve static method 13738: Lcom/fiksu/asotracking/FiksuDeviceSettingsManager;.getInstance ()Lcom/fiksu/asotracking/FiksuDeviceSettingsManager;
01-27 14:06:54.806  31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x0010
01-27 14:06:54.806  31166-31166/com.example.myapp I/dalvikvm﹕ Could not find method com.fiksu.asotracking.FiksuDeviceSettingsManager.getInstance, referenced from method com.fiksu.asotracking.FiksuTrackingManager.setClientId
01-27 14:06:54.806  31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve static method 13738: Lcom/fiksu/asotracking/FiksuDeviceSettingsManager;.getInstance ()Lcom/fiksu/asotracking/FiksuDeviceSettingsManager;
01-27 14:06:54.806  31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x0010
01-27 14:06:54.806  31166-31166/com.example.myapp I/dalvikvm﹕ Could not find method com.fiksu.asotracking.FiksuConfigurationManager.getInstance, referenced from method com.fiksu.asotracking.FiksuTrackingManager.setDebugModeEnabled
01-27 14:06:54.806  31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve static method 13733: Lcom/fiksu/asotracking/FiksuConfigurationManager;.getInstance ()Lcom/fiksu/asotracking/FiksuConfigurationManager;
01-27 14:06:54.806  31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x0001
01-27 14:06:54.806  31166-31166/com.example.myapp E/dalvikvm﹕ Could not find class 'com.fiksu.asotracking.CustomEventTracker', referenced from method com.fiksu.asotracking.FiksuTrackingManager.uploadCustomEvent
01-27 14:06:54.806  31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve new-instance 2112 (Lcom/fiksu/asotracking/CustomEventTracker;) in Lcom/fiksu/asotracking/FiksuTrackingManager;
01-27 14:06:54.806  31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x22 at 0x000f
01-27 14:06:54.806  31166-31166/com.example.myapp E/dalvikvm﹕ Could not find class 'com.fiksu.asotracking.PurchaseEventTracker', referenced from method com.fiksu.asotracking.FiksuTrackingManager.uploadPurchase
01-27 14:06:54.806  31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve new-instance 2125 (Lcom/fiksu/asotracking/PurchaseEventTracker;) in Lcom/fiksu/asotracking/FiksuTrackingManager;
01-27 14:06:54.806  31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x22 at 0x0022
01-27 14:06:54.806  31166-31166/com.example.myapp E/dalvikvm﹕ Could not find class 'com.fiksu.asotracking.PurchaseEventTracker', referenced from method com.fiksu.asotracking.FiksuTrackingManager.uploadPurchaseEvent
01-27 14:06:54.806  31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve new-instance 2125 (Lcom/fiksu/asotracking/PurchaseEventTracker;) in Lcom/fiksu/asotracking/FiksuTrackingManager;
01-27 14:06:54.806  31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x22 at 0x0014
01-27 14:06:54.806  31166-31166/com.example.myapp E/dalvikvm﹕ Could not find class 'com.fiksu.asotracking.RegistrationEventTracker', referenced from method com.fiksu.asotracking.FiksuTrackingManager.uploadRegistration
01-27 14:06:54.806  31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve new-instance 2126 (Lcom/fiksu/asotracking/RegistrationEventTracker;) in Lcom/fiksu/asotracking/FiksuTrackingManager;
01-27 14:06:54.806  31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x22 at 0x001e
01-27 14:06:54.806  31166-31166/com.example.myapp E/dalvikvm﹕ Could not find class 'com.fiksu.asotracking.RegistrationEventTracker', referenced from method com.fiksu.asotracking.FiksuTrackingManager.uploadRegistrationEvent
01-27 14:06:54.806  31166-31166/com.example.myapp W/dalvikvm﹕ VFY: unable to resolve new-instance 2126 (Lcom/fiksu/asotracking/RegistrationEventTracker;) in Lcom/fiksu/asotracking/FiksuTrackingManager;
01-27 14:06:54.806  31166-31166/com.example.myapp D/dalvikvm﹕ VFY: replacing opcode 0x22 at 0x0010
01-27 14:06:54.806  31166-31166/com.example.myapp D/dalvikvm﹕ DexOpt: unable to opt direct call 0x35ce at 0x2b in Lcom/fiksu/asotracking/FiksuTrackingManager;.initialize
01-27 14:06:54.806  31166-31166/com.example.myapp D/dalvikvm﹕ DexOpt: unable to opt direct call 0x35c5 at 0x2e in Lcom/fiksu/asotracking/FiksuTrackingManager;.initialize
01-27 14:06:54.811  31166-31166/com.example.myapp D/dalvikvm﹕ DexOpt: unable to opt direct call 0x359b at 0x15 in Lcom/fiksu/asotracking/FiksuTrackingManager;.uploadCustomEvent
01-27 14:06:54.811  31166-31166/com.example.myapp D/dalvikvm﹕ DexOpt: unable to opt direct call 0x35cf at 0x30 in Lcom/fiksu/asotracking/FiksuTrackingManager;.uploadPurchase
01-27 14:06:54.811  31166-31166/com.example.myapp D/dalvikvm﹕ DexOpt: unable to opt direct call 0x35cf at 0x23 in Lcom/fiksu/asotracking/FiksuTrackingManager;.uploadPurchaseEvent
01-27 14:06:54.811  31166-31166/com.example.myapp D/dalvikvm﹕ DexOpt: unable to opt direct call 0x35d1 at 0x26 in Lcom/fiksu/asotracking/FiksuTrackingManager;.uploadRegistration
01-27 14:06:54.811  31166-31166/com.example.myapp I/dalvikvm﹕ DexOpt: unable to optimize static field ref 0x1507 at 0x16 in Lcom/fiksu/asotracking/FiksuTrackingManager;.uploadRegistrationEvent
01-27 14:06:54.811  31166-31166/com.example.myapp D/dalvikvm﹕ DexOpt: unable to opt direct call 0x35d1 at 0x19 in Lcom/fiksu/asotracking/FiksuTrackingManager;.uploadRegistrationEvent
01-27 14:06:54.811  31166-31166/com.example.myapp D/AndroidRuntime﹕ Shutting down VM
01-27 14:06:54.811  31166-31166/com.example.myapp W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41ecb700)
01-27 14:06:54.821  31166-31166/com.example.myapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NoClassDefFoundError: com.fiksu.asotracking.FiksuConfigurationManager
            at com.fiksu.asotracking.FiksuTrackingManager.initialize(FiksuTrackingManager.java:83)
            at com.example.userinterface.MyApplication.onCreate(MyApplication.java:56)
            at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1024)
            at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4684)
            at android.app.ActivityThread.access$1400(ActivityThread.java:159)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1376)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5419)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
            at dalvik.system.NativeStart.main(Native Method)


My local environment:

  1. Project is developed on Android Studio
  2. I'm using Mac OS X 10.8.5 Mountain Lion
  3. compileSdkVersion 21, buildToolsVersion "21.1.2", gradleVersion = '2.2.1', com.android.tools.build:gradle:1.0.0
  4. This is a multi-module project. Application module calls "userInterface" library module and this SDK lies in this library module.


What I've tried:

  1. I do make sure the SDK (jar) file is properly setup and there is no compile error reported by Gradle
  2. I make sure there is no syntax error at the places where SDK methods is called
  3. I checked the dependency of the module that calls this SDK to make sure there is no dependency problem. I go so far that I even trim the whole dependency tree (I know it's unnecessary).
  4. I tried deleting the "build" directory of all modules and rebuild the whole project
  5. I performed the "Invalidate Cache/Restart" operation in Android Studio
  6. I performed "./gradlew clean" command via Terminal at both root directory and application module directory.
  7. I consulted the following links in STO with no success:

Android Studio - Importing external Library/Jar

Android Studio: Add jar as library?

Android studio Gradle Could not find method compile()

Getting "Caused by: java.lang.VerifyError:"

Unable to find classes in Android library file

NoClassDefFoundError with libraries in Android Studio


Final thoughts:

I need some serious help because I've tried everything I know. This SDK worked fine before I migrated this project from Eclipse. Now it throws weird exception when running in Android Studio.

There is one last thing that's kinda suspicious --- the classpath file in Android Studio (the ***.imi file), I re-arrange the classpath entries in it and it still doesn't work.

Thank you guys advance for your help!

解决方案

New Findings

My GS4 (Android 4.3) cannot run this app, but HTC One M8 (Android 5.0.1) can run it

Root Cause

65K methods limit Refer to this document: https://developer.android.com/tools/building/multidex.html Basically there is a methods reference limit and the only solution is to use multidex configuration. However there are implementation for platforms prior 5.0 and after 5.0

Solution

The solution is described in both: https://developer.android.com/tools/building/multidex.html https://developer.android.com/reference/android/support/multidex/MultiDexApplication.html For my project, since it supports older version of Android, I go with the "multidex support library" solution.

  1. Set the build tool version of all library modules and app module to the latest 21.1.2
  2. For module that has Application class, add compile 'com.android.support:multidex:1.0.0' as dependency
  3. Refer to this link to modify your application class. https://developer.android.com/reference/android/support/multidex/MultiDexApplication.html
  4. At the same gradle script, under android -> defaultConfig block, add "multiDexEnabled true"
  5. If your system gives "Java Heap Size" error, in the app module's gradle script, add the following

dexOptions {
    incremental true
    javaMaxHeapSize "4g"
}

这篇关于NoClassDefFoundError的在运行时在Android的工作室的.jar库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆