-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
增加 Activity 的 onCreateOptionsMenu 测试用例 #94
Conversation
这个跟#92 就不一样了。#92 中的API是app代码调用Android系统。而这个问题中的API是Android系统回调app代码。 一般的Android系统回调应该是先回调到 下面贴的修复代码中 前面说的,你可能还是一时很难看懂,建议在正常安装的app和插件环境运行的app上,都挂上断点看看调用栈,就能理解了。我修复这个问题时也是这样做的。 这是修复的patch,还是由你合入进来吧。你把你添加的测试用例再改改,去掉跟这个问题没关系的部分。
|
我梳理一下 首先各个core库的继承关系loader compileOnly runtime, common; api load-parameters 它们的职责大概如下
Shadow加载用户的插件Activity流程
补充一下,ShadowActivityDelegate核心是 val aClass = mPluginClassLoader.loadClass(pluginActivityClassName)
val pluginActivity = PluginActivity::class.java.cast(aClass.newInstance())
initPluginActivity(pluginActivity)
mPluginActivity = pluginActivity
...
mHostActivityDelegator.window.callback = pluginActivity 我们知道 解决测试用例的问题因为ShadowActivity是Shadow SDK的自定义类,不是官方Activity,所以用户的插件Activity被字节码编辑成ShadowActivity是有风险的,主要是代理的覆盖面够不够广。对Shadow来说,如果做到
最后的解决就是加转调。onCreateOptionsMenu 是系统回调的方法,前面 ShadowActivityDelegate 里设置系统回调代理是给PluginActivity,所以这个转调需要在PluginActivity里加。剩下的就是参考Android官方,把系统回调给代理好。 end终于理解了,awsl |
理解的不错。只有common的理解有点偏。 common中其实主要的类是InstalledApk类。ContentProvider相关的类其实是runtime,只是因为由于ContentProvider原理上的限制必须打包在宿主中,所以顺道放在common了。所以它们的包名还是在runtime之下的。 单看core层,common就是loader和manager之间公用的类。加上dynamic层,common就是core层中不能动态化的部分。由于只看core层,core层就都应该是打包在宿主中的,那common改名成host也很奇怪,所以这个名字我也挺纠结的。 相信你基本掌握了扩展Shadow支持系统API的方法,期待你将未来你用的实现也都贡献回Shadow。 |
再给一点贡献代码方面的建议。
最后,其实以上建议做不到都没关系,最重要的还是参与进来。 |
嗯嗯,以后提交PR会多加注意一下,感谢 @shifujun 耐心指导 |
增加 Activity 的 onCreateOptionsMenu 测试用例 (Tencent#94)
我又来啦
在
sample-normal-app
里可以打出期待效果,但是在sample-host
里没有。下面两张截图分别是在sample-normal-app
和sample-host
截的。在
ShadowActivity
及mHostActivityDelegator
都没有找到onCreateOptionsMenu
方法,然后试了下在ShadowActivity
里加个转调关系如下:事实证明举一反三失败。呀!这就触及我的知识盲区啦!怎么修复呢?