Skip to content

guosen/DetectKit

Repository files navigation

DetectKit

Android性能监控

NodeJS

Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好.就用它作为我们简易系统的转发服务器。

WebSocket

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

服务器实现

先安装websocket模块:

npm install nodejs-websocket

server.js如下

var ws = require("nodejs-websocket");
console.log("建立websocket连接...")
var server = ws.createServer(function(conn){
    //text:这边是收到文本信息时候触发
    conn.on(“text", function (str) {
        console.log("收到的信息为:"+str)
        conn.sendText(str)
      
    })
    conn.on("close", function (code, reason) {
        console.log(“关闭websocket连接")
    });
    conn.on("error", function (code, reason) {
        console.log("websocket异常关闭")
    });
}).listen(8001)

运行:

node server.js

手机端连接服务器

okHttp + webSocket

借助 OkHttp 可以很轻易的实现 WebSocket,它的 OkHttpClient 中,提供了 newWebSocket() 方法,可以直接建立一个 WebSocket 连接并完成通信。

fun connect(url:String) {
    this.mBaseUrl = url
    //构造request对象
    val request: Request = Request.Builder()
        .url(mBaseUrl)//服务器地址
        .build()
    mWebSocket = client.newWebSocket(request, this)
}

发送一个消息看看

fun send(text: String) {
    mWebSocket?.send(text)
    
}

getInstance()?.send("这是从手机发送的一个消息。")

手机端发送日志

Android 可以通过Runtime.getRuntime().exec()方法来执行命令或者创建进程。

try {
   exec = Runtime.getRuntime().exec("logcat -v threadtime")
   inputStream = exec.inputStream
   reader = BufferedReader(InputStreamReader(inputStream))
   while (readerLogging) {
       val line: String = reader.readLine()
       if (line != null) {
           //…….发送给node.js
       }
   }
} catch (e: Exception) {
   e.printStackTrace()
} finally {
   …..
}

页面加一个按钮随打印日志

//startlogs
fun startlogs(view : View){
    Log.d("LOG_TAG","this is a log"+Random().nextInt())
}

左边是命令行终端 其实就跟AndroidStudio里的Logcat一样 异常日志:

   var stackTraceElement = p1.stackTrace
        var exStack:StringBuffer=StringBuffer();

        for (s1 in stackTraceElement){
            exStack.append(s1.toString())
            exStack.append("\n")
        }
        WebSocketHelper.getInstance()?.send("logcat#"+exStack.toString())

这是有想法能不能有一个跟AS一样的UI,在浏览器实时查看??

目前采用方式node.js写的webSocketClient像这样:

灵感来自:

About

Android性能监控

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published