鸿蒙开发初体验(Android开发必看)( 二 )

效果如下:
鸿蒙开发初体验(Android开发必看)文章插图
2.生命周期下面再来看看主界面的生命周期 , 实现了ILifecycle接口 , 生命周期状态一共有七种
public static enum Event {UNDEFINED,ON_START,ON_INACTIVE,ON_ACTIVE,ON_BACKGROUND,ON_FOREGROUND,ON_STOP;private Event() {}}界面启动时调用onStart()和onActive()
2020-09-13 21:42:10.266 25547-25547[表情] I/System.out: onStart2020-09-13 21:42:10.284 25547-25547[表情] I/System.out: onActive点击返回键时调用
2020-09-13 21:42:35.847 25547-25547/com.example.helloworld I/System.out: onInactive2020-09-13 21:42:35.917 25547-25547/com.example.helloworld I/System.out: onBackground2020-09-13 21:42:35.920 25547-25547/com.example.helloworld I/System.out: onStop【鸿蒙开发初体验(Android开发必看)】至于UNDEFINED和ON_FOREGROUND暂时还不了解 。
3.Gradle任务(Task)甚至连gradle的Task都非常类似 , 打包命令是assembleDebug/Release
> Task :entry:preBuild> Task :entry:compileDebugNativeWithCmake> Task :entry:collectDebugDependencies> Task :entry:mergeDebugResources> Task :entry:mergeDebugProfile> Task :entry:compileDebugResources> Task :entry:compileDebugIdl> Task :entry:compileDebugRFile> Task :entry:processDebugJavaResource> Task :entry:compileDebugJavaWithJavac> Task :entry:mergeDebugJavaResource> Task :entry:generateDebugClassesJar> Task :entry:mergeDebugProjectDex> Task :entry:generateDebugShell> Task :entry:processDebugShellManifest> Task :entry:compileDebugShellResources> Task :entry:linkDebugShellResources> Task :entry:compileDebugShellJavaWithJavac> Task :entry:mergeDebugShellDex> Task :entry:packageDebugShell> Task :entry:packageDebugSimplifyShell> Task :entry:validateDebugSigning> Task :entry:signDebugShell> Task :entry:packageDebugHap> Task :entry:signDebugHap> Task :entry:assembleDebug4.配置文件配置文件是一个命名为config.json的文件 , 配置应用的一些信息
{"app": {"bundleName": "com.example.helloworld","vendor": "example","version": {"code": 1,"name": "1.0"},"apiVersion": {"compatible": 3,"target": 3}},"deviceConfig": {"default": {}},"module": {"package": "com.example.helloworld","name": ".HelloWorld","reqCapabilities": ["video_support"],"deviceType": ["wearable"],"distro": {"deliveryWithInstall": true,"moduleName": "entry","moduleType": "entry"},"abilities": [{"skills": [{"entities": ["entity.system.home"],"actions": ["action.system.home"]}],"orientation": "landscape","formEnabled": false,"name": "com.example.helloworld.MainAbility","icon": "$media:icon","description": "$string:mainability_description","label": "HelloWorld","type": "page","launchType": "standard"}]}}仔细看这个文件会越来越觉得这就是AndroidManifest.xml的json翻译版 。
反编译角度看鸿蒙既然看起来这么像安卓 , 我看来看看它编译后的产物是什么 , 是不是也能像android一样反编译得到dex文件?
鸿蒙开发初体验(Android开发必看)文章插图
编译后得到的是一个xxx.hap文件
鸿蒙开发初体验(Android开发必看)文章插图
修改它的后缀名为.zip , 解压后可以看到里面有熟悉的assets , dex , apk文件等 , 把这个apk文件安装后发现并不能使用 。
鸿蒙开发初体验(Android开发必看)文章插图
下面我们先反编译这个classes.dex文件第一个dex反编译后出现错误
~/Desktop/fanbianyi/dex2jar-2.0 ? sh d2j-dex2jar.sh classes3.dexdex2jar classes3.dex -> ./classes3-dex2jar.jarcom.googlecode.d2j.DexException: not support version.at com.googlecode.d2j.reader.DexFileReader.(DexFileReader.java:151)at com.googlecode.d2j.reader.DexFileReader.(DexFileReader.java:211)at com.googlecode.dex2jar.tools.Dex2jarCmd.doCommandLine(Dex2jarCmd.java:104)at com.googlecode.dex2jar.tools.BaseCmd.doMain(BaseCmd.java:288)at com.googlecode.dex2jar.tools.Dex2jarCmd.main(Dex2jarCmd.java:32)原因是我们的工具版本太低了 , 解决方案在这 , 升级版本后反编译成功后为classes3-dex2jar.jar , 打开可以看到
鸿蒙开发初体验(Android开发必看)文章插图
这里多了个ResourceTable文件 , 就是我们的资源id表 。 这里的dex文件包含的是我们开发的代码 。
下面我们来反编译apk文件 , 解压后可以看到 , 里面是我们熟悉的内容
鸿蒙开发初体验(Android开发必看)文章插图
AndroidManifest.xml文件如下
鸿蒙开发初体验(Android开发必看)文章插图
反编译该dex文件可以看到 , MainAbilityShellActivity最终是继承了AbilityShellActivity