鸿蒙开发初体验(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:assembleDebug
4.配置文件配置文件是一个命名为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文件?
文章插图
编译后得到的是一个xxx.hap文件
文章插图
修改它的后缀名为.zip , 解压后可以看到里面有熟悉的assets , dex , apk文件等 , 把这个apk文件安装后发现并不能使用 。
文章插图
下面我们先反编译这个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.
原因是我们的工具版本太低了 , 解决方案在这 , 升级版本后反编译成功后为classes3-dex2jar.jar , 打开可以看到
文章插图
这里多了个ResourceTable文件 , 就是我们的资源id表 。 这里的dex文件包含的是我们开发的代码 。
下面我们来反编译apk文件 , 解压后可以看到 , 里面是我们熟悉的内容
文章插图
AndroidManifest.xml文件如下
文章插图
反编译该dex文件可以看到 , MainAbilityShellActivity最终是继承了AbilityShellActivity
- 黑莓(BB.US)盘前涨逾32%,将与亚马逊开发智能汽车数据平台|美股异动 | US
- 当初|这是我的第一部华为手机,当初花6799元买的,现在“一文不值”?
- 大乱斗|社区团购大乱斗
- 开发自|不妥协不追随 Member’s Mark升级背后的“山姆哲学”
- 确认|三星确认正在开发“轻薄轻巧”的可折叠手机
- 群星|初心资本田江川:群星闪耀,中国软件的黄金时代正在到来
- 平台|207家平台有81家失踪,网约车市场泡沫初现
- 推广|Josh Elman加盟苹果 负责开发者关系与软件推广工作
- 商标|三星申请SmartTag商标 或于2021年初发布智能追踪器
- 微信广告|小程序开发者看过来 流量变现倍增的秘籍来了!