常见问题
Issue 反馈
建议提在TinkerPatch Issue上,方便跟进状态。 也可以加入Slack Group来进行讨论。 作者也活跃在Tinker官方的QQ群(377388954)。
TinkerPatch 平台与 Tinker 项目的关系?
TinkerPatch 平台是为了更加方便大家使用 Tinker 项目而搭建的,它的 Github 地址为TinkerPatch。后期平台将逐步迭代,例如推出ABTest/安全模式等功能。
TinkerPatch 平台是否有补丁 Push 功能?
TinkerPatch 平台默认不提供补丁 Push 推送功能,大家利用自己的 Push 通道可以很方便的与平台结合起来。例如定义补丁更新的 Push 消息类型,客户端收到消息后调用以下函数即可:
TinkerPatch.with().fetchPatchUpdate(true);
TinkerPatch 自动反射 Application 的风险?
Tinker 为了实现 Application 类可修改,需要对 Application 做改造,详细可参考自定义Application类 .
这对很多应用来说,很大程度造成不少的接入成本。 TinkerPatch 平台通过自动反射 Application,可以实现无缝接入。事实上,对于反射失败的情况,我们会自动回退到代理 Application 生命周期模式,防止因为反射失败而造成应用无法启动的问题。
通过线上统计,大约有 1/1W的反射失败率。我们更加推荐大家使用 Tinker 的方式改造自身的 Application, 使兼容性高。
TinkerPatch 自动反射 Library 的风险?
Tinker 默认没有直接将补丁的 library 路径添加到 DexPathList 中,这里主要是考虑在多abi的情况下,某些机器获取的并不准确。我们需要手动加载补丁的 Library 文件,对于第三方的库文件更加难控制。
TinkerPatch 平台采用了严格的算法判别系统最终采用的 abi,线上统计的反射成功率在99.98%以上。在反射失败时,也做了自动回退等实现。大家可以根据自己的项目情况,选择使用 Tinker 推荐的方式,还是直接反射的方式。
这里需要注意的是,只有调用了 reflectPatchLibrary
反射接口后面加载的补丁 Library 才会生效。
TinkerPatch SDK 采用的 TinkerId?
TinkerPatch SDK 默认采用 appVersion 作为 TinkerId, 我们需要保证每个发布出去的基准安装包的 appVersion 都不一致。
我们可以使用 versionName 或者 githash 作为 appVersion.
如何回滚
可以简单删除当前appVersion空间来完成回滚,客户端会回滚到没有安装补丁的状态。后续可以重新建立同名appVersion。
Bad notification for startForeground
如果出现如下错误信息,请检查是否在AndroidManifest.xml
配置了icon信息。
android.app.RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException: invalid service notification: Notification(pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x40 color=0x00000000 vis=PRIVATE)