Tencent / tinker

Tinker is a hot-fix solution library for Android, it supports dex, library and resources update without reinstall apk.
Other
17.16k stars 3.33k forks source link

【请求协助】OAID-sdk和Tinker的热补丁有冲突: 加载Tinker补丁后,OAID Sdk初始化时就Crash #1522

Open sailor1861 opened 3 years ago

sailor1861 commented 3 years ago

背景: 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 目前使用范围都很广, 所以反馈到论坛, 请求大家的协助,有没有遇到过?

最新进展

yintao666 commented 3 years ago

我也是为这个问题困扰了,之前我用的是阿里Sophix,发现OAID初始化就空指针,不修复没事,修复了OAID反而成为BUG了,联系OAID那边的人,Email也不回复,结果Tinker也不行,我估计是so文件被加固了,导致的热修复不行,只有等待OAID那边的修复了,没办法啦。

sailor1861 commented 3 years ago

,不修复没事,修复了OAID反而成为BUG了

是的, 联系OAID,目前也没有回复😢

yintao666 commented 3 years ago

兄弟 这个问题我已经解决了 你解决了吗 我可以帮助到你

sailor1861 commented 3 years ago

兄弟 这个问题我已经解决了 你解决了吗 我可以帮助到你

还没有解决呢 能加个联系方式吗? 我的QQ:672518915

tigerose commented 3 years ago

oaid的人十分傲慢,email不会,电话不接,公众号也没有吭声。之前升了一个版本,解决了“易盾”加固toast,而已。

youxiachai commented 3 years ago

奇怪了...我也接了, 倒是没事...

sailor1861 commented 3 years ago

你下发并加载一个补丁,没有问题吗?我是在Tinker最新的sample里测试的哦; 加载补丁,就会回出现oaid的crash

sailor1861 commented 3 years ago

oaid的人十分傲慢,email不会,电话不接,公众号也没有吭声。之前升了一个版本,解决了“易盾”加固toast,而已。

哥们,你接入的oaid和Tinker加载补丁, 有冲突吗?

yintao666 commented 3 years ago

如果引入了友盟,可直接使用友盟获取OAID,或者自己手动对接每个厂家的OAID模块,再其次,就只有等OAID修改,我是直接用的友盟,项目已经正常运行了很久了.

sailor1861 commented 3 years ago

如果引入了友盟,可直接使用友盟获取OAID,或者自己手动对接每个厂家的OAID模块,再其次,就只有等OAID修改,我是直接用的友盟,项目已经正常运行了很久了.

哥们, 我之前咨询过你; 我们现在,就是 自己手动对接每个厂家的OAID模块; 就是想,能否推动下oaid修改下这个问题;

今天看 有人反馈,说没有问题; 确定一下, 是否我的接入有问题?

tigerose commented 3 years ago

oaid的人十分傲慢,email不会,电话不接,公众号也没有吭声。之前升了一个版本,解决了“易盾”加固toast,而已。

哥们,你接入的oaid和Tinker加载补丁, 有冲突吗?

有啊,我记得只要打了补丁,oaid就会故障; 我把oaid的,放到独立进程去跑了,它自生自灭吧,崩溃不要影响我就行了

yintao666 commented 3 years ago

不是你接入的问题,我问了用的阿里的,我还问了阿里的客服,他们说只有等OAID改。

sailor1861 commented 2 years ago

下载最新的oaid-sdk-1.1.0.aar; 该问题已经修正了; 不再复现闪退了; over