转自:http://www.fluidea.cn/blog/archives/308
了解Android SDK开发的朋友都知道,在Android应用中,界面显示由Activity对象来完成,一个程序包含一个或多个Activity,Activity之间可以相互调用,也可以和其他程序中的Activity交互。那么,使用air开发的Android应用和原生程序有什么区别?是否包含Activity?如何和其他程序交互?
APK的文件结构
和原生Android应用一样,AIR程序也包含一个Activity,用来检测AIR Runtime、加载并运行主SWF文件。Adobe并没有提供相关的信息,事实上,对于Flash开发者来说,也没必要了解这些信息。不过,我们可以借助其他工具获取AIR Android应用的秘密,那就是使用apktool对APK文件进行解包。
APK文件本身是一个压缩包,直接用解压工具即可打开,但里面的文件都已被编码为二进制文件格式,不能直接看,比如程序描述文件AndroidManifest.xml,使用apktool工具可以将这些文件解码还原出来。
apktool(http://code.google.com/p/android-apktool/)是一个非常著名的开源工具包,功能很强大,可以解包APK文件并重新打包,常用来汉化Android应用。
apktool的用法很简单,下载解压后,将程序路径添加到系统的环境变量就可以使用了。以<AIR Android应用开发实战>第二章的黑白棋程序为例,使用以下命令解包APK文件:
apktool d FlipIt.apk
运行后目录下会生成一个名为“FlipIt”的文件夹,进去就能看到程序编译后的结构,如下图所示:
AndroidManifest.xml是程序描述文件,包含了程序的重要信息:
<?xml version="1.0" encoding="utf-8"?> <manifest android:versionCode="1000" android:versionName="@string/app_version" android:installLocation="auto" package="air.org.fluidea.FlipIt" xmlns:android="http://schemas.android.com/apk/res/android"> <application android:label="@string/app_name" android:icon="@drawable/icon" android:hardwareAccelerated="true"> <activity android:theme="@style/Theme.NoShadow" android:label="@string/app_name" android:name=".AppEntry" android:launchMode="singleTask" android:screenOrientation="user" android:configChanges="keyboardHidden|orientation" android:windowSoftInputMode="stateHidden|adjustResize"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="fullScreen" android:value="true" /> <meta-data android:name="uniqueappversionid" android:value="93897e31-13cd-4501-8f60-cc80412af678" /> <meta-data android:name="initialcontent" android:value="FlipIt.swf" /> </activity> </application> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="14" /> <uses-permission android:name="android.permission.INTERNET" /> </manifest>
package属性标明了整个程序的包路径,对比AIR程序中的程序描述文件,我们会发现AIR的ADT打包工具自动在id前面加上了"air."前缀。
Activity节点则清楚地显示,程序包含一个主Activity,且名称为“AppEntry"。细心的读者已经发现,解包生成的文件中有一个smali文件夹,下面对应一个air.org.fluidea.FlipIt.AppEntry.smali文件,还有一个com.adobe.ResourceMap.smali,看上去很像是一些类文件。Smali是Android程序的反编译代码,类似于一种中间代码,虽然并不是源码,但也是基于文本的。
AIR程序的运行流程
AppEntry是AIR SDK为每个AIR应用创建的主Activity,可以看作是一个外壳,用来检测AIR runtime的状态、启动AIR Runtime、加载并运行主SWF文件。
Smali文件虽然可以读,但语法很生涩,如果用反编译工具比如dex2jar和jd-GUI来反编译APK文件,就可以得到可读性更强的Java源代码。
下面是反编译后AppEntry.java文件中的一段程序入口代码:
public void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); long l = new Date().getTime(); Log.i("StartupTime1", ":" + l); boolean bool = loadCaptiveRuntimeClasses(); if (!bool) if ((!sRuntimeClassesLoaded) && (!isRuntimeInstalled())) if (isRuntimeOnExternalStorage()) showRuntimeOnExternalStorageDialog(); while (true) { return; showRuntimeNotInstalledDialog(); continue; loadSharedRuntimeDex(); if (sRuntimeClassesLoaded) { createActivityWrapper(bool); InvokeWrapperOnCreate(); } else if (bool) { KillSelf(); } else { launchAIRService(); } } }
虽然反编译不能得到完全准确的代码,但我们已经足以看清整个程序的运行流程。首先,程序启动后会去检测是否安装了AIR Runtime,如果捆绑了AIR Runtime则使用自带的库,反之,提醒用户安装AIR Runtime;如果安装了AIR Runtime,就去加载共享库,也就是lib目录下的libNativeABI.so库,然后创建相关的服务,加载运行主SWF。
Ok,到这里为止,我们对AIR Android程序有了更深入的了解。知道这些,对AIR开发还是有很多帮助的,比如,如何实现AIR程序和外部程序的交互,如何从外部启动AIR程序?AIR程序有怎么启动其他程序?
相关推荐
Cisco-vWLC-AIR-CTVM-K9-7-6-120-0.ova
AIR-PolSAR-Seg数据集
Laravel开发-veritrans-jp-air-web-laravel Laravel5_使用_決済__veritransjp air web
该iso已经打包成了ova,下载之后可以直接拖到VMware即可开机配置。该镜像名称为Cisco-vWLC-AIR-CTVM-7-3-101-0.ova。至于如何在eve中桥接到vWLC可自行百度也可留言给我~
网络调试神器:WiFi ADB - Debug Over Air 2.1.3 - 解决了设置build.prop的问题,每台手机都要设置非常麻烦; - 傻瓜式一键开启,点击就开始、再点就关闭,就是个开关; - 连接(指定)WIFI自动开启网络调试,非常方便...
Android移动开发-基于Adobe AIR官方网站的全套代码,让开发者一目了然
AIR-CTVM-K9-8-5-131-0.aes 299.13 MB AIR_CTVM_LARGE-K9_8_5_131_0.aes 299.12 MB AIR-CTVM-K9-8-3-143-0.aes 294.47 MB AIR_CTVM_LARGE-K9_8_3_143_0.aes 294.47 MB AIR-CTVM-K9-8-7-106-0.aes 250.76 MB AIR_CTVM...
AIR-CT2500-K9-8-5-182-0.aes WLC 2504固件,配合AIR-CT2500-AP_BUNDLE-K9-8-5-182-0.aes一起使用 MD5 Checksum : 0ec0927df061c754ebbd9c5baa9047ad SHA512 Checksum : 8de868143326d027b175f99801287b7e65d0d4...
思科AIR-CT5500-K9-8-0-121控制器8.0镜像文件,需要的请下载
of air-to-ground wireless services. These applications include the rapid recovery of damaged terrestrial wireless infrastructure due to a natural disaster, as well as the fulfillment of sudden ...
Virtual Wireless Controller Release 8.10.130 最新版本的虚拟控制器, 小公司版本,非large,好像支持最大200AP
Virtual Wireless Controller 小公司版本 带有 60 天评估许可证的 Cisco 无线局域网小型虚拟控制器安装。 Release 8.5.171.0 思科虚拟控制器,vWLC,AIR_CTVM-K9_8_5_171...Modules: AIR-RM3010L-x-K9 and AIR-RM3000M
AIR-AP1830-K9-ME-8-10-130-0.zip
Air724UG-Air723UG-封装(PADS9.5格式)
airplay协议,编译工具 VS2017 苹果手机投屏源码。 开源项目来源:...1)删除了一个工程,2)删除了一些文件,3)修改一些目录结构 4)初始化的修改了屏幕比例。5)修改编译工具为vs2017和SDK。
AIR-AP1830-K9-8-2-166-0.tar,是cisco AP1830系列的IOS软件,可以配置成ME模式,欢迎大家下载
思科2504最新控制器固件AIR-CT2500-K9-8-5-161-0最新也是最终的固件,8.0以上版本可以直接升级,7.0版本需要先升级到AIR-CT2500-K9-8-0-152-0.aes过渡版本。
使用Flex开发Adobe AIR程序--桌面快捷方式管理器,适合新手进一步熟悉api,遇到典型的问题,1)调用外部exe文件,2)打包,3)读写文件,路径问题,...
CISCO AIR-CT2504 Cisco 2504 Wireless Controller AIR-CT2500-K9-7-5-102-0.aes 本分卷由2345好压(Haozip)生成,请使用2345好压来解压。 分卷文件共有以下3个: AIR-CT2500-K9-7-5-102-0.haozip01.7z AIR-CT...
CISOC 无线AP 3802ME模式固件AIR-AP3800-K9-ME-8-10-130-0