anbox吧 关注:36贴子:45
  • 11回复贴,共1

Anbox 安装运行arm应用的方法(尝试中,未成功)

只看楼主收藏回复

一、基本操作
1、解包和打包android.img和anbox_60.snap,两者是一样的。
解包:
$ unsquashfs android.img
打包
$ mksquashfs squashfs-root/ android.img -comp x
2、anbox的手动停用和启动
停用:
$ sudo systemctl stop snap.anbox.container-manager.service /*停用anbox服务*/
$ sudo systemctl stop snap-anbox-60.mount /*卸载anbox的挂载点,更改后anbox_60.snap再重新挂载*/
启动:
$ sudo systemctl start snap-anbox-60.mount
$ sudo systemctl start snap.anbox.container-manager.service
或者
$ sudo /usr/bin/snap run anbox.container-manager
* 说明:
snap.anbox.container-manager.service服务就是启动的/usr/bin/snap run anbox.container-manager
snap run <snap.app> ,即启动“snap”容器并运行其中的“app”
这里就是启动anbox容器中的container-manager命令
3、调试
$ sudo /usr/bin/snap run --shell anbox.container-manager
这样可以进入snap的shell,对anbox进行调试
4、anbox的编译
$ git clone https://github.com/anbox/anbox.git
$ cd anbox
$ mkdir android-images
$ cp /path/to/android.img android-images/android.img
$ snapcraft
期间需要保持联网状态
编译完成后会得到一个文件名类似anbox_3-df774db_amd64.snap的文件,使用该文件替换anbox原来的anbox_60.snap就行,或者用下面的命令安装:
$ snap install --dangerous --devmode anbox_3-df774db_amd64.snap


IP属地:天津1楼2017-11-11 03:45回复
    二、houdini的安装
    1、下载了一个 houdini.sfs 的文件
    http://dl.android-x86.org/houdini/7_x/houdini.sfs
    纯32位
    http://dl.android-x86.org/houdini/7_y/houdini.sfs
    32位的库,64位系统用
    http://dl.android-x86.org/houdini/7_z/houdini.sfs
    64位的库,64位系统用
    2、32位的使用houdini.sfs的文件名,64位的重命名为houdini64.sfs
    houdini.sfs和houdini64.sfs都复制到/var/snap/anbox/common/data/arm下
    sudo mkdir /var/snap/anbox/common/data/arm
    cp houdini.sfs houdini64.sfs /var/snap/anbox/common/data/arm
    3、新建一个enable_nativebridge文件,内容如下:
    #!/system/bin/sh
    PATH=/system/bin:/system/xbin
    houdini_bin=0
    dest_dir=/system/lib$1/arm$1
    binfmt_misc_dir=/proc/sys/fs/binfmt_misc
    cd /data/arm
    if [ -e /system/lib$1/libhoudini.so ]; then
    log -pi -thoudini "found /system/lib$1/libhoudini.so"
    elif [ -e /system/etc/houdini$1.sfs ]; then
    busybox mount /system/etc/houdini$1.sfs $dest_dir
    else
    if mountpoint -q $dest_dir; then
    # kill -9 `fuser -m $dest_dir`
    umount -f $dest_dir
    fi
    busybox mount houdini$1.sfs $dest_dir
    fi
    # if you don't see the files 'register' and 'status' in /proc/sys/fs/binfmt_misc
    # then run the following command:
    # mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
    # this is to add the supported binary formats via binfmt_misc
    if [ ! -e $binfmt_misc_dir/register ]; then
    mount -t binfmt_misc none $binfmt_misc_dir
    fi
    cd $binfmt_misc_dir
    if [ -e register ]; then
    [ -e /system/bin/houdini$1 ] && dest_dir=/system/bin
    # register Houdini for arm binaries
    if [ -z "$1" ]; then
    echo ':arm_exe:M::\\x7f\\x45\\x4c\\x46\\x01\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x28::'"$dest_dir/houdini:P" > register
    echo ':arm_dyn:M::\\x7f\\x45\\x4c\\x46\\x01\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x00\\x28::'"$dest_dir/houdini:P" > register
    else
    echo ':arm64_exe:M::\\x7f\\x45\\x4c\\x46\\x02\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\xb7::'"$dest_dir/houdini64:P" > register
    echo ':arm64_dyn:M::\\x7f\\x45\\x4c\\x46\\x02\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x00\\xb7::'"$dest_dir/houdini64:P" > register
    fi
    if [ -e arm${1}_exe ]; then
    houdini_bin=1
    fi
    else
    log -pe -thoudini "No binfmt_misc support"
    fi
    if [ $houdini_bin -eq 0 ]; then
    log -pe -thoudini "houdini$1 enabling failed!"
    else
    log -pi -thoudini "houdini$1 enabled"
    fi
    [ "$(getprop ro.zygote)" = "zygote64_32" -a -z "$1" ] && exec $0 64
    exit 0
    4、把enable_nativebridge也复制到/var/snap/anbox/common/data/arm下并赋予可执行权限
    $ chmod +x enable_nativebridge
    5、$ adb shell
    进入anbox的安卓系统
    x86_64:/ $ su
    x86_64:/ # cd /data/arm
    x86_64:/ # sh enable_nativebridge
    如果没有错误则houdini安装完成
    x86_64:/ $ mount
    后可以查看到:
    /dev/loop10 on /system/lib64/arm64 type squashfs (ro,relatime)
    /dev/loop11 on /system/lib/arm type squashfs (ro,relatime)
    当然使用官方anbox肯定会有错误的:
    error: mount: 'none'->'/proc/sys/fs/binfmt_misc': Operation not permitted
    因为官方anbox的lxc使用了uidmap将一个普通用户伪装成了root,没有挂载binfmt_misc的权限。
    这个问题需要修改anbox源码和android.img来解决。


    IP属地:天津2楼2017-11-11 05:12
    回复
      老哥 成功了没


      IP属地:山东5楼2019-02-15 09:33
      回复
        搞的怎么样了啊


        IP属地:上海6楼2019-10-21 10:29
        回复
          已经安装成功,速度很快,tim、微信不能登录。应用商店可以自动安装APP,不支持中文输入,即便是安装了中文输入法。以上。
          debian 10
          sudo apt-get install anbox
          cp android.img /var/lib/anbox
          sudo service anbox-container-manager start


          IP属地:北京7楼2020-02-07 16:15
          收起回复