HarmonyOs和Android的关联性4:Ability到底是啥 原创
HarmonyOs和Android的关联性3:寻找activity
链接:https://harmonyos.51cto.com/posts/7598
在上一篇中我们大体得到结论,每个Ability都会生成对应的AbilityShellActivity,而AbilityShellActivity中持有AbilityShellActivityDelegate,然后调用了Activity中的函数,其实这个结论是不完全对的。
看一下官方对Ability的定义,感觉Ability同时具备了安卓中service和provide的功能。
我们通过例子查看一下,建立一个Service模板的PA类型的Ability,定义如下:
然后反编译查看,发现这个Ability生成的不是AbilityShellActivity,而是AbilityShellSevice
Data模板的Ability不用试了,应该有个类叫做AbilityShellProvider,鸿蒙中对应的相关类如下:
着重分析harmony里调用安卓类库的地方。
今天总揽以下几个文件的关联关系,从类的继承关系上看,如下:
public class AbilityShellActivity extends Activity implements IAbilityShell {
public class AbilityShellActivityDelegate extends AbilityShellDelegate {
public class AbilityShellDelegate {
public class AbilityShellObserver extends ContentObserver {
public class AbilityShellProvider extends ContentProvider {
public class AbilityShellProviderDelegate extends AbilityShellDelegate {
public class AbilityShellService extends Service {
public class AbilityShellServiceDelegate extends AbilityShellDelegate {
看一下这几个定义就明白了,就是鸿蒙吧activity,service和provide都统一抽象成ability了,在ability中再去区分
类型,AbilityShell有Activity,Service,Provider三种,AbilityShellDelegate也有ctivity,Service,Provider三种,然后在里边分别再去调用android中的Activity,Service,Provider,从而实现了对android组件的调用与管理。
但是我们在开发工具里是看不到android类库的,HarmonyOs开发工具里android所有的api都被隐藏了,我们只能完全根据鸿蒙的api就写app,这也正常,如果可以调用android的东西,还叫什么鸿蒙开发呀。
但是开发工具生成的hap文件还是有apk的文件的,我想这是有两方面的考虑,一是鸿蒙开发速度还没有那么快,暂时还不能完全抛弃android,二是鸿蒙要兼容安卓,也不能去掉android的api,所以鸿蒙的framework包含了安卓framework,在她基础上增加了鸿蒙的java包,如下包:
这些可以说是鸿蒙framework层的代码目录,因为鸿蒙生态还没做起来,所以安卓和鸿蒙并存,等鸿蒙做起来后,我想安卓的framework的代码就会去掉,到那时候安卓apk就不能安装在鸿蒙os上了