x/mobile/cmd/gomobile: 初始化子命令不支持-androidapi标志

x9ybnkn6  于 4个月前  发布在  Go
关注(0)|答案(5)|浏览(49)

你正在使用的Go版本是什么( go version )?

$ go version
go version go1.20.1 linux/amd64

这个问题在最新版本的发布中是否重现?

是的

你正在使用什么操作系统和处理器架构( go env )?

go env 输出

$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/zergon321/.cache/go-build"
GOENV="/home/zergon321/.config/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/zergon321/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/zergon321/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/lib/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
GOVCS=""
GOVERSION="go1.20.1"
GCCGO="gccgo"
GOAMD64="v1"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/dev/null"
GOWORK=""
CGO_CFLAGS="-O2 -g"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-O2 -g"
CGO_FFLAGS="-O2 -g"
CGO_LDFLAGS="-O2 -g"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build824783065=/tmp/go-build -gno-record-gcc-switches"

你做了什么?

我通过Android Studio安装了 golang.org/x/mobile 和最新的Android SDK和NDK。然后我下载了openal-soft源代码。在此之后,我运行了:

ANDROID_PLATFORM=android-25 ANDROID_HOME=~/Android/Sdk/ ANDROID_NDK_HOME=~/Android/Sdk/ndk/25.2.9519653/ gomobile init -openal ~/cpp/openal-soft/

你期望看到什么?

我期望命令能够为Android构建OpenAL,以便它可以与 gomobile buildgomobile install 一起使用。

你看到了什么?

gomobile: ANDROID_NDK_HOME specifies /home/zergon321/Android/Sdk/ndk/25.2.9519653/, which is unusable: unsupported API version 16 (not in 19..33)
e4yzc0pl

e4yzc0pl1#

当我查看https://developer.android.com/ndk/downloads/revision_history时,很明显你正在使用的NDK版本(24)只支持API级别19及以上:

Jelly Bean (APIs 16, 17, and 18) is no longer supported. The minimum OS supported by the NDK is KitKat (API level 19).

所以你看到的现象看起来是预期的行为。建议你使用适当的标志选择不同的Android API级别,例如https://cs.opensource.google/go/x/mobile/+/master:cmd/gomobile/build.go;l=63;drc=43a0384520996c8376bfb8637390f12b44773e65

mccptt67

mccptt672#

但是gomobile init命令不支持-androidapi标志。

$ ANDROID_HOME=~/Android/Sdk/ ANDROID_NDK_HOME=~/Android/Sdk/ndk/25.2.9519653/ gomobile init -androidapi 25 -openal ~/cpp/openal-soft/

输出结果为:

flag provided but not defined: -androidapi
usage: gomobile init [-openal dir]

If a OpenAL source directory is specified with -openal, init will
build an Android version of OpenAL for use with gomobile build
and gomobile install.

那么我应该怎么做呢?

wfveoks0

wfveoks03#

我明白了。这确实是一个问题。
@hyangah ,你有什么见解吗?也许 minAndroidAPI 需要升级?

mkshixfv

mkshixfv4#

(CC @golang/android)

i2byvkas

i2byvkas5#

可能 https://cs.opensource.google/go/x/mobile/+/master:internal/binres/binres.go;drc=8578da9835fd365e78a6e63048c103b27a53a82c;l=253 是要责备的。
构建成功:gomobile build -target=android -androidapi 29 golang.org/x/mobile/example/basic
但是安装失败:gomobile install -target=android -androidapi 29 golang.org/x/mobile/example/basic,出现错误:

adb: failed to install basic.apk: Failure [INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 16]

使用 apktool d basic.apk 检查已构建的 basic.apk 发现在 ndroidManifest.xml 中:platformBuildVersionCode="16"(没有提到其他 API 版本)。

相关问题