教程说明:以下教程为针对使用 Adobe 官方工具 Flash 与 Flex 的开发者用户,教程将尽可能的简单化,不会加入其它不相关的内容。如果对教程中的步骤有任何疑问,请直接登录网站后台留言提交问题(因为以下内容本身属于开发类技术,已超出本站客服所能提供的在线技术支持范围,请勿必在后台提交。在线客服仅提供软件功能介绍、杂志制作指导、购买咨讯、用户名和邮箱找回等服务),本站技术将会尽可能的详细描述(如通过截图加文字的方式给予说明)。


准备工作
因为是嵌入式开发,所以首先要有被嵌入的资源文件。这一步是最简单的,利用 PDF2SWF Pages 一键转换功能,将 PDF 转换成 FLASH 文件(请注意转换模式是静态嵌入式阅读器,即转换后是一个独立的SWF文件)。有了用于被嵌入的资源文件(为了方便介绍,将该文件名指定为 pages.swf,并保存在一个空白的文件夹中),便可以使用 Adobe 官方工具进行创建 APP 了——即创建安卓的 *.apk 文件。


以下通过分别通过 Adobe Flash CS6 和 Flex 4.6 两种工具进行介绍(以下这些方法可以自选其中一种):

第一种方法:使用 Flash CS6 加载式

1、启动 Flash CS6(虽然旧版如 CS5 和 5.5 也可以,但这里以 CS6 为例),选择“文件”——“新建”——“AIR for Android”。将该文件保存于前面的资源文件(pages.swf)相同的文件夹路径。

2、选择第一帧,并打开动作面板,添加如下代码:
import flash.events.Event;
import flash.net.URLRequest;
import flash.desktop.NativeApplication;
import flash.display.Loader;
var loader:Loader = new Loader();
loader.load(new URLRequest("pages.swf"));//通过加载的方式
this.addChild(loader);
this.addEventListener("quitEvent",quiteFun);
function quiteFun(e:Event):void{
 NativeApplication.nativeApplication.exit();
}

3、选择“文件”——“AIR x.x for Android”设置——就可以发布了。

这里需要注意一些发布之前的事项:
● 由于是加载资源文件,所以在“AIR x.x for Android”设置界面的常规选项卡中,需要点击加号,将资源文件(pages.swf)也添加。
● 在布署选项卡中,如果选中了“将 AIR 运行时嵌入应用程序”,那么 整个应用程序将会增大10多M,所以一般只要选一个 AIR 下载平台就可以,在安装 APP 时它会自动下载安装。
● 这里虽然用了 Loader 加载的方式,但由于资源文件(pages.swf)也被嵌入打包到 *.apk 文件中了,所以它属于嵌入式的一种。


第二种方法:使用 Flex 4.6 嵌入式

1、启动 Flex 4.6(虽然旧版的 4.5 以前的版本也可以,但这里以 4.6 为例),选择“文件”——“新建”——“创建 ActionScript 手机 AIR 项目”——手机设置中“选 Google Android” 就可以。

2、添加如下代码:
package { 
 import flash.display.Sprite; 
 public class SomeClass extends Sprite {  
  public function SomeClass()
  {
   super();   
   [Embed(source = "pages.swf")]
   var GameLevel:Class;   
   var my_level:* = new GameLevel();
   addChild(my_level);
  }  
 } 
}

3、选择“项目”——“导出发行版本”——就可以发布了。

这里需要注意一些发布之前的事项:
● 因为我们是发布到手机目标平台的,所以导出时选“用于目标平台的已签名包”,这样生成的是真正的目标平台的 apk 文件。
● 在布署选项卡中,如果选中了“具有运行时绑定的应用程序”,那么整个应用程序将会增大10多M,所以一般共享的 AIR 运行时,在安装 APP 时它会自动下载安装。
● 由于使用了 Embed 标签,而没有使用 Loader 类,所以在“包内容”选规卡中的资源文件(pages.swf)前面的对勾可以直接取消。
●当我,如果用户使用了 Loader 类,而没有使用 Embed 标签,那么在“包内容”选规卡中的资源文件(pages.swf)前面的对勾是不可以取消的。


第三种方法:同时使用 Flash CS6 和 Flex 4.6 嵌入式

1、启动 Flash CS6(虽然旧版如 CS5 和 5.5 也可以,但这里以 CS6 为例),选择“文件”——“新建”——“AIR for Android”。将该文件保存于前面的资源文件(pages.swf)相同的文件夹路径。

2、选择第一帧,并打开动作面板,添加如下代码:
import flash.events.Event;
import flash.desktop.NativeApplication;
this.addEventListener("quitEvent",quiteFun);
function quiteFun(e:Event):void{
 NativeApplication.nativeApplication.exit();
}
//使用嵌入的方式
[Embed(source = "pages.swf")]
var GameLevel:Class;
var my_level:* = new GameLevel();
addChild(my_level);

