在编写android项目时,我们可以通过Log去查看程序的执行状态和打印信息。
然而在ANE中这些Log的内容是无法通过控制台看到的,也就是说程序在android部分出错了我们很难知道程序是在那一步出错了。那么应该用什么来替代Log呢? 日前我就遇到了这样的问题,我的解决方案是是使用Socket。
这个方法主要包含2个部分
1.客户端--------代码会写在android部分
2.服务器--------任何能实现SocketService的都可以,由于对flash熟悉且对性能方面无要求我使用的是air
服务器的实现是简单到不能再简单将收到的信息打印出来,由于代码很少我直接全部粘贴了,相信不需要注释也是能读懂的
package { import flash.display.Sprite; import flash.events.ProgressEvent; import flash.events.ServerSocketConnectEvent; import flash.net.ServerSocket; import flash.net.Socket; import flash.text.TextField; import flash.utils.ByteArray; public class TestSocketServices extends Sprite { private var ss:ServerSocket; private var tf:TextField; private var cs:Socket; public function TestSocketServices() { initSS(); } private function initSS():void { ss = new ServerSocket(); ss.bind(5689); ss.addEventListener(ServerSocketConnectEvent.CONNECT, onConnect); ss.listen(); tf = new TextField(); addChild(tf); tf.width = stage.stageWidth; tf.height = stage.stageHeight; tf.border = true; tf.borderColor = 0; tf.wordWrap = tf.multiline = true; } private function log(msg:String):void { tf.appendText(msg + "\n"); trace(msg); } protected function onConnect(event:ServerSocketConnectEvent):void { cs = event.socket; cs.addEventListener(ProgressEvent.SOCKET_DATA, getData); } protected function getData(event:ProgressEvent):void { if(cs.bytesAvailable) { var ba:ByteArray = new ByteArray(); cs.readBytes(ba, 0, cs.bytesAvailable); log("msg from android:" + ba.toString()); } } } }
客户端的代码更是简单,我也完全粘贴吧
package com.example.sockets; import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; public class SocketLog { private static SocketLog _ins; private Socket cs; PrintWriter out; public SocketLog() { try { cs = new Socket("192.168.1.32", 5689); out = new PrintWriter(cs.getOutputStream()); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static SocketLog ins() { if(_ins == null) { _ins = new SocketLog(); } return _ins; } public void log(String msg) { out.print(msg); out.flush(); } }
需要注意的是IP地址和端口号需要根据实际情况进行设置。
接下来是如何使用,其实也很简单
只需要将android中的log(...)的代码替换成SocketLog.ins().log(...)就可以了。
看看实际的效果吧
最后要说明的一点很重要。当运行程序的时候发现程序一直启动不起来很有可能是你的服务器没有启动,程序一直在连接服务器导致。所以测试的时候记得开服务器,发布的时候记得将相关代码去除!
相关推荐
as的方式实现类似芒果的聚合广告功能,整合百度ane,admob ane,广点通ane,有米ane,多盟ane等广告平台.使flash,flex,as3,air开发者能轻松的使用actionscript3接口在flash air ios和android应用里面集成多家广告...
友盟推送ANE,ANDROID 和 IOS 双平台,代码和demo打包环境都在,只测试广播了,单播没测试,devtoken已经获取到了。
包含华为ane打包范例以及ane开发一些个人经验
移动MM ane弱联网1.2.3版,android ane MM
适用于steam平台的flash调用支付,windows平台ANE文件。
支付宝支付ANE,android,ios双平台,代码,demo,打包环境都有。
用使adt打包air生成本机扩展的ane文件和完整使用示例。
银联ANE,双平台,ANDROID 和 ios,代码,demo,打包环境都在。
ane制作小例子包括jar,swc,打包制作命令及制作流程等,需要的同学可参考下
Flex Mobile ANE Hello实例源代码,包括Android Native Java工程源代码,Flex库工程源代码代码和Flex手机工程源代码,打包脚本,实现Android手机振动,Flash Builder 4.6编译,测试通过。
有关ANE打包全部过程详细描述 这里的方法用于介绍安卓开发的时候air调用java代吗的使用方法
这是一个ane在xcode上面的模板,安装方法很简单,终端运行install_templates.sh完成就ok了 详细看我博客
Flex通过ADO访问任意数据库的ANE
ane官方教程 其实不是特别好找 发出来给大家用下 其实就是为了骗积分下别的软件。。
新浪微博和QQAndroid端和Flash端源码及ANE打包构建,含有ANE使用说明文档
ANE(AIR本机扩展)的集合。 一些ANE可能需要与开发人员直接访问代码,而其他ANE可免费使用。
Starling Ane 微信 易支付ANE
微信的ANE,支持登录,分享,支付,支持安卓和ios平台,源码和打包环境demo都有,微信的支付登录分享的回掉是绑定包名的,要做相应修改。
集成百度和谷歌的广告ANE,适用于android和ios。已经测试过,
ANE +依赖关系 从终端cd进入/ example-mobile并运行: bash get_android_dependencies.sh ------------------ Windows版本使用Chromium Embedded Framework的CefSharp WinForms版本。 先决条件 你会需要 ...