交叉编译到原生android

时间:2021-04-01 20:00:07

标签: android go

如何从我的 MacOS 交叉编译到 Android 原生二进制文件。

我阅读了this,我必须这样做:

export NDK_ROOT=~/dev/ndk-toolchain
./android-ndk-r10c/build/tools/make-standalone-toolchain.sh --platform=android-16 --install-dir=$NDK_ROOT

export NDK_CC=~/dev/ndk-toolchain/bin/arm-linux-androideabi-gcc
CC_FOR_TARGET=$NDK_CC GOOS=android GOARCH=arm GOARM=7 ./make.bash

export NDK_TOOLCHAIN=~/dev/ndk-toolchain
export CC=$NDK_TOOLCHAIN/bin/arm-linux-androideabi-gcc
export GOROOT=~/dev/go
export GOPATH=`pwd`
export GOOS=android
export GOARCH=arm
export GOARM=7
export CGO_ENABLED=1

GO="$GOROOT/bin/go"

$GO build -x main.go

我从 Android Studio 安装了 NDK,但找不到提到的路径 /dev/ndk-toolchain/bin/arm-linux-androideabi-gcc

在我的设备中:

$ cd /Users/hajsf/Library/Android/sdk/ndk/22.1.7171670/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
$ ls
arm-linux-androideabi   bin         lib         share
$ cd bin
$ ls
arm-linux-androideabi-addr2line arm-linux-androideabi-elfedit   arm-linux-androideabi-nm    arm-linux-androideabi-size
arm-linux-androideabi-ar    arm-linux-androideabi-gprof arm-linux-androideabi-objcopy   arm-linux-androideabi-strings
arm-linux-androideabi-as    arm-linux-androideabi-ld    arm-linux-androideabi-objdump   arm-linux-androideabi-strip
arm-linux-androideabi-c++filt   arm-linux-androideabi-ld.bfd    arm-linux-androideabi-ranlib
arm-linux-androideabi-dwp   arm-linux-androideabi-ld.gold   arm-linux-androideabi-readelf
$ 

2 个答案:

答案 0 :(得分:0)

不确定这是否正确,我尝试了以下方法,它以我想要的方式与我一起工作。 在我的 Mac 中:

$ GOOS=android GOARCH=arm64 GO build -x main.go

然后我将文件保存在 GDrive 中,然后从我的手机上下载它,然后与 Tramux 共享并将其保存在文件夹 ~/Downloads 中,我去那里并使其可执行为:

$ chmod +x server

然后运行它:

$ ./server

和我一起工作!

答案 1 :(得分:0)

我下载了 NDK,解压后找到了正确的路径:

/Users/hajsf/Downloads/android-ndk-r21e/toolchains/llvm/prebuilt/darwin-x86_64/bin

并且能够编译为:

$ export NDK=~/Downloads/android-ndk-r21e
$ CGO_ENABLED=1 \
GOOS=android \
GOARCH=arm64 \
CC_FOR_TARGET=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang

$ GO build -x main.go

enter image description here

this中有这一行,但它给了我一个错误,没有它,我能够正确编译

./all.bash