針對 7.* 重寫的新文章 Android-x86 Nougat 版 已取代本文。
黃志偉大大 所開發的 android-x86 讓你可以在 PC 裡面開一部平板電腦來玩。 對於老師/演講者超級有用: 你可以透過它用筆電接單槍投影, 展示平板/手機 (虛擬機) 上面的 apps, 而不需要煩惱如何將實體平板/手機接上單槍。 適用於 f-droid 市集及其他 「可以取得 apk 檔」 的 apps; 不適用於 「拿不到 apk 檔」 的 google play apps。
android-x86 對於開發人員也很有用 -- 事實上 (還不算是開發人員的) 我就是因為受不了 android 開發環境的龜速而搜尋到這一篇, 才開始玩 android-x86 的: How to speed up the Android Emulator by up to 400%。
Windows 用戶請參考 重灌狂人的教學文。 (只進虛擬機操作體驗, 沒有安裝步驟。)
本文全程使用 root 的身份在做事。
首先建立一個 4G 大小的映象檔案, 當做平板的硬碟:
qemu-img create -f qcow2 ..../experiment.img 4G
用 ls -l ..../experiment.img
檢查,
會發現這個檔案的大小只有幾百 KB 而不是想像中的 4GB。
這是因為 qemu 所提供的 qcow2 格式可以隨著需要才逐漸成長。
再來用光碟開機, 並且把光碟上的 android-x86 安裝到 experiment.img 映象檔上面:
kvm -monitor stdio -vga std -m 1024 -cdrom ..../android-x86-4.4-r1.iso -hda ..../experiment.img -boot d
看到開機選單, 趕快移到最下方的 「Installation -- Install Android-x86 to harddisk」。 簡單摘要一下每一步我的選擇:
- Create/Modify partitions (分割硬碟, 就是剛建立的那個 experiment.img 映象檔)
- 在 cfdisk 介面底下:
- 選 new
- 選 primary
- 按照預設的空間分配 (整個映象檔的大小) 直接按 Enter
- 勾選 Bootable
- 選 write (把剛剛所有設定真的寫入映象檔)
- 回答 yes ("是的, 舊資料全部刪除沒關係")
- 選 quit (離開 cfdisk)
- 再來選擇要把 android x86 安裝到哪一顆硬碟去。 先前沒得選; 現在出現了唯一的選擇: 「sda1 Linux QEMU HARDDISK」, 按 Enter。
- 要用什麼方式格式化這個分割? 選 ext3 。
- 選擇 yes ("是的, 舊資料全部刪除沒關係")
- 格式化的時間很長, 而且一直停在 0% 不會動。
但其實並沒有當掉。 你可以用
ls -l ..../experiment.img
查看映象檔一直在長大。 以我當初指定 4G 來說, 映象檔最後長到 70M 左右, 格式化就完成了。 - 要安裝開機管理員 grub 嗎? 沒差。 就給他 yes 了。
- 要把 /system 目錄設成可讀寫嗎? 需要完整 root 權限的人, 當然選 yes。
- 選擇 reboot, 回到開機選單時, 直接關掉虛擬機。
如果覺得上面太簡略, 硬碟分割的細步畫面快照可以參考 How To Install Android-x86 4.0 Using QEMU On Ubuntu 11.10/12.04、 How to Install Android on PC、 「电脑安装安卓Android-X86教程」 或 「Android x86详细安装教程 让安卓跑在PC上」 等等各篇關於 cfdisk 的畫面。
命令列上的 -monitor stdio
主要是保險用的。 萬一虛擬機當機還是出了什麼狀況,
至少還可以從 kvm 命令列上
送指令 檢查或救援。 如果省略這段, 就沒有 kvm 命令列可用了。
至於 -vga std
我忘記是為了要解決什麼問題而加上去的
^_^|||
重要! 操作時, 滑鼠如果被關進虛擬機裡面, 該怎麼辦? 按 「ctrl-alt」 就可以逃出來。
安裝完之後選擇 reboot, 然後就直接關掉虛擬機。 回到命令列, 這次不指定光碟, 直接從 experiment.img 映象檔開機:
kvm -monitor stdio -vga std -m 1024 -soundhw es1370 -redir tcp:4444::5555 ..../experiment.img
指定 -soundhw es1370
才會有聲音;
而 -redir tcp:4444::5555
則是為了要讓電腦主機可以用 adb 連線到平板虛擬機。 (下詳)
首次開機, 就照自己的正常步驟設定。 選擇 wifi 那邊可以直接 skip 掉, 因為虛擬機不需要 wifi, 預設狀態即可透過 PC 上網。 根據 App HowTo, android-x86 未獲 google 授權, 所以無法安裝 google play 商店的軟體。 對我無差, 因為 我跟西藏人一樣, 相信「原始碼攤在陽光下」才是手機平板真正的安全保障。 所以我都略過 google 帳號的設定、 在設定當中勾選 「允許從不明來源安裝軟體」、 直奔 f-droid 、 下載並安裝 f-droid 的 apk、 從此以後 (幾乎) 只透過 f-droid 安裝軟體。
如果你太認真讀貴哥的文章, 一直沒去碰虛擬機,
導致它休眠叫不回來 (螢幕一片漆黑),
請找到電腦鍵盤右下角 menu 鍵 (夾在 alt 跟 ctrl 之間),
長按一秒。 或是在 kvm 終端機下指令: sendkey menu
。
(看吧, 剛剛命令列上的 -monitor stdio
很有用吧!)
然後進入虛擬機視窗, alt-f1 跟 alt-f7 輪流按幾次, 就救回來了。
趕快到 settings => display => sleep => never time out
以免以後它再睡著。 以上是從這篇
Android on virtualBox gets stuck after idle 跟
Resume from blacked-out screen 這兩篇問答修改過來的。
再來, 因為我得了一種 「沒有取得 shell 就沒有安全感」 的病, 所以一定要 設定 adb 讓電腦與平板連線。 根據 Debug Howto, 因為我們用 qemu 跑虛擬機, 所以比實體機要多兩個步驟:
- 啟動模擬器時, 要加上前述的
-redir tcp:4444::5555
選項。 這跟 debug howto 的寫法不太一樣, 是因為看到 qemu 官網的網路設定文件 說-net nic
等等語法過時了, 所以找到 wikibooks 的 QEMU 網路設定文件 解釋如何轉 port。 Wikibooks 也解釋: 其實 qemu 不需要任何參數, 虛擬機的網路自動就會通。 - 回到 linux 命令列, 先下
adb connect localhost:4444
然後就可以 (像連接實體機一樣) 下 adb shell
連進你的平板虛擬機! 因為是虛擬機, 所以連
「信任那部想要對我除錯的電腦嗎?」 這樣的警告訊息都省略了。
進了 shell、 下 su 指令直接變身成 root,
就像在首都插旗一樣, 成為這部平板真正的主人,
今晚終於可以安心地睡覺了!
最後補充說明一下: 因為 android-x86 不是在最底下硬體的層次, 而只是在軟體的層次模擬 android 環境, 所以如果你想展示的是你自己的平板環境 (例如刷成 CyanogenMod 或 replicant 等等不同的 rom) 而不是只有幾個 「隨處可安裝」 的 apk 檔, 那麼 android-x86 就不適用了。 這時你必須 叫 qemu 直接模擬 ARMv8 之類的。 不過貴哥有興趣的只是建置一個測試開放原始碼 app 的 android 開發環境, 所以就不玩 qemu-ARMv8 了。
沒有留言:
張貼留言
因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。