Skip to content
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

Daily Report 2019-05 Liu Xiaoxu #2591

Open
xiaoxu8 opened this issue May 6, 2019 · 16 comments
Open

Daily Report 2019-05 Liu Xiaoxu #2591

xiaoxu8 opened this issue May 6, 2019 · 16 comments

Comments

@xiaoxu8
Copy link
Collaborator

xiaoxu8 commented May 6, 2019

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

@xiaoxu8
Copy link
Collaborator Author

xiaoxu8 commented May 7, 2019

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

@xiaoxu8
Copy link
Collaborator Author

xiaoxu8 commented May 8, 2019

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

@xiaoxu8
Copy link
Collaborator Author

xiaoxu8 commented May 9, 2019

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
Copy link
Collaborator Author

xiaoxu8 commented May 10, 2019

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

@xiaoxu8
Copy link
Collaborator Author

xiaoxu8 commented May 13, 2019

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

@xiaoxu8
Copy link
Collaborator Author

xiaoxu8 commented May 14, 2019

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

@xiaoxu8
Copy link
Collaborator Author

xiaoxu8 commented May 15, 2019

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

@xiaoxu8
Copy link
Collaborator Author

xiaoxu8 commented May 16, 2019

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

@xiaoxu8
Copy link
Collaborator Author

xiaoxu8 commented May 21, 2019

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

@xiaoxu8
Copy link
Collaborator Author

xiaoxu8 commented May 22, 2019

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

@xiaoxu8
Copy link
Collaborator Author

xiaoxu8 commented May 23, 2019

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

@xiaoxu8
Copy link
Collaborator Author

xiaoxu8 commented May 24, 2019

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

@xiaoxu8
Copy link
Collaborator Author

xiaoxu8 commented May 28, 2019

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

@xiaoxu8
Copy link
Collaborator Author

xiaoxu8 commented May 29, 2019

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

@xiaoxu8
Copy link
Collaborator Author

xiaoxu8 commented May 30, 2019

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

@xiaoxu8
Copy link
Collaborator Author

xiaoxu8 commented May 31, 2019

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant