先安好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文件。