Anbox在ARM64架构Linux上运行Android程序

Tony 77.05m2021-04-0375 次点击1 人感谢
### 环境配置说明
- 适用硬件:Raspberry Pi 4B | [raspios_arm64-2020-05-28](http://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2020-05-28/2020-05-27-raspios-buster-arm64.zip)
- 编译系统:Debian For WSL
- 参考借鉴:[UOS安装anbox](https://www.jianshu.com/p/aee4954d0dd0) | [Anbox的安装编译](https://bbs.deepin.org/forum.php?mod=viewthread&tid=176820)
### 交叉编译内核
1. 某些发行版内核已自带了模块,但树莓派的内核不包含它们且不支持DKMS只能手动编译
> 从Ubuntu 19.04开始,自带的内核(>= 5.0)已包含上面两个模块,不再需要从PPA安装模块。
> 从Debian 10开始,自带的内核(>= 4.19)已包含上面两个模块,不再需要从DKMS安装模块。

2. 在编译主机上安装交叉编译工具
```
sudo apt-get update
sudo apt install git bc bison flex libssl-dev make libncurses-dev gcc-aarch64-linux-gnu
```
3. 获取内核源码
```
mkdir /home/leux/rpi4
cd /home/leux/rpi4
git clone -b rpi-5.4.y --depth=1 https://github.com/raspberrypi/linux.git
```
4. 为内核源码打补丁,使其可生成ashmem_linux和binder_linux模块
```
wget https://salsa.debian.org/kernel-team/linux/-/blob/debian/5.4.19-1/debian/patches/debian/android-enable-building-ashmem-and-binder-as-modules.patch
wget https://salsa.debian.org/kernel-team/linux/-/blob/debian/5.4.19-1/debian/patches/debian/export-symbols-needed-by-android-drivers.patch
cd linux
patch -p1 < ../android-enable-building-ashmem-and-binder-as-modules.patch
patch -p1 < ../export-symbols-needed-by-android-drivers.patch
```
5. 获取内核编译配置文件
```
# 在64位的Raspbian系统内执行下面命令来获取官方的内核编译配置文件
sudo modprobe configs
zcat /proc/config.gz > ~/raspi4b.config

# 将上面的raspi4b.config拷贝到内核源码下
cp raspi4b.config /home/leux/rpi4/linux/.config
```
6. 配置内核编译参数
```
# 进入内核配置界面
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig

# 要运行所必须的内核参数
CONFIG_ANDROID=y
CONFIG_ANDROID_BINDER_IPC=m
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"
CONFIG_ASHMEM=m

# 在内核配置界面里的位置
Device Drivers > Android > Android Drivers > Android Binder IPC Driver
Device Drivers > Staging drivers > Android > Enable the Anonymous Shared Memory Subsystem
```
7. 编译内核并备份
```
# 编译内核
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j12

# 安装模块到临时文件夹
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/home/leux/rpi4/kernel/ modules_install

# 安装内核到临时文件夹
cp arch/arm64/boot/Image ../kernel/kernel-kvm.img

# 备份生成的内核到kernel.tgz
cd /home/leux/rpi4
tar -czvf kernel.tgz kernel/
```
8. 安装内核到系统
```
# 把上步生成的kernel.tgz复制到树莓派里
tar -xzvf kernel.tgz && cd kernel
mv kernel-kvm.img /boot/
mv lib/modules/* /lib/modules/
echo "kernel=kernel-kvm.img" >> /boot/config.txt
```
9. 安装完内核后重启来加载新内核,然后查看模块效果
```
# 测试加载内核模块
sudo modprobe ashmem_linux
sudo modprobe binder_linux

# 查看模块效果
ls -1 /dev/{‌‌‌‌‌‌‌‌ashmem,binder}
/dev/ashmem
/dev/binder
```
### 安装配置Anbox
1. 安装Anbox
```
# 注意:Anbox在contrib源里,找不到包则需要添加contrib源
sudo apt install anbox
```
2. 下载Android镜像
```
# 官方提供的arm64镜像不能正常启动,但可以使用别人已经编译好的
# 链接: https://pan.baidu.com/s/1QDaDtCi4MIMLbQyc-Ov0UA 提取码: w6av
https://build.anbox.io/android-images/2017/06/12/android_1_armhf.img
https://build.anbox.io/android-images/2017/08/04/android_1_arm64.img
https://build.anbox.io/android-images/2018/07/19/android_amd64.img

# 也可使用Ubuntu Touch项目提供的Anbox-images镜像
https://cdimage.ubports.com/anbox-images/android-armhf-32binder.img
https://cdimage.ubports.com/anbox-images/android-armhf-64binder.img

cp android_1_arm64.img /var/lib/anbox/android.img
```
3. 启动Anbox容器管理器
```
# 启动Anbox容器管理器
sudo systemctl start anbox-container-manager

# 启动Session管理器
/usr/bin/anbox session-manager

# 启动Anbox应用管理界面
/usr/bin/anbox launch --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity
```
### 其他说明
1. 在Session manager启动后,可通过lxc-attach来进入Abox的Shell环境
```
sudo lxc-attach -q \
--clear-env \
-P /var/lib/anbox/containers \
-n default \
-v PATH=/sbin:/system/bin:/system/sbin:/system/xbin \
-v ANDROID_ASSETS=/assets \
-v ANDROID_DATA=/data \
-v ANDROID_ROOT=/system \
-v ANDROID_STORAGE=/storage \
-v ASEC_MOUNTPOINT=/mnt/asec \
-v EXTERNAL_STORAGE=/sdcard -- /system/bin/sh
```
2. 在Anbox中安装应用
```
sudo apt install android-tools-adb

# ABD基本操作
adb devices # 查看Android设备
adb install xxx.apk # 安装APP到Anbox
adb uninstall com.xx.xx # 从设备中卸载APP
adb shell # 进入Android交互
adb shell pm list packages # 列出已安装的包

# 只能安装arm64-v8a的应用,不兼容armeabi-v7a或armeabi的应用
adb: failed to install xx.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]
```
****
原文地址:http://leux.cn/doc/Anbox在ARM64架构Linux上运行Android程序.html
****
贴吧:https://tieba.baidu.com/p/6733913610
资源链接: https://pan.baidu.com/s/1QDaDtCi4MIMLbQyc-Ov0UA 提取码: w6av
经网友测试,能正常安装,但体验一般,且只能安装arm64-v8a的应用。
![e1f15f90c0c717e06efbef0b8c0aead5.jpg](https://ppmm.org/images/2021/04/03/e1f15f90c0c717e06efbef0b8c0aead5.jpg)
![75559e9e8e0e1cc882271dc1a17f11d7.jpg](https://ppmm.org/images/2021/04/03/75559e9e8e0e1cc882271dc1a17f11d7.jpg)
![7cfb3021a01adee2860b0ffd3219c741.jpg](https://ppmm.org/images/2021/04/03/7cfb3021a01adee2860b0ffd3219c741.jpg)
![bdea6bbbb58e3a958f50ce491ed465b8.jpg](https://ppmm.org/images/2021/04/03/bdea6bbbb58e3a958f50ce491ed465b8.jpg)
![93485e016b985d498a35567db8c60acb.jpg](https://ppmm.org/images/2021/04/03/93485e016b985d498a35567db8c60acb.jpg)
收藏 ♥ 感谢
hanguofu 15cm 40 小时前 
这个挺不错,在 LINUX 里面玩 安卓~~~

登录注册 后可回复。