openthos / multiwin-analysis

4 stars 14 forks source link

Daily Report 2019-05 Liu Xiaoxu #2591

Open xiaoxu8 opened 5 years ago

xiaoxu8 commented 5 years ago

05/05 report: 1.分析oto8应用窗口手机模式适配,目前通过拦截context,修改应用获取的density,宽高,目前能实现手机模式适配,但是应用关闭重新打开后,应用部分控件显示错乱,正在分析原因。

xiaoxu8 commented 5 years ago

05/06 report: 1.oto8应用窗口手机模式适配,目前通过ContextImpl的getApplicationContext方法,拦截应用获取的context,并修改Resource持有的DisplayMetrics数据,返回给应用一套伪集;同时在DecorView的onConfigurationChanged方法中同步修改Resource持有的DisplayMetrics数据,返回给当前页面伪集。通过对DisplayMetrics拦截,伪装,目前能实现应用窗口手机模式运行。其中应用内部分弹窗位置显示错位,目前正在分析原因。

xiaoxu8 commented 5 years ago

05/07 report: 1.分析oto8微信context的创建、调用流程。

xiaoxu8 commented 5 years ago

05/08 report: 1.分析oto8context的创建、调用流程。context是Android应用的运行环境,它有两个子类,封装类ContextWrapper,实现类ContextImpl。封装类ContextWrapper有三个子类:ContextThemeWrapper、Application、Service;而ContextThemeWrapper有两个子类:Activity、DecorContext,其中DecorContext是系统隐藏类,第三方应用无法使用。提供给第三方应用获取的context,主要包括:Activity、Application、Service。Activity、Application、Service都是在ActivityThread中创建,创建过程中通过ContextImpl的createAppContext、createActivityContext方法创建ContextImpl对象,然后Activity、Service通过attach方法持有ContextImpl对象,最终封装类ContextWrapper的方法都是在实现类ContextImpl中实现的。

xiaoxu8 commented 5 years ago

05/09 report: 1.分析oto8 微信创建的context实例对象,以及Resources实例对象,尝试对微信获取的Resources对象中DisplayMetrics的density、scaledDensity、widthPixels、heightPixels拦截、伪装。

xiaoxu8 commented 5 years ago

05/10 report: 1.接着分析oto8微信创建context、Resources实例对象的流程,以及微信获取屏幕density的调用流程,尝试拦截伪装density。

xiaoxu8 commented 5 years ago

05/13 report: 1.oto8微信,应用获取Resources的最终实现在ContextImpl的getResources方法中,尝试在getResources方法中拦截mResources的DisplayMetrics相关参数,并返回修改后的数据。微信欢迎界面登录、注册按钮显示错乱,接下来分析此问题。

xiaoxu8 commented 5 years ago

05/14 report: 1.oto8针对微信定义的NewPhoneWindow.NewDecorView中,应用获取的Resources是createActivityContext时创建的Resources并非通过Activity的getResources方法获取的资源文件。这样在NewDecorView的getResources方法对DisplayMetrics数据拦截、伪装,并且在onConfigurationChanged中对Activity.getResources获得DisplayMetrics进行监听并伪装数据,实现微信自定义density下运行效果。而微信朋友圈的图片显示错乱,正在分析问题根源

xiaoxu8 commented 5 years ago

05/15 report: 1.分析oto8微信获取DisplayMetrics对象的流程,以及更新流程。

xiaoxu8 commented 5 years ago

05/20 report: 1.oto8通过拦截createAppContext、createActivityContext中Resources的DisplayMetrics对象,并伪装数据,同时拦截Resources中updateConfiguration对DisplayMetrics的更新请求,初步完成api拦截、伪装,以微信为例,进入朋友圈界面,然后返回好友界面,拦截、伪装API会失效,分析发现应用是通过DisplayMetrics的setTo方法更新数据,同时在此处拦截DisplayMetrics更新,微信好友页面根据伪装的DisplayMetrics显示。朋友圈界面滚动数据时,拦截、伪装API会部分失效,且进入朋友圈界面时,应用窗口会向左上角偏移,接下来分析这两个问题。

xiaoxu8 commented 5 years ago

05/21 report: 1.oto8微信朋友圈页面拦截、伪装API不生效,通过分析发现在NewPhoneWindow的getSpecialDecor方法中mAppContext.getResources().getDisplayMetrics()获取的DisplayMetrics实例相关参数被还原默认值,并更新应用Resources持有的DisplayMetrics,目前在DisplayMetrics的setTo方法中拦截更新,拦截、伪装的API对朋友圈页面部分内容还是不生效,可以在ContextImpl的getResources方法拦截、伪装DisplayMetrics的数据,解决朋友圈不生效的问题。

xiaoxu8 commented 5 years ago

05/22 report: 1.分析oto8微信朋友圈图片非满铺窗口显示的问题,当针对微信拦截、伪装Resources持有的DisplayMetrics对象数据时,朋友圈图片不能满铺窗口显示,通过定位BitMap与densityDpi的关联性,BitMap的宽高通过调用getScaledWidth、getScaledHeight进行缩放显示,接口的参数是targetDensity,对于微信,当接口参数targetDensity与BitMap持有的mDensity变量不一致时,出现图片不能满铺窗口显示的问题。简单修改保持两个变量统一,调试可解决此问题。但此解决方案不能用于所有应用,后续需要针对问题应用设计相应解决方案。

xiaoxu8 commented 5 years ago

05/23 report: 1.oto8 针对微信设计特殊的ContextImpl实现类,实现对Resources资源数据拦截、伪装,定义NewContextImpl并继承ContextImpl,修改creatAppContext、createActivityContext、getResources接口实现数据拦截、伪装。

xiaoxu8 commented 5 years ago

05/27 report: 1.重构窗口标题栏UI,增加窗口兼容性设置弹窗。

xiaoxu8 commented 5 years ago

05/28 report: 1.oto8窗口兼容性弹窗,已完成弹出功能,下一步增加弹窗阴影效果

xiaoxu8 commented 5 years ago

05/29 report: 1.oto8窗口兼容性弹窗,弹窗已设置系统默认阴影效果,并增加状态选择功能

xiaoxu8 commented 5 years ago

5/31 report: 1.oto8标题栏兼容性设置弹窗,解决因应用主题影响,选项点击选中状态背景改变问题。