Closed sailor1861 closed 3 years ago
补充一下补丁情况: 就是Sample里MainActivity.onCreate()中 添加一行logcat输出;
补丁一下OAID的初始化代码:非常简单,就是调用一个Jni方法,然后返回的是空对象;导致了后续的NullPointerException
MdidSdkHelper.InitSdk(getApplication(), true, new IIdentifierListener() {
@Override
public void OnSupport(boolean b, IdSupplier idSupplier) {
}
});
public class MdidSdkHelper {
public static int InitSdk(Context arg0, boolean arg1, IIdentifierListener arg2) {
// 就是这个Jni方法返回的object是空的导致的; 只要加载补丁后,就会复现
Object object = Utils.rL(new Object[]{null, arg0, arg1, arg2, 28, 1598952044250L});
return (Integer)object;
}
}
public class Utils {
public Utils() {
}
public static native Object rL(Object[] var0);
}
补充一下补丁情况: 就是Sample里MainActivity.onCreate()中 添加一行logcat输出;
补丁一下OAID的初始化代码:非常简单,就是调用一个Jni方法,然后返回的是空对象;导致了后续的NullPointerException
MdidSdkHelper.InitSdk(getApplication(), true, new IIdentifierListener() { @Override public void OnSupport(boolean b, IdSupplier idSupplier) { } }); public class MdidSdkHelper { public static int InitSdk(Context arg0, boolean arg1, IIdentifierListener arg2) { // 就是这个Jni方法返回的object是空的导致的; 只要加载补丁后,就会复现 Object object = Utils.rL(new Object[]{null, arg0, arg1, arg2, 28, 1598952044250L}); return (Integer)object; } } public class Utils { public Utils() { } public static native Object rL(Object[] var0); }
oaid多少版本,建议升级最新试试
补充一下补丁情况: 就是Sample里MainActivity.onCreate()中 添加一行logcat输出; 补丁一下OAID的初始化代码:非常简单,就是调用一个Jni方法,然后返回的是空对象;导致了后续的NullPointerException
MdidSdkHelper.InitSdk(getApplication(), true, new IIdentifierListener() { @Override public void OnSupport(boolean b, IdSupplier idSupplier) { } }); public class MdidSdkHelper { public static int InitSdk(Context arg0, boolean arg1, IIdentifierListener arg2) { // 就是这个Jni方法返回的object是空的导致的; 只要加载补丁后,就会复现 Object object = Utils.rL(new Object[]{null, arg0, arg1, arg2, 28, 1598952044250L}); return (Integer)object; } } public class Utils { public Utils() { } public static native Object rL(Object[] var0); }
oaid多少版本,建议升级最新试试
次新版本:vertion 1.0.23
我试一试最新版本
version 1.0.23: 所有机型,均存在这个问题; version 1.0.25:最新版本;在6.0机型上正常,7.0及以上机型-依然存在上述问题;
老哥,这个问题有进展吗,我这边也遇到了。 不过没有用tinker,我的demo可以正常拿到OAID,但是别人集成我们的SDK后,也报了同样的错。 刚开始以为是 这个方法的 Context 传空了,但是打印日志并不是空 InitSdk(Context arg0, boolean arg1, IIdentifierListener arg2)
我自己又跑demo,Context故意传空,但是InitSdk并不会出异常,而是正常返回一个错误码。
老哥,这个问题有进展吗,我这边也遇到了。 不过没有用tinker,我的demo可以正常拿到OAID,但是别人集成我们的SDK后,也报了同样的错。 刚开始以为是 这个方法的 Context 传空了,但是打印日志并不是空 InitSdk(Context arg0, boolean arg1, IIdentifierListener arg2)
我自己又跑demo,Context故意传空,但是InitSdk并不会出异常,而是正常返回一个错误码。
我这边找到原因了 我用的是1.0.25版本的,自己demo打包在 assets 目录下生成一个 zlsioh.dat 文件,但是有问题的包没有这个文件 把有问题的包加入这个文件重新签名,就可以正常使用了 但是不清楚这个文件是怎么打包就出来了
老哥,这个问题有进展吗,我这边也遇到了。 不过没有用tinker,我的demo可以正常拿到OAID,但是别人集成我们的SDK后,也报了同样的错。 刚开始以为是 这个方法的 Context 传空了,但是打印日志并不是空 InitSdk(Context arg0, boolean arg1, IIdentifierListener arg2) 我自己又跑demo,Context故意传空,但是InitSdk并不会出异常,而是正常返回一个错误码。
我这边找到原因了 我用的是1.0.25版本的,自己demo打包在 assets 目录下生成一个 zlsioh.dat 文件,但是有问题的包没有这个文件 把有问题的包加入这个文件重新签名,就可以正常使用了 但是不清楚这个文件是怎么打包就出来了
还没有解决呢; 我再看看你说的情况 能加个联系方式吗? 我的QQ:672518915
老哥这个问题有进展吗,我这个也遇到了。 不过没有用tinker,我的demo可以拿到OAID,但是别人集成我们的SDK后,也报了同样的 这个错误。刚开始以为是方法的Context 传空了,但是打印日志不是空 InitSdk(Context arg0, boolean arg1, IIdentifierListener arg2) 我自己又跑demo,上下文故意传空,但InitSdk并不会出异常,可能正常返回一个错误码。
我这个找到的原因了 我用的是 1.0.25 版本的,自己演示打包在资产目录下生成一个 zlsioh.dat 文件,但是有问题的包没有这个文件 把问题的包加入这个文件签名,就可以正常使用了, 但是这个文件是怎么打包就出来了
这个方法有效,这个zlsioh.dat来自于jar包中的assets目录下,用zip压缩工具打开jar包就可以看到
背景: OAID-Sdk:(移动安全联盟出的 移动智能终端补充设备标识体系统一调用 SDK),目前使用广泛
我在Tinker最新版本(V1.9.14.10)的Sample里,接入了OAID-Sdk;未加载补丁时,运行正常; 但是加载Tinker补丁后,就会出现OAID Sdk初始化时就Crash了; 这个问题, 应该是联系OAID的开发者,分析崩溃问题;目前也正在联系他们中,未果!
介于这两个Sdk,都是应用范围广泛,反馈到论坛,不知道大家有没有遇到呢?
异常类型:app加载补丁后,运行OAID Sdk的init()方法,就出现空对象异常
手机型号:所有机型均能复现
手机系统版本:所有系统均能复现
tinker版本:1.9.14.10
gradle版本:gradle-4.6
是否使用热更新SDK: 否
系统:如:Mac
堆栈/日志:
1). 加载补丁 01-22 16:55:44.376 4486-4486/? I/Tinker.TinkerDexLoader: classloader: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/tinker.sample.android-1/base.apk"],nativeLibraryDirectories=[/data/app/tinker.sample.android-1/lib/arm64, /data/app/tinker.sample.android-1/base.apk!/lib/arm64-v8a, /vendor/lib64, /system/lib64]]]
01-22 16:55:44.376 4486-4486/? I/Tinker.TinkerDexLoader: verify dex file:/data/user/0/tinker.sample.android/tinker/patch-132b9c57/dex/tinker_classN.apk md5, use time: 0 01-22 16:55:44.376 4486-4486/? I/Tinker.ClassLoaderAdder: installDexes dexOptDir: /data/user/0/tinker.sample.android/tinker/patch-132b9c57/odex, dex size:1 01-22 16:55:44.390 4486-4486/? I/Tinker.ClassLoaderAdder: after loaded classloader: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/user/0/tinker.sample.android/tinker/patch-132b9c57/dex/tinker_classN.apk", zip file "/data/app/tinker.sample.android-1/base.apk"],nativeLibraryDirectories=[/data/app/tinker.sample.android-1/lib/arm64, /data/app/tinker.sample.android-1/base.apk!/lib/arm64-v8a, /vendor/lib64, /system/lib64]]], dex size:1 01-22 16:55:44.390 4486-4486/? W/Tinker.ClassLoaderAdder: checkDexInstall result:true 01-22 16:55:44.391 4486-4486/? I/Tinker.IncrementCompMgr: package has no incremental component meta, skip init. 01-22 16:55:44.391 4486-4486/? I/Tinker.AppInfoChangedBlocker: tryStart: SDK_INT is less than 26, skip rest logic.
01-22 16:55:44.391 4486-4486/? I/Tinker.PatchInfo: rewritePatchInfoFile file path:/data/user/0/tinker.sample.android/tinker/patch.info , oldVer:132b9c57748d7234287223778f575979, newVer:132b9c57748d7234287223778f575979, isProtectedApp:0, isRemoveNewVersion:0, fingerprint:SMARTISAN/surabaya/surabaya:6.0.1/MXB48T/17:user/release-keys, oatDir:odex, isRemoveInterpretOATDir:0 01-22 16:55:44.393 4486-4486/? I/Tinker.TinkerLoader: tryLoadPatchFiles: load end, ok! 01-22 16:55:44.395 4486-4486/? D/Tinker.DefaultAppLike: onBaseContextAttached:
01-22 16:55:44.402 4486-4486/? W/Tinker.Tinker: tinker patch directory: /data/user/0/tinker.sample.android/tinker 01-22 16:55:44.405 4486-4486/? I/Tinker.Tinker: try to install tinker, isEnable: true, version: 1.9.14.10
2). 执行 com.bun.miitmdid.core.MdidSdkHelper.InitSdk(); 改Sdk就Crash! --------- beginning of crash 01-22 16:55:50.754 4486-4486/tinker.sample.android E/AndroidRuntime: FATAL EXCEPTION: main Process: tinker.sample.android, PID: 4486 java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference at com.bun.miitmdid.core.MdidSdkHelper.InitSdk() at tinker.sample.android.app.MainActivity.testUms(MainActivity.java:213) at tinker.sample.android.app.MainActivity.access$000(MainActivity.java:48) at tinker.sample.android.app.MainActivity$5.onClick(MainActivity.java:121) at android.view.View.performClick(View.java:5219) at android.view.View$PerformClick.run(View.java:21268) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5554) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:935) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:726)
代码情况说明: 1). OAID的官网: http://www.msa-alliance.cn/col.jsp?id=120 2). Tinker的Sample接入OAID的Demo: 我已经推送到地址(https://github.com/sailor1861/tinker/tree/tinker-1.9.14.10/),就是官方的Sample,可以直接编译; 3). 基准包apk和补丁apk: 我也已经提交到https://github.com/sailor1861/tinker/tree/tinker-1.9.14.10/tinker-sample-android/app/demo, 可以直接运行,adb push app/demo/app-debug-patch_signed_7zip.apk /mnt/sdcard/patch_signed_7zip.apk后,点击界面按钮“loadPatch”,可以复现本Case;
其他: 反编译看OAID的代码,是Jni接口返回了Null对象导致的异常; 目前没法查看OAID的C层代码,暂时无法排查Native层的代码逻辑;
由于OAID和Tinker 目前使用范围都很广, 所以反馈到论坛, 请求大家的协助,有没有遇到过?