gomobile build 成apk 遇到的几个问题
是几个gomobile 本身版本编译工具造成的问题,
需要进入go的安装路径 用户路径\go\pkg\mod\golang.org\x\mobile@vxxxxxxx\cmd\gomobile, 修改一下代码,然后 用go build 重新编译出 gomobile.exe 放入到 用户路径\go\bin目录下
1. windows 上打包时 assets目录下的文件 打包后的路径 第一个斜杠是正斜杠,而后面的路径会拼上反斜杠……,导致资源路径斜杠不统一
修改go\pkg\mod\golang.org\x\mobile@v0.0.0-xxxx\cmd\gomobile\build_androidapp.go
把 name := "assets/" + path[len(assetsDir)+1:] 改成 name := "assets/" + filepath.ToSlash(path[len(assetsDir)+1:])

同理 cmd\gomobile\bind_androidapp.go 里 也要改成
name := "assets/" + filepath.ToSlash(path[len(assetsDir)+1:])
2. 用了 gomobile打包 则无法使用 garble做代码混淆,
修改 go\pkg\mod\golang.org\x\mobile@vxxxxxxx\cmd\gomobile\build.go 找到2个函数, 把里面的 “go” 换成 “garble”, 且可以加一个默认混淆的参数
func goCmdAt(at string, subcmd string, srcs []string, env []string, args ...string) error {
func goModTidyAt(at string, env []string) error {
cmd := exec.Command("go", subcmd)
改成
cmd := exec.Command("garble", "-literals", "-tiny", subcmd)

(修改后注意重新build 出 gomobile_garble.exe 放入到go的bin里)
3. 打包出来的apk 里面版本过低 <uses-sdk android:minSdkVersion="16” /> 导致新的操作系统安装失败。
用adb 安装失败: adb: failed to install xxxxx.apk: Failure [INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 16]
![]()
尝试2种方案都不行:
A. gomobile build -target=android/arm64 -androidapi 39 发现这样打包 -androidapi 没用, 好像只有 bind 才有用吧……
B. xml里如果手动写 <uses-sdk android:minSdkVersion …… /> 编译还报错,不让用: go\bin\gomobile.exe: manual declaration of uses-sdk in AndroidManifest.xml not supported
最后 只能找源代码 修改一下, 发现 build时 版本号直接拼接了 死了16:

所以把sdk.go 里的 MinSDK 手动改成23 或者更高, 然后再重新编译 gomobile.exe 则打出来的apk 安装没问题。