3、先按下 Ctrl + Enter 键进行测试,如果没有配置 SDK 路径,那么它会弹出一个需要 Flex SDK 的对话框(因为 Embed 元标签只能被 Flex SDK 使用,Flash 无法使有),如果同时安装了 Flash CS6 和 Flex 4.6 完整版本,按确定即可;否则需要手动指定 Flex 4.6 安装路径中 SDK 的位置。

4、选择“文件”——“AIR x.x for Android”设置——就可以发布了。

这里需要注意一些发布之前的事项:
● 由于使用了 Embed 标签,而没有使用 Loader 类,所以这次在“AIR x.x for Android”设置界面的常规选项卡中,不需要添加资源文件(pages.swf)。
● 在布署选项卡中,如果选中了“将 AIR 运行时嵌入应用程序”,那么 整个应用程序将会增大10多M,所以一般只要选一个 AIR 下载平台就可以,在安装 APP 时它会自动下载安装。
● 这里虽然用了 Loader 加载的方式,但由于资源文件(pages.swf)也被嵌入打包到 *.apk 文件中了,所以它属于嵌入式的一种。


第四种方法:使用 Flex 4.6 嵌入式或加载式 (使用 Flex Frame)

在第二种方法中新建项目时,注明了新建时选择是“创建 ActionScript 手机 AIR 项目”,而不是“创建 Flex 手机 AIR 项目”。它们之前的区别在于,前者只使用了 Flex IDE 编码环境和编译环境,但并未使用 Flex Frame(Flex UI 组件框架)部份,如是用户正在创建一个需要使用 Flex Frame 的项目,那么在 View 中可能需要用到如下的代码:

 <fx:Script>
  <![CDATA[
   import mx.controls.SWFLoader;
   import mx.events.FlexEvent;
   import mx.events.ResizeEvent;
   
   protected function creationCompleteHandler(event:FlexEvent):void
   {
     swfLoader.addEventListener(ResizeEvent.RESIZE, onScroll);
   }  
   private function onScroll(e:*):void {
    e.stopImmediatePropagation();
   }    
  ]]>
 </fx:Script>
 
 <s:SWFLoader id="swfLoader" source="@Embed('pages.swf')" creationComplete="creationCompleteHandler(event)"/> 

否则有可能遇到类似如下的错误“TypeError: Error #1034: Type Coercion failed: cannot convert fl.events::ComponentEvent@871e8f9 to mx.events.ResizeEvent.”,这是由于 PDF2SWF Pages 的静态阅读器使用的是对资源占用较小的 fl.* 包,而并非是重量级的 mx.* 包。所以需要通过阻止静态阅读器中具有相同字段名称的冒泡事件防止产生冲突。

当然,也可以使用纯 AS 的方法来加载资源文件(pages.swf):

<fx:Script>
  <![CDATA[
   import mx.controls.SWFLoader;
   import mx.events.FlexEvent;
   import mx.events.ResizeEvent;
   
   protected function creationCompleteHandler(event:FlexEvent):void
   { 
    var swfLoader:SWFLoader = new SWFLoader()
     swfLoader.autoLoad = true;
     swfLoader.source = "pages.swf";
     swfLoader.addEventListener(ResizeEvent.RESIZE, onScroll);    
     this.addElement(swfLoader);    
   }
  
   private function onScroll(e:*):void {
    e.stopImmediatePropagation();
   }    
  ]]>
 </fx:Script>

将以上代码的 creationCompleteHandler 侦听器注册于视图(View)组件的 creationComplete 事件即可。本站并不推荐用户使用 Flex 组件框架部份,因为 Flex 组件框架部份底层使用了重量级的 mx.* 包,这可能会导致 APP 安装后启动时间加长;本站推荐纯 AS 的方式按需所写代码功能,由开发者自定义轻量级的嵌入式开发(既便遇到冒泡冲突的事件时,无需阻止事件流,直接修改自定义的事件类型字段即可)。 

最后选择“项目”——“导出发行版本”——就可以发布了。需要注意的事项与“第二种方法”相同。


最后:以上无论是哪一种方法创建 apk 文件,在布署选项卡中,有一个证书,由于 Android 的半开源性质,它是可以由用户自己直接通过 Flash cs6 或 Flex 4.6 创建的或使用第三方公司的证书;如果用户不知道如何创建该文件,可以直接联系本站客服索取。

使用 Adobe 官方工具创建 Android 系统的 APP是最为简单的,如要用户当前正在使用的是非 Adobe 官方工具进行嵌入式开发,请查看具体语言的官方资料和 API 手册,如有其它疑问可以登录后台向本站技术提交咨讯留言。





 

友情链接 | 技术支持 | Copyright © 2008-2013 残象制作组 <The Incredible Image Workroom>