Go 和 Android 集成实战

看到这个标题,你可能会问,为什么要在 Android 中运行 Go,直接使用 Java 不挺好吗?

是的,如果你有现成很强大的 Java 团队,这没有问题,但并不是所有团队都是如此。而且我在这里想强调的是 Android 与 Go 的集合,即在 Android 程序中使用 Go 而不是完全用 Go 来写 Android 程序。

我能想到在 Android 中用 Go 的一些原因:

  • 团队熟悉 Go, 对 Java/Android 了解不多。
  • 已经有现成的 Go 核心代码,比如开源类库: libp2p,turn/stun 类库等。
  • 自己服务的 SDK 其核心逻辑复杂,繁琐,涉及大量网络或并发的操作。

能够在 Android 上使用 Go 代码,得益于 Go 强大的交叉编译能力,那该如何在 Android 上使用我们的 Go 库呢,接下来我将通过一个简单的示例来讲解。

实例教程

本例是在 Android 程序中使用 Go 编译的一个简单动态库来实现对网站测速的简单例子。

思路:

  • Go 交叉编译为 Android 平台支持的 so 文件。
  • 在 Android 中使用 JNA 调用该 so 文件。

依赖:

说明: 演示环境为 Mac。

编写 Go 测试代码

  • 编写 speedtester 的核心代码,实现对任意网站访问速度的检测:
package speedtester

import (
	"net/http"
	"time"
)

func Perform(url string) (int, error) {
	req, err := http.NewRequest(http.MethodGet, url, nil)
	if err != nil {
		return 0, err
	}

	startAt := time.Now()

	resp, err := http.DefaultClient.Do(req)
	cost := time.Now().Sub(startAt)
	if err != nil {
		return 0, err
	}
	defer resp.Body.Close()

	return int(cost / time.Millisecond), nil
}
  • 编写 CGO 代码,暴露一个 Perform API 函数:
package main

import "C"

import (
	"github.com/songjiayang/go-android/go/spe
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值