0x00 前言
Deepin v20.2.2系统支持运行Android应用,于是安装了Windows/Deepin双系统后,开始了运行Android应用的踩坑之旅。以下是在这过程中的踩坑记录。
0x01 安装uengine
Deepin中是通过一个叫uengine的工具来支持Android应用的,这是一个基于anbox
进行二次开发而成的工具。它的基本原理是通过在Linux内核中安装Android所需要的内核模块(如:binder、ashmem等),然后运行一个Android容器而实现的。
安装内核模块
$ sudo apt install uengine-modules-dkms
安装成功后/dev
目录下能够找到如下两个设备:
crw-rw-rw- 1 root root 511, 0 7月 24 17:16 binder
crw-rw-rw- 1 root root 10, 58 7月 24 17:16 ashmem
如果没有看到可以尝试以下方法来手动加载:
$ sudo insmod ashmem_linux
$ sudo insmod binder_linux
如果加载失败可以试下重启电脑后再加载。
安装uengine
$ sudo apt install uengine
安装之后会创建两个服务:uengine-session
和uengine-container
,同时在/data/uengine
目录下写入Android镜像等文件。如果/data
挂载的是ntfs
分区的话,需要将/data/uengine
软链到非ntfs
分区目录,否则会导致容器启动失败。
安装之后也会新增一个网卡:uengine0
,分配的ip地址是:192.168.250.1
。
容器成功启动后会分配到192.168.250.2
这个地址,并且这个地址是可以ping通的。
容器启动的日志可以在:/data/uengine/data/logs
路径下找到,在容器启动失败失败时可以根据这个日志来分析原因。
0x02 安装Android应用
安装Android应用最简单的方法是在应用市场
里下载安装,也可以使用命令行安装。
$ sudo apt install uengine.com.tencent.mobileqq
安装后会在桌面创建一个图表,指向的命令行是:/usr/bin/uengine-launch.sh --action=android.intent.action.MAIN --package=com.tencent.mobileqq --component=com.tencent.mobileqq.activity.SplashActivity
。
/usr/bin/uengine-launch.sh
的内容是:
#!/bin/bash
uengine launch $*
这里默认是用的多窗口模式,每个应用都是在一个新的窗口中打开的。
0x03 使用adb访问Android系统
安装adb
$ sudo apt install adb
连接设备
$ adb connect 192.168.250.2
192.168.250.2:5555 unauthorized
正常Android设备在连接adb调试的时候会弹出授权窗口,但是这里怎么都无法弹出授权窗口,因此需要我们手动将adb的公钥拷贝到设备的对应目录中。
$ cp ~/.android/adbkey.pub /data/uengine/data/rootfs/data/misc/adb/adb_keys
重启adb server后再次连接就成功了。
0x04 解决高分辨率电脑上显示较小问题
uengine默认使用的分辨率为:540x960,而且缩放比例是1,导致在高分辨率电脑上看起来不仅窗口小,而且字也比较小。这种情况可以通过在/usr/share/uengine/appetc
目录下写入应用配置文件来解决。例如,对于Android QQ可以使用以下配置:
cat com.tencent.mobileqq.txt
verticalWidth 1080
verticalHeighe 1920
horizontaltWidth 1920
horizontaltHeighe 1080
verticalScreen 1
allowFullScreen 1
allowScreenSwitching 1
defaultFullScreen 0
logicalDensityDpi 400
physicalDpi 72
appWidth 1080
appHeight 1920
logicalWidth 1080
logicalHeight 1920
com.tencent.mobileqq
要替换成实际应用的包名;logicalDensityDpi
参数用于控制缩放比例,160
表示没有缩放,320
表示放大一倍。可以根据电脑实际情况修改这些参数值。
0x05 总结
使用容器方式跑Android系统比虚拟机方式更节省资源,启动也更快,更接近于原生应用的体验。这种方式也会逐渐成为各大Linux系统均支持的能力,具有较大的应用潜力。