今日手欠,升级项目依赖的 DJI MSDK 到最新版本,不出意外果然又出了意外。
问题及解决
原来的版本是 5.10.0
,升级到 5.11.0
,编译正常,运行直接闪崩。日志是这样的:
FATAL EXCEPTION: DJIExecutor IO #1 (Ask Gemini)
Process: com.********.****, PID: 1927
java.lang.AbstractMethodError: abstract method "void xcrash.ILogger.e(java.lang.String, java.lang.String, java.lang.Throwable)"
at xcrash.NativeHandler.initialize(NativeHandler.java:152)
at xcrash.XCrash.init(XCrash.java:189)
at dji.v5.inner.analytics.crash.CrashReport.init(CrashReport.java:21)
at dji.v5.manager.SDKManager.co_a(SDKManager.java:19)
at dji.v5.manager.SDKManager.lambda$qQ8vfHm0Pi84vcg6DvVpTrMbJgY(SDKManager.java)
at dji.v5.manager.-$$Lambda$SDKManager$qQ8vfHm0Pi84vcg6DvVpTrMbJgY.run(lambda)
解决方法很简单,添加在应用启动时初始化的语句。
class AwesomeApp : Application(), DefaultLifecycleObserver {
...
override fun attachBaseContext(base: Context?) {
...
xcrash.XCrash.init(this)
}
...
}
原因没什么值得分析的,无非是 DJI Mobile SDK 加上了应用崩溃收集的机制,然后写文档的又一次觉得这事儿不值一提(v5.11.0发布记录)。
类似的问题还出现在版本 5.9.2
升级到 5.10.0
时。这个版本里 MSDK 悄悄的把 com.secneo.sdk.Helper
给干掉了,从而导致编译直接不过。解决方案也很简单,改包名。
class AwesomeApp : Application(), DefaultLifecycleObserver {
...
override fun attachBaseContext(base: Context?) {
...
// com.secneo.sdk.Helper.install(this)
com.cySdkyc.clx.Helper.install(this)
}
...
}
当时的文档里也没有任何说明,不过今天(2024.11.28)我在做查证时,发现这个说明给补上了(v5.10.0发布记录)。
吐槽
这几年断断续续在做 DJI 生态的应用开发,与官方的 PSDK 和 MSDK 集成都有涉及,总体体验非常一般。对于 SDK 的 API 设计不做评价,但单从文档质量和社区支持的情况来,只能说大疆不重视吧。
顺手整理了一个各依赖都追新的简单起手项目:dji-msdk-starter,可以作为新项目的参考。