安卓模拟器 2.0 以后完全到达可用级别了,各种操作非常流畅。所以想用来做一个虚拟环境跑 App ,但是很多 App (比如微信支付宝等)依赖 ARM 原生代码 library ,不能直接在 x86 的模拟器上跑。
搜了一下,英特尔的方案是:
1. 使用 X86 的 NDK 重新重新打包应用。
2. 在 X86 的安卓系统中装 ARM Binary Translation ,通过 Hook JNI 调用把 ARM 指令转成 X86 指令。
1 没指望,就从 2 入手:
1 )创建一个 AVD : Intel atom x86 image, google api level 23
2 )从 google 发布的 Nexus player (用了 atom cpu )二进制文件中,拷贝安卓 6.0 的 native bridge 驱动。
https://developers.google.com/android/nexus/drivers#fugu3 )修改 AVD 的 system.img 和 ramdisk.img 使能 Native Bridge 。 参考 Nexus player 的配置,
ro.dalvik.vm.native.bridge=
libhoudini.soro.dalvik.vm.isa.arm=x86
ro.enable.native.bridge.exec=1 等
启动后,运行 App 。
Native Bridge 成功加载了,但 App 运行还是失败。
02-25 15:04:11.990 1512 1620 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=
com.tencent.mm/.ui.LauncherUI (has extras)} from uid 10007 on display 0
02-25 15:04:12.046 2586 2586 D houdini : [2586] Initialize library(version: 6.0.0_y.48180 RELEASE)... successfully.
02-25 15:04:12.048 1512 1524 I ActivityManager: Start proc 2586:
com.tencent.mm/u0a55 for activity
com.tencent.mm/.ui.LauncherUI02-25 15:04:13.700 2586 2586 D houdini : [2586] Added shared library /data/app/
com.tencent.mm-1/lib/arm/
libstlport_shared.so for ClassLoader by Native Bridge.
02-25 15:04:13.703 2586 2586 E ActivityThread: Failed to find provider info for com.tencent.mm.coolassist.debugprovider
02-25 15:04:13.784 2586 2586 F libc : Fatal signal 11 (SIGSEGV), code 128, fault addr 0x0 in tid 2586 (
com.tencent.mm)
dmsg
[ 366.571014] traps:
com.tencent.mm[2586] general protection ip:b0f13dd1 sp:10011f20 error:30 in
libhoudini.so[b0cfa000+3b4000]
另外,也尝试了 android-x86 和 remix os 提供的 libhoudini ,他们的 houdini 版本更旧, 5.多的。也是失败,最成功的一次看到了微信启动画面的地球小人。
使能 Native bridge 后 ARM 版本的 busy box 可以跑,确认基本功能正常。
更多 log :
https://gist.github.com/wuhx/bfd814bba5f2523449f1V2 有人了解这块吗?求教
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/259515
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.