在Linux 上要運行Android遊戲的選擇不多,其中最簡單的就是使用虛擬機創建windows環境,然後在其中安裝bluestacks或是Mumu、雷電等等商業的模擬器,但這種方式的效能損耗很高、極度消耗資源,且受此影響,錄製出的腳本經常會無法按照自己設定的時間執行而出錯
其他可行的方案之中,面向開發者的Genymotoin模擬器是有跨平臺的,單就玩遊戲的功能上並不如其他為遊戲而生的模擬器,好處是運行的效率較高;且架設的難度相對簡單,但這也讓我花費了幾天的時間才弄出成果,以下紀錄過程(不會附上每個動作的截圖)
紀錄內容如下
1. 申請Genymotion的使用帳號、安裝模擬器
2. 建立Android模擬器環境(Android 9、Android 11)
3. 安裝Google Play商店
4. 安裝libhoudini(arm轉x86的轉譯器)
5. 切換語系介面
6. 待尋找處理方案部分
7. 參考資料
申請Genymotion使用帳號、安裝模擬器
- 要注意的是無法使用免洗的十分鐘信箱來申請(本人嘗試過,會被偵測出來而申請失敗),且之後這個帳號需要在首次啟動模擬器時輸入,所以必須紀錄好帳密
- 公司名稱的部分可以隨意填寫
- 申請後會寄出認證信件,點擊內部連結即可完成申請
建立Android環境
2.詢問授權方式,這邊選擇個人使用(Personal Use)
3.一些合約內容
4.進入管理頁面後,按下右上角的+,來增加模擬器
5.選擇裝置要建立的裝置名稱,選哪種影響都不大,不會因為選了一個很舊的型號,就沒辦法使用新版本的Android系統,主要是差在初始的裝置的內部解析度
6.這邊可以設定模擬器環境的Android版本,不建議建立太舊的Android環境,主要是App本身會要求API版本,過舊的版本會無法運行新版的程式,當前的環境來說比較推薦的是Android 9、Android 11兩者,若有特殊需求則可以考慮架設其他較舊的版本
也不建議選擇高於11的Android版本,因為系統的版本需要搭配相對應的轉譯器才可以運行程式,而當前我並未找到適用於Android 11之後的轉譯器
7.設定要分配的核心數量、記憶體大小,最下方的VM Heap size維持預設即可,目前不清楚這個選項的實際用途,但當我設定1024 MB的時候就發生模擬器無法開啟的狀況
8.設定圖形相關的參數,例如解析度、OpenGL版本等等,依據自身需求調整9.雜項,依自己需求設定即可,上方選項為出現Android導覽列、下方為使用虛擬鍵盤打字
10.最後一個選項無法修改,直接按下INSTALL建立環境即可
安裝Google Play商店
2.按下Acept同意安裝套件
3.安裝完成後會詢問是否重啟模擬器,重啟之後即可在應用程式列表中找到Google Play商店
安裝libhoudini(arm轉x86的轉譯器)
剛建立好的模擬器環境,不包含任何的arm轉x86的轉譯器,所以是無法執行絕大多數的Android的程式,在Google Play商店中也不會出現不支援的程式,所以會搜尋不到遊戲,故必須自己安裝需轉譯器
1.安裝ADB Shell(Google Play商店可下載到)
2.啟動ADB,並執行Local shell
3.在執行Local Shell時,會提示檔案權限相關的問題,首選General一般模式
若後續無法運行App,則重新執行shell,並選擇Compatibility相容性模式嘗試
4.賦予ADB執行權限後,再次執行Local shell
- Android 9以前的系統
- Android 11
1.安裝ADB Shell(Google Play商店可下載到)
2.啟動ADB,並執行Local shell
3.在執行Local Shell時,會提示檔案權限相關的問題,首選General一般模式
若後續無法運行App,則重新執行shell,並選擇Compatibility相容性模式嘗試
4.賦予ADB執行權限後,再次執行Local shell
5.依據頁面的流程,在shell當中執行su命令切換執行權限,此時會跳出警示確認是否開放最高權限,選Remember choice forever來永久允許
su |
切換至超級使用者權限 |
6.複製掛接隱藏磁區指令,並貼入shell運行
mount -o rw,remount / |
掛接android的隱藏磁區 |
echo 'ro.product.cpu.abilist=x86_64,x86,arm64-v8a,armeabi-v7a,armeabi ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi ro.product.cpu.abilist64=x86_64,arm64-v8a ro.vendor.product.cpu.abilist=x86_64,x86,arm64-v8a,armeabi-v7a,armeabi ro.vendor.product.cpu.abilist32=x86,armeabi-v7a,armeabi ro.vendor.product.cpu.abilist64=x86_64,arm64-v8a ro.odm.product.cpu.abilist=x86_64,x86,arm64-v8a,armeabi-v7a,armeabi ro.odm.product.cpu.abilist32=x86,armeabi-v7a,armeabi ro.odm.product.cpu.abilist64=x86_64,arm64-v8a ro.dalvik.vm.native.bridge=libhoudini.so ro.enable.native.bridge.exec=1 ro.enable.native.bridge.exec64=1 ro.dalvik.vm.isa.arm=x86 ro.dalvik.vm.isa.arm64=x86_64 ro.zygote=zygote64_32' | tee -a /system/build.prop >> /system/vendor/build.prop |
7.將適用於Android 11的libhoudini檔案拖移至模擬器內安裝,並重啟模擬器
8.任意下載一個遊戲執行測試,這邊測試少女前線
切換語系介面
1.選擇settings
2.開啟後拉至最下方,找到system的選項,並進入Languages選項
3.在Languages當中新增繁體語系,並將繁體語系移至最上層,即可完成模擬器內部Android的介面中文化
2.開啟後拉至最下方,找到system的選項,並進入Languages選項
3.在Languages當中新增繁體語系,並將繁體語系移至最上層,即可完成模擬器內部Android的介面中文化
待尋找處理方案部分
前面提到Genymotion是面向開發者的模擬器,下面列舉出目前我還未找到應對方式的部分
https://github.com/m9rco/Genymotion_ARM_Translation
https://ivonblog.com/posts/genymotion-for-linux/
https://www.kocpc.com.tw/archives/4266
- 腳本錄製:如果要掛方舟的關卡,這點會造成困擾,但如果系統沒有掛其他東西,倒也可以找按鍵精靈來達成目的
- 按鍵映射:單純畫面點擊的遊戲影響不大,面對需要多點觸控的遊戲會造成影響,於我而言方舟的關卡暫停、兩倍速、返回等操作沒辦法用鍵盤完成就挺難受的
- 模擬器備份:目前實測模擬器的資料夾無法直接複製到其他電腦上運行,所以每換一臺電腦就要重新下載遊戲檔案
參考資料
https://github.com/niizam/Genymotion_A11_libhoudinihttps://github.com/m9rco/Genymotion_ARM_Translation
https://ivonblog.com/posts/genymotion-for-linux/
https://www.kocpc.com.tw/archives/4266