某些机器上,多 abi 的判断并不准确。我们更希望通过封装代码来支持。对于资源,我们处理是跟 dex 差不多,启动时即反射调用。
Q12:是否有动态下发第三方的 jar 包,如何调用第三方 jar 包的方法。反射?
Tinker 框架只会合成输入 pattern 下的 dex,而且在启动的时候把他们加载。如果调用的问题,使用者自己决定的。
Q13:差量下发更新,合成的时候是否会有性能问题?是否支持(图片)资源的差量下发?
合成的话,我们对于内存、GC 以及耗时都有大量的优化。即使是微信这样体量的 app,从外部监控来看,大部分用户都能在60秒以内完成。
Q14:需要在补丁合成加载之后才进入程序(交由用户操作)吗?
合成与加载是分开两个过程,我们的原则是除非合成已经彻底完成,不然其他进程是不会去加载的。即补丁不会去影相其他进程的加载性能
Q15:代码完全开源吗?
对的,所有代码都会开源,从编译到各个模块。
Q16:xposed 框架的那些插件,是通过反射调用替换值?那一般有啥方式保证安全性?保证 app 数据的安全性?
它们只要是反射调用微信的某些类,达到某些功能的篡改。事实上,如果在 root 下,单纯的保护是比较难的。
Q17:为什么要在补丁成功的时候加结果回调是为了启动程序么,但是和您刚才说的为了实时上报?
回调结果是为了给使用者一个回调,在这个回调里面它可以做各种各样的工作。例如我弹出升级完成的 dialog。我设置锁屏或者程序进入后台后自杀,这可以加快补丁的应用
Q18:既然能加载 so 和资源,Tinker 能用于插件化吗?
Tinker 当前没有做四大组件的代理,但是 Tinker 未来绝对是具备这个能力的
Q19:merge 失败后的补救机制是怎样的?可以回退么?
merge 失败,我们会收到回调,这个时候我们不会加载的。在默认实现里面,我们会删除这些临时文件。
Q20:这套框架目前是多少个人在维护呢?
Tinker当前有3个人在开发维护
Q21:请问资源是编译到 arsc 中还是反射加载二进制流?
你的问题我不太明白,资源我们采用的是全量替换,即完全使用新的资源包
Q22:在加入 Tinker 之后,对各平台的加固适配如何?微信是否有加固?
微信没有使用加固,但是加固应该是不影响的,只需要把接口改一下就可以了。
?