設(shè)置
  • 日夜間
    隨系統(tǒng)
    淺色
    深色
  • 主題色

IT之家學院:在Android X86上運行基于ARM處理器的應用程序

2017/6/17 19:54:53 來源:IT之家 作者:Antidotes 責編:仲平
感謝IT之家網(wǎng)友 Antidotes 的線索投遞!

感謝IT之家網(wǎng)友 Antidotes 的投稿

Android X86上運行基于ARM處理器的應用程序

眾所周知,移動端的ARM CPU和計算機上的X86 CPU使用不同的指令集。雖然在編譯時可以選擇不同的編譯器編譯對應的程序,但是Android作為一個天生為手機開發(fā)的系統(tǒng),基于ARM的程序占據(jù)了幾乎所有的Android生態(tài)環(huán)境。于是Android X86的一個至關(guān)重要的問題就是兼容ARM應用程序。

這里要提一下Intel。Intel為了打入移動市場,不僅做出了像Atom這樣的的CPU,還順帶開發(fā)了一系列軟件。其中對應Android X86的問題開發(fā)了Houdini。Houdini可以把ARM指令集轉(zhuǎn)化為X86指令集從而在Android X86設(shè)備上運行。

準備條件:打開設(shè)置-應用兼容性-兼容模式

打開后如下圖:

不要以為就這么簡單,接下來正式開始教程。

官方步驟(對國內(nèi)用戶無效):

打開終端模擬器,先輸入su,回車,等出現(xiàn)#再輸入enable_nativebridge

輸入后系統(tǒng)會自動下載Houdini并運行。

實際運行情況如下:

系統(tǒng)會一直連接goo.gl造成死循環(huán)。

打開/system/bin/enable_nativebridge,可以看到這其實是一個Shell腳本文件。

其中問題出在goo.gl短鏈接識別不出來。

在[ "`uname -m`" = "x86_64" ] && url=http://goo.gl/Knnmyl || url=http://goo.gl/JsoX2C這一行就是Houdini的下載地址。我用的是Android 6.0,如果Android版本不一致Houdini是不通用的,請自行提取你的電腦上的/system/bin/enable_nativebridge文件。

如果你是64位的Android鏡像,就打開左邊的鏈接。

如果你是32位的Android鏡像,就打開右邊的鏈接。

通過Windows開VPN下載了一個houdini.sfs的文件,這就是ARM翻譯器的鏡像了。

復制下面的代碼為.sh文件:

(32位版)

#!/system/bin/sh

PATH=/system/bin:/system/xbin

busybox mount /system/bin/houdini$1.sfs /system/lib$1/arm$1

if [ ! -e $binfmt_misc_dir/register ]; then

mount -t binfmt_misc none /proc/sys/fs/binfmt_misc

fi

cd /proc/sys/fs/binfmt_misc

# register Houdini for arm binaries

echo ':arm_exe:M::\\x7f\\x45\\x4c\\x46\\x01\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x28::'"/system/lib/arm/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::'"/system/lib/arm/houdini:P" > register

[ "$(getprop ro.zygote)" = "zygote64_32" -a -z "$1" ] && exec $0 64

exit 0

(64位版)

#!/system/bin/sh

PATH=/system/bin:/system/xbin

busybox mount /system/bin/houdini$1.sfs /system/lib$1/arm$1

if [ ! -e $binfmt_misc_dir/register ]; then

mount -t binfmt_misc none /proc/sys/fs/binfmt_misc

fi

cd /proc/sys/fs/binfmt_misc

# register Houdini for arm binaries

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

[ "$(getprop ro.zygote)" = "zygote64_32" -a -z "$1" ] && exec $0 64

exit 0

并把houdini.sfs復制到Android的/system/bin

接著打開終端模擬器,先輸入su,再運行這段腳本。

恭喜你,大功告成。

如果想要每次開機自動啟用ARM翻譯器,可以把腳本文件放到/system/etc/init.d/

啟用前:

啟用后:

可以看到CPU已經(jīng)被識別為“ARMv7”,ARM翻譯器已經(jīng)正常工作了。

廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。

相關(guān)文章

關(guān)鍵詞:安卓,x86

軟媒旗下網(wǎng)站: IT之家 最會買 - 返利返現(xiàn)優(yōu)惠券 iPhone之家 Win7之家 Win10之家 Win11之家

軟媒旗下軟件: 軟媒手機APP應用 魔方 最會買 要知