gomobile编译go代码为aar的一些坑

先安好gomobile。如果没有初始化,先cd到存放代码的文件夹,初始化生成go.mod文件:

go mod init myproj

init后面随便起个什么名字都行。

开始编译成aar,先输入命令

gomobile bind -target=android -o my.aar

这时候可能报错:

gomobile: no usable NDK in C:\Users\Yuri\AppData\Local\Android\sdk: unsupported API version 16 (not in 21..35), open C:\Users\Yuri\AppData\Local\Android\sdk\ndk-bundle\meta\platforms.json: The system cannot find the path specified.

说NDK版本16太低,需要21~35的,不过实际上,我这已经装了当前最新的27版本。没装的可以在AndroidStudio里面装:

然后添加到环境变量,ANDROID_NDK_ROOT,值是NDK的路劲文件夹

这时候输入编译命令,直接指定一个它需要的21~35之间的API版本,比如21:

gomobile bind -target=android -androidapi 21 -o my.aar

这样就不会报错NDK问题了。

--------

再次执行编译命令,可能会报错:

gomobile: binding "main" package (myproj) is not supported

这个是因为go代码开头的声明package名字是main,这样不能被gomobile编译,要把这些package main改成别的名字,比如package mygo,名字随喜好而定。

--------

如果报错:

unable to import bind: no Go package in golang.org/x/mobile/bind

是因为没装bind这个库,需要先执行:

 go get golang.org/x/mobile/bind

---------

如果报错:

too many result values: func ******

这是因为某些函数返回的值超过了一个,gomobile要求函数只能返回一个值或者一个值+一个报错err,需要调整这些函数,把多个返回值都放在一个结构体(struct)中集中返回,调用时再去解析结构体,进行取值。

---------

如果报错:
*******.java:11: ����: ���� GBK �IJ���ӳ���ַ� (0x93)
 * 定义XML结构��?

这种一看就是汉字字符带来的编码问题,Java编译器 (javac) 默认使用GBK编码,我们给他改成UTF-8,输入命令:

set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8

-----------

弄个aar坑还不少,

aar成功编译后,在命令行是看不到任何提示的,需要去文件夹里面找到编译好的aar文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山鯨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值