flash网站使用air移植到android 客户端项目总结

乱七八糟的东西有很多 想到哪就写到哪吧

1.使用本地扩展

air中需要播放as2.0的swf文件,而air是不支持as2.0编写的swf的,解决方法只能是使用ane本地扩展,通过android的webview加载网络上的swf

ane部分使用以下网址的方法即可:

http://bbs.9ria.com/thread-156257-1-1.html  这个是比较基础的使用方法

http://sswilliam.blog.163.com/blog/static/18969638320119285294592/ 自定义activity等比较详细 的方法(推荐)

大体步骤就是在android端写上具体要实现的功能,export 为jar文件。创建as库文件,在里面对android端的端口进行调用,然后打包成ane,放入air工程中,调用库文件的端口。打包命令:

"C:\Program Files\Adobe\Adobe Flash Builder 4.7\sdks\4.6.0\bin\adt"(具体地址各不同) -package -storetype PKCS12 -keystore test.p12(*.p12密钥文件,具体什么用不清楚) -storepass 123456(密钥的密码 密钥通过flashbuilder可生成设置)-target ane test.ane(ane文件名 随意) extension.xml -swc *.swc -platform Android-ARM -C Android-ARM .

打包ane基本上没有什么太多的就是比较麻烦,只要按照上面网址上的弄,基本不会出错误的。不过使用了ane的工程不能再桌面上调试了,只能在真机上调试

2.本地扩展

我在扩展中是使用android的webview来加载网站的swf

首先webview加载swf需要两个权限 一个是internet权限,使用ane的话一切有关android的权限 属性什么的都是是在工程中 -app.xml中设置.而air对于android有些权限是不支持的。具体参照官网:http://help.adobe.com/zh_CN/air/build/WSfffb011ac560372f-5d0f4f25128cc9cd0cb-7ffc.html

webview方面的知识

//去掉屏幕的标题栏 状态栏

requestWindowFeature(Window.FEATURE_NO_TITLE);
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
         WindowManager.LayoutParams.FLAG_FULLSCREEN);

由于需要实现跳过登陆界面直接打开响应的swf,需要保存cookie,保存cookie必须要创建新线程 否则会报错

new Thread(new Runnable() {
         public void run() {
          if(!bCookiesFinded)
          {
           DefaultHttpClient client = new DefaultHttpClient();
           HttpContext context = new BasicHttpContext();
          HttpGet get = new HttpGet("www.baidu.com“);
           HttpResponse response;
        try {
         response = client.execute(get);
          if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                    // 根据你的逻辑,判断返回的值是不是表示已经登录成功
           bCookiesFinded = true;
                CookieStore cookieStore = client.getCookieStore();
                cookies = cookieStore.getCookies(); 
              }
         
        } catch (ClientProtocolException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
        } catch (IOException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
        }
          }
          else
          {
           return;
          }
          
         }
     }).start();

//cookie的使用

 CookieSyncManager.createInstance(this);
        CookieManager cookieManager = CookieManager.getInstance();

//具体使用 具体分析大概就是这么样

     for (int i = 0; i < cookies.size(); i++) {
      String cookieString = cookies.get(i).getName() + "=" + cookies.get(i).getValue() + "; domain=" + cookies.get(i).getDomain();
      cookieManager.setCookie("http://www.baidu.com", cookieString);            
        }

webview的设置

WebSettings settings = webview.getSettings();
  settings.setJavaScriptEnabled(true);   //在webview上使用js代码
        settings.setPluginState(PluginState.ON);


        settings.setUseWideViewPort(true);   //如果不能再网页上修改大小 在这设置自适应
        settings.setLoadWithOverviewMode(true);


        webview.setVerticalScrollBarEnabled(false); //不使用滚动条
        webview.setHorizontalScrollBarEnabled(false);
        settings.setCacheMode(WebSettings.LOAD_NO_CACHE); //不保留缓存

webview有白边

原因1:有滚动条 按照上述取消即可

原因2:swf的大小不匹配,只能设置webview的宽高比,不按照全屏大小设置。

               webview.setLayoutParams(new LayoutParams(  
           宽, 高));

 

weview使用javascript代码

在你加载完成了一个包括js代码的网页后

 String strUrl = "javascript:函数名(‘函数的参数')";
           webview.loadUrl(strUrl);
webview包含一系列网络加载的检查,具体百度

webview屏蔽双击放大的功能

public boolean onTouchEvent(MotionEvent event) {
  // TODO Auto-generated method stub
   if (event.getAction()==MotionEvent.ACTION_DOWN) { 
            long currentTouchTime=System.currentTimeMillis(); 
            if (currentTouchTime-preTouchTime<=ViewConfiguration.getDoubleTapTimeout()) { 
                //preTouchTime = currentTouchTime; 
                return true; 
            }  
            preTouchTime=currentTouchTime; 
   }
   if(event.getAction()==MotionEvent.ACTION_UP){
    long currentTouchTime=System.currentTimeMillis(); 
    preTouchTime = currentTouchTime;
   }
  return super.onTouchEvent(event);
 }

ane部分就讲这些。

3.as2.0移植as3.0

as2.0到as3.0变化很多 尤其是一些函数的使用上,下面的网址是as2.0 as3.0函数对比:

http://www.dengjie.com/temp/as2as3/

4.在air中对虚拟键盘的支持

具体参看官网:

http://help.adobe.com/zh_CN/as3/dev/WSfffb011ac560372f2e63562a12dedf852e9-8000.html

5.as3.0官网api地址

http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/index.html

6.swf在浏览器中查看调试信息

使用chrome 或者火狐浏览器

代码中加入

import flash.external.ExternalInterface;
 if (ExternalInterface.available) ExternalInterface.call("console.log",调试信息);

在控制台的console中查看即可

7.查看网络连接数据

使用fiddler软件,在手机端运行的程序也可以使用,具体参看:

http://yingfangming.blog.163.com/blog/static/16580247020142215553545/

8.flash4.7软件的破解

网上的一些三步破解法存在问题,当代码更新的时候,编译出错,下面的方法绝对没有问题:

http://dong2008hong.blog.163.com/blog/static/46968827201401354238583/

9.关于swf的加载

如果a.swf加载b.swf,而还需要b加载c.swf,那么在air中(其他地方不知道)b加载c所使用的路径是c相对于a的路径而不是b。

获取加载swf中的类:

public function loadTest(sURL:String):void{
   var domain:LoaderContext= new LoaderContext(false, ApplicationDomain.currentDomain);
   domain.allowCodeImport = true;
   domain.allowLoadBytesCodeExecution = true; 
   var urlRequset:URLRequest = new URLRequest(sURL);
   urlRequset.requestHeaders = [new URLRequestHeader("Referer", "

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值