Golang 开发Android服务--交叉编译
<h1>Golang 开发Android服务--交叉编译</h1><div class="cnblogs_code">
<pre>go <span style="color: rgba(0, 0, 255, 1)">env</span> -<span style="color: rgba(0, 0, 255, 1)">w</span> GOPROXY=https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">repo.huaweicloud.com/repository/goproxy/,</span><span style="color: rgba(0, 128, 0, 1); text-decoration: underline">https://goproxy.nd.tevat.dev</span><span style="color: rgba(0, 128, 0, 1)">,</span><span style="color: rgba(0, 128, 0, 1); text-decoration: underline">https://goproxy.cn</span><span style="color: rgba(0, 128, 0, 1)">,direct</span>
<span style="color: rgba(0, 0, 0, 1)">
export GOPROXY</span>=https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">goproxy.io,direct</span>
go <span style="color: rgba(0, 0, 255, 1)">env</span> -<span style="color: rgba(0, 0, 255, 1)">w</span> GOPROXY=https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">goproxy.io,direct</span></pre>
</div>
<blockquote>
<p>https://goproxy.io 是一个流行的Go模块代理,但也有其他代理可供选择,如</p>
<p>https://proxy.golang.org(Go官方代理)、https://goproxy.cn(中国大陆访问友好)等。</p>
</blockquote>
<p> </p>
<p>移动端主要 arm 架构,编译命令</p>
<div class="cnblogs_code">
<pre>CGO_ENABLED=<span style="color: rgba(128, 0, 128, 1)">0</span> GOOS=linux GOARCH=arm go build -o <strong><span style="color: rgba(0, 128, 0, 1)">go_pro</span> <span style="color: rgba(153, 51, 0, 1)">mine.go</span></strong></pre>
</div>
<p>CGO_ENABLED=0 GOOS=linux,指定临时环境变量不影响其它编译,也可以设置为全局环境变量。</p>
<p><span style="color: rgba(153, 51, 0, 1)"><strong>AOSP 查看版本信息</strong></span></p>
<p>getprop 不传参数查看所有属性值</p>
<div class="cnblogs_code">
<pre>getprop ro.build.version.release</pre>
</div>
<p><img src="https://img2024.cnblogs.com/blog/157654/202402/157654-20240203113341239-439916003.png"></p>
<p>linux可以用 lscpu 查看CPU信息,AOSP不支持,查看 aosp 的 CPU 版本信息</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">cat</span> /proc/cpuinfo</pre>
</div>
<p>aarch64 是 ARMv8-A 架构中引入的64位指令集,AArch64 向后兼容基于32位指令集的 ARMv7-A 和之前别的一些 32 位 ARM 架构(也就是AArch32)。</p>
<p><img src="https://img2024.cnblogs.com/blog/157654/202402/157654-20240203112858390-30077068.png"></p>
<p> </p>
<p><strong><span style="color: rgba(128, 0, 0, 1)">注意:</span></strong></p>
<p><span style="color: rgba(255, 0, 0, 1)"><strong>按上面编译,一般逻辑没问题,涉及到网络访问走不通,原因是 AOSP android 系统没有 /etc 的网络解析文件。</strong></span></p>
<p>用 android-ndk 编译,到这去下载:https://developer.android.google.cn/ndk/downloads?hl=zh-cn</p>
<p>版本兼容选择:https://www.cnblogs.com/fieldtianye/p/18012578</p>
<pre>aarch64-linux-android28-clang 这个就表示兼容到 Android 9</pre>
<p>可执行文件名称:program_name,写了一个简单的shell,放到代码根目录下执行</p>
<p>运行环境:Linux,Ubuntu 22 LTS。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">rm</span><span style="color: rgba(0, 0, 0, 1)"> program_name
go </span><span style="color: rgba(0, 0, 255, 1)">env</span> -<span style="color: rgba(0, 0, 255, 1)">w</span> CGO_ENABLED=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
go </span><span style="color: rgba(0, 0, 255, 1)">env</span> -<span style="color: rgba(0, 0, 255, 1)">w</span> GOOS=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">android</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
go </span><span style="color: rgba(0, 0, 255, 1)">env</span> -<span style="color: rgba(0, 0, 255, 1)">w</span> GOARCH=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">arm64</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
go </span><span style="color: rgba(0, 0, 255, 1)">env</span> -<span style="color: rgba(0, 0, 255, 1)">w</span> CC=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/usr/mine-soft/android-ndk-r26c/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android28-clang</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
go build </span>-<span style="color: rgba(0, 0, 0, 1)">o program_name main.go
go </span><span style="color: rgba(0, 0, 255, 1)">env</span> -<span style="color: rgba(0, 0, 255, 1)">w</span> CGO_ENABLED=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
go </span><span style="color: rgba(0, 0, 255, 1)">env</span> -<span style="color: rgba(0, 0, 255, 1)">w</span> GOOS=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">linux</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
go </span><span style="color: rgba(0, 0, 255, 1)">env</span> -<span style="color: rgba(0, 0, 255, 1)">w</span> GOARCH=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">amd64</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
go </span><span style="color: rgba(0, 0, 255, 1)">env</span> -<span style="color: rgba(0, 0, 255, 1)">w</span> CC=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">gcc</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
adb push </span>~/program_name /data/program_name</pre>
</div>
<p> </p><br><br>
来源:https://www.cnblogs.com/fieldtianye/p/18004482
頁:
[1]