[返回手机数码首页]·[所有跟帖]·[ 回复本帖 ] ·[热门原创] ·[繁體閱讀]·[坛主管理]

我的第一个鸿蒙app,以及所见内容

送交者: 都是可怜人间[★★★Mia&Levin★★★] 于 2020-12-29 9:33 已读 2149 次  

都是可怜人间的个人频道

+关注

知乎上很火的帖子,转过来大家看看。


首先声明一下,我不会得出鸿蒙是安卓换皮这样的结论,这话题见仁见智,这里我只记录开发过程中所见到的内容,该文章仅做鸿蒙开发交流


做为一名安卓开发……


见到鸿蒙2.0上线了,当然得体验一下,然后和其他猿一样,成功地看到让人激动的"hello world"


可是接下来看到的,到让我感到意外,因为run之后,我竟然在build -> intermediates -> shell -> debug -> src -> main -> java -> com -> 包名 目录下看到安卓的原生代码


首先是androidManifest文件夹的内容


从内容可以看到,application导向ShellMyApplication,第一个启动的activity为MainAbilityShellActivity,也就是build包里的那几个文件


点开之后可以看到父类在ohos.abilityshell包里,最终继承的是安卓的activity和application


ohos.abilityshell包下还有安卓的四大组件


从代码里可以看到鸿蒙在这里给activity,service,provider分别写了代理类,有兴趣的可以自己去看源码


ohos.abilityshell里依赖的android,主模块是无法直接调用的,但这个对安卓开发不是难事,只要在主模块添加相同的依赖,就可以调用相对应的代码了,于是我在build.gradle里依赖了安卓包:implementation 'com.google.android:android:4.1.1.4'


如果鸿蒙app背后真的有一个安卓的application在运行,那么我们肯定能获取到这个application的实例,这对安卓开发来说,这也不是难事,写个反射就行


反射获取application


打印一下application的类名,顺便弹个Toast验证一下application是否可用……


然后奇迹发生了……


打印结果证明确实有个ShellMyApplication在背后运行


Toast也正常弹出


Toast正常弹出,除了证明鸿蒙背后有个application在运行外,还证明了windowManager也是安卓的,继续推论的话,framework层也是安卓的……呃,扯远了


再看看activity是否被调用,验证也很简单,registerActivityLifecycleCallbacks监听一下就行


为了监听到activity的生命周期,我执行的操作:打开app->退回桌面->再打开app,结果嘛,当然一点意外都没有……MainAbilityShellActivity走了个完整的生命周期


application拿到了,那就彻底放飞自我……


首先是用安卓的方法打开自己的设置界面


结果当然也没意外呢


麻利地打开了……


再试试打开其他app,尝试打开拨号界面……



正常打开了,这至少证明鸿蒙系统里那个系统拨号app是个安卓app


打印了几次activity的生命周期,发现鸿蒙的AbilitySlice都是在activity的0nstart()方法之后运行,所以我尝试在activity的onResume方法里添加给activity添加几个控件…


运行结果


查看绘制布局,发现在activity渲染的是一个整体


断点分析后发现activity只有一个子控件:AGPContainerView,数据太多这里就不截图了


打印这个类和他的父类,发现AGPContainerView是一个SurfaceView


从这些信息大致可以推断出鸿蒙重新定义了一套新的ui api(ohos.agp.components包),那些承继自Component的控件,比如Text,Button,DirectionalLayout等都会在SurfaceView绘制


至于鸿蒙为什么要重新定义一套新的ui,那就不得而知了

喜欢都是可怜人间朋友的这个贴子的话, 请点这里投票,“赞”助支持!

内容来自网友分享,若违规或者侵犯您的权益,请联系我们

所有跟帖:   ( 主贴楼主有权删除不文明回复,拉黑不受欢迎的用户 )


用户名: 密码: [--注册ID--]

标 题:

粗体 斜体 下划线 居中 插入图片插入图片 插入Flash插入Flash动画


     图片上传  Youtube代码器  预览辅助



[ 留园条例 ] [ 广告服务 ] [ 联系我们 ] [ 个人帐户 ] [ 创建您的定制新论坛频道 ] [ Contact us ]