贴上异常log:
12-30 11:37:02.997 2205-2205/com:push A/art: art/runtime/runtime.cc:289] Pending exception java.lang.ClassNotFoundException thrown by 'unknown throw location'
12-30 11:37:02.997 2205-2205/com.A/art: art/runtime/runtime.cc:289] java.lang.ClassNotFoundException: Didn't find class "com.yuntongxun.ecsdk.core.voip.AudioDeviceAndroid" on path: DexPathList[[zip file "/system/app/aner.apk"],nativeLibraryDirectories=[/system/app/EE/lib/arm, /vendor/lib, /system/lib]]
12-30 11:37:02.997 2205-2205/com..A/art: art/runtime/runtime.cc:289] at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56)
12-30 11:37:02.997 2205-2205/com..A/art: art/runtime/runtime.cc:289] at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:511)
12-30 11:37:02.997 2205-2205/com..A/art: art/runtime/runtime.cc:289] at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:469)
12-30 11:37:02.997 2205-2205/com..A/art: art/runtime/runtime.cc:289] at int com.yuntongxun.ecsdk.core.jni.IVoIPNative.setAudioContext(java.lang.Object) ((null):-2)
12-30 11:37:02.997 2205-2205/com..A/art: art/runtime/runtime.cc:289] at com.yuntongxun.ecsdk.core.ai com.yuntongxun.ecsdk.core.ai.a(android.content.Context) ((null):-1)
12-30 11:37:02.997 2205-2205/com..A/art: art/runtime/runtime.cc:289] at void com.yuntongxun.ecsdk.core.ah.a(android.content.Context) ((null):-1)
12-30 11:37:02.997 2205-2205/com..A/art: art/runtime/runtime.cc:289] at void com.yuntongxun.ecsdk.ECClientService.onCreate() ((null):-1)
12-30 11:37:02.997 2205-2205/com..A/art: art/runtime/runtime.cc:289] at void android.app.ActivityThread.handleCreateService(android.app.ActivityThread$CreateServiceData) (ActivityThread.java:2761)
12-30 11:37:02.997 2205-2205/com..A/art: art/runtime/runtime.cc:289] at void android.app.ActivityThread.access$1800(android.app.ActivityThread, android.app.ActivityThread$CreateServiceData) (ActivityThread.java:151)
12-30 11:37:02.997 2205-2205/com..A/art: art/runtime/runtime.cc:289] at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1386)
12-30 11:37:02.997 2205-2205/com..A/art: art/runtime/runtime.cc:289] at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102)
12-30 11:37:02.997 2205-2205/com..A/art: art/runtime/runtime.cc:289] at void android.os.Looper.loop() (Looper.java:135)
12-30 11:37:02.997 2205-2205/com..A/art: art/runtime/runtime.cc:289] at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:5254)
12-30 11:37:02.997 2205-2205/com..A/art: art/runtime/runtime.cc:289] at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[], boolean) (Method.java:-2)
12-30 11:37:02.997 2205-2205/com..A/art: art/runtime/runtime.cc:289] at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:372)
12-30 11:37:02.997 2205-2205/com.. A/art: art/runtime/runtime.cc:289] at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:903)
12-30 11:37:02.997 2205-2205/com..A/art: art/runtime/runtime.cc:289] at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:698)
编译OK,但是启动荣联云的IM功能时候就出现了没有问题,定位到log发现是一个类没有找到,也就时classnotfoundexception! 在检查发现这个类是的存在与荣联云的jar里面的,但是我明明导入了这个jar,而且在android.mk里面也做了相应配置,为什么会出现这种情况?
突然想到添加了混淆的Proguard.flag文件,有可能把jar也混淆了所以导致功能逻辑里面没有可以调用的正确类名了!仔细参考了一下Proguard混淆文件的语法确定了这个问题(http://blog.csdn.net/lovexjyong/article/details/24652085)
解决办法:
在源码自建系统应用的目录下将Proguard.flag文件里面添加:
-libraryjars libs/Yuntx_FullLib_v5.3.0r.jar
-keep class com.yuntongxun.ecsdk.**{*;}
保证jar里面对应的类不会被混淆,再次编译后刷机启动IM功能ok!