嗨朋友在Stack Overflow
我最近在Android应用中实施Fiksu SDK时遇到了问题.简短的介绍,Fiksu SDK是一个注册安装和事件的营销工具.与Fiksu相关的所有方法都在名为"ASOTracking.jar"的.jar文件中
问题:
库已正确设置,Gradle在项目编译时没有报告错误,我甚至可以调试apk.但是,它在尝试初始化SDK时会在运行时抛出"java.lang.NoClassDefFoundError".
日志:
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)
我的当地环境:
Project是在Android Studio上开发的
我正在使用Mac OS X 10.8.5 Mountain Lion
compileSdkVersion 21,buildToolsVersion"21.1.2",gradleVersion ='2.2.1',com.android.tools.build:grad:1.0.0
这是一个多模块项目.应用程序模块调用"userInterface"库模块,此SDK位于此库模块中.
我尝试过的:
我确保SDK(jar)文件已正确设置,并且Gradle没有报告编译错误
我确保在调用SDK方法的地方没有语法错误
我检查了调用此SDK的模块的依赖关系,以确保没有依赖性问题.我走得太远了,我甚至修剪了整个依赖树(我知道这是不必要的).
我尝试删除所有模块的"build"目录并重建整个项目
我在Android Studio中执行了"Invalidate Cache/Restart"操作
我在根目录和应用程序模块目录中通过Terminal执行了"./gradlew clean"命令.
我在STO咨询了以下链接但没有成功:
Android Studio - 导入外部库/ Jar
Android Studio:将jar添加为库?
Android studio Gradle无法找到方法compile()
得到"引起:java.lang.VerifyError:"
无法在Android库文件中找到类
Android Studio中包含库的NoClassDefFoundError
最后的想法:
我需要一些认真的帮助,因为我已经尝试了我所知道的一切.在从Eclipse迁移此项目之前,此SDK工作正常.现在,它在Android Studio中运行时抛出奇怪的异常.
最后一件事有点可疑--- Android Studio中的类路径文件(***.imi文件),我重新安排了其中的类路径条目,但它仍然不起作用.
谢谢你们提前帮忙!
新发现
我的GS4(Android 4.3)无法运行此应用程序,但HTC One M8(Android 5.0.1)可以运行它
根本原因
65K方法限制请参阅此文档:https://developer.android.com/tools/building/multidex.html 基本上有方法参考限制,唯一的解决方案是使用multidex配置.但是,5.0之前和5.0之后的平台都有实现
解
该解决方案在以下两个描述:https : //developer.android.com/tools/building/multidex.html https://developer.android.com/reference/android/support/multidex/MultiDexApplication.html 对于我的项目,因为它支持旧版Android,我使用"multidex支持库"解决方案.
将所有库模块和应用程序模块的构建工具版本设置为最新的21.1.2
对于具有Application类的模块,添加compile'com.android.support:multidex:1.0.0'作为依赖项
请参阅此链接以修改您的应用程序类.https://developer.android.com/reference/android/support/multidex/MultiDexApplication.html
在同一个gradle脚本中,在android - > defaultConfig块下,添加"multiDexEnabled true"
如果您的系统出现"Java堆大小"错误,请在应用程序模块的gradle脚本中添加以下内容
dexOptions {
incremental true
javaMaxHeapSize "4g"
}