}
}
其中有一句Go.init(...)这里再看go.Go这个包是什么样子的
public final class Go {
// init loads libgojni.so and starts the runtime.
public static void init(Context context) {
... 判断该函数是否该执行的代码 -- 省略 --
System.loadLibrary("gojni"); // gojni需要这句
new Thread("GoMain") {
public void run() {
Go.run(); // run()是一个native方法
}
}.start();
Go.waitForRun(); // 这个也是一个native方法
// 这部分可以理解为,启动了一个后台线程不断的接收结果到缓存中 。
new Thread("GoReceive") {
public void run() { Seq.receive(); }
【go语言调用安卓手机 go语言调用so】}.start();
}
private static boolean running = false;
private static native void run();
private static native void waitForRun();
}
MyActivity.java中还有段代码是 Hi.Hello("world");,打开Hi.java路径在src/go/hi/Hi.java,这个文件也是gobind生成的,是用来给java方便的调用.so文件
// Hi.java
// File is generated by gobind. Do not edit.
package go.hi;
import go.Seq;
public abstract class Hi {
private Hi() {} // uninstantiable
public static void Hello(String name) {
go.Seq _in = new go.Seq();
go.Seq _out = new go.Seq();
_in.writeUTF16(name);
Seq.send(DESCRIPTOR, CALL_Hello, _in, _out); // 下面接着说
}
private static final int CALL_Hello = 1;
private static final String DESCRIPTOR = "hi";
}
Seq.send这部分实际上最终调用的是一段go代码
func Send(descriptor string, code int, req *C.uint8_t, reqlen C.size_t, res **C.uint8_t, reslen *C.size_t) {
fn := seq.Registry[descriptor][code]
in := new(seq.Buffer)
if reqlen0 {
in.Data = https://www.04ip.com/post/(*[maxSliceLen]byte)(unsafe.Pointer(req))[:reqlen]
}
out := new(seq.Buffer)
fn(out, in)
seqToBuf(res, reslen, out)
}
转载仅供参考 , 版权属于原作者 。祝你愉快,满意请采纳哦
go语言调用安卓手机的介绍就聊到这里吧 , 感谢你花时间阅读本站内容 , 更多关于go语言调用so、go语言调用安卓手机的信息别忘了在本站进行查找喔 。
推荐阅读
- excel里表头怎么画斜线,excel如何绘制表头斜线
- linux命令打印版,linux命令行切换桌面命令
- 数据库和gis专业的关系,gis数据库的主要作用有哪些
- 使用Python构建定向爬虫,python爬虫如何定位
- linux发送文件的命令 linux 发送文件到另一台电脑
- 软件工程毕业设计创意写作,软件毕业设计作品
- 磊科路由器怎么设置无线桥接,磊科路由器的桥接的步骤
- vs创建vbnet vs创建项目
- sap出库交货单,sap交货单表名