关于ANE的调试心德

在编写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(...)就可以了。

看看实际的效果吧



 

最后要说明的一点很重要。当运行程序的时候发现程序一直启动不起来很有可能是你的服务器没有启动,程序一直在连接服务器导致。所以测试的时候记得开服务器,发布的时候记得将相关代码去除!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值