移动mmbilling似乎有个BUG,通过JNI调用会抛出异常
有人用JNI调用过mm么?不知道你成功了没有,我试了多种方法,有一个错误始终存在,怀疑上个BUG。使用方式:
通过NativeActivity的clazz获取ClassLoader,然后找到mm.purchasesdk.Purchase,实例化后,调用Init()
错误信息:
06-28 05:14:09.746: E/d(4709): failed to find resource file(mmiap.xml}
06-28 05:14:09.776: D/AndroidRuntime(4709): Shutting down VM
06-28 05:14:09.776: W/dalvikvm(4709): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
06-28 05:14:09.786: E/AndroidRuntime(4709): FATAL EXCEPTION: main
06-28 05:14:09.786: E/AndroidRuntime(4709): java.lang.NullPointerException
06-28 05:14:09.786: E/AndroidRuntime(4709):
at mm.purchasesdk.d.a.a(Unknown Source)
06-28 05:14:09.786: E/AndroidRuntime(4709):
at mm.purchasesdk.f.a(Unknown Source)
06-28 05:14:09.786: E/AndroidRuntime(4709):
at mm.purchasesdk.Purchase.init(Unknown Source)
实际上:
我APK中有mmiap.xml文件,通过ClassLoader的getResourceAsStream也可以读取这个文件。
而通过JNI直接findClass获取类,或使用SystemClassLoader都是获取类以及读取文件都是不成功的。
所以分析:
mmbilling库中,大概使用了ClassLoader的getSystemClassLoader得到的ClassLoader来读取文件,所以无法成功。
应该修改为从一个已有类的实例中GetClassLoader才可以。
不知有没有谁NativeActivity集成过mmbilling,如果你成功了,请一定给我留言!