前往
大廳
主題

使用Genymotion在Linux上面運行Android程式

傲月織羽 | 2024-03-07 22:04:01 | 巴幣 0 | 人氣 133

在Linux 上要運行Android遊戲的選擇不多,其中最簡單的就是使用虛擬機創建windows環境,然後在其中安裝bluestacks或是Mumu、雷電等等商業的模擬器,但這種方式的效能損耗很高、極度消耗資源,且受此影響,錄製出的腳本經常會無法按照自己設定的時間執行而出錯


其他可行的方案之中,面向開發者的Genymotoin模擬器是有跨平台的,單就玩遊戲的功能上並不如其他為遊戲而生的模擬器,好處是運行的效率較高;且架設的難度相對簡單,但這也讓我花費了幾天的時間才弄出成果,以下紀錄過程(不會附上每個動作的截圖)

紀錄內容如下

1. 申請Genymotion的使用帳號、安裝模擬器
2. 建立Android模擬器環境(Android 9、Android 11)
3. 安裝Google Play商店
4. 安裝libhoudini(armx86的轉譯器)
5. 切換語系介面
6. 待尋找處理方案部分
7. 參考資料

申請Genymotion使用帳號、安裝模擬器


1.因為Genymotion是面向開發者的商業模擬器,一般人雖然可以免費使用,但也仍需申請帳號才可使用,故先至 https://cloud.geny.io/  申請帳號
  • 要注意的是無法使用免洗的十分鐘信箱來申請(本人嘗試過,會被偵測出來而申請失敗),且之後這個帳號需要在首次啟動模擬器時輸入,所以必須紀錄好帳密
  • 公司名稱的部分可以隨意填寫
  • 申請後會寄出認證信件,點擊內部連結即可完成申請

2.以終端機執行下載來的執行檔,依據提示安裝即可


建立Android環境


1.首次啟動時,會要求輸入帳密

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商店


1.預設的模擬器環境是沒有Google Play商店的,也沒有Google相關的服務,但很多遊戲都是綁定GMS服務,故需要先安裝相關的套件,可以按下Open GAPPS來安裝

2.按下Acept同意安裝套件

3.安裝完成後會詢問是否重啟模擬器,重啟之後即可在應用程式列表中找到Google Play商店

安裝libhoudini(arm轉x86的轉譯器)


剛建立好的模擬器環境,不包含任何的arm轉x86的轉譯器,所以是無法執行絕大多數的Android的程式,在Google Play商店中也不會出現不支援的程式,所以會搜尋不到遊戲,故必須自己安裝需轉譯器
  • Android 9以前的系統
https://github.com/m9rco/Genymotion_ARM_Translation 下載轉譯器,然後依據自己創建的版本,將相對應的轉譯器拖移至模擬器中進行安裝,安裝後重啟模擬器即可
  • Android 11
https://github.com/niizam/Genymotion_A11_libhoudini 下載轉譯器,並依據頁面的說明進行操作
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的介面中文化


待尋找處理方案部分


前面提到Genymotion是面向開發者的模擬器,下面列舉出目前我還未找到應對方式的部分
  • 腳本錄製:如果要掛方舟的關卡,這點會造成困擾,但如果系統沒有掛其他東西,倒也可以找按鍵精靈來達成目的
  • 按鍵映射:單純畫面點擊的遊戲影響不大,面對需要多點觸控的遊戲會造成影響,於我而言方舟的關卡暫停、兩倍速、返回等操作沒辦法用鍵盤完成就挺難受的
  • 模擬器備份:目前實測模擬器的資料夾無法直接複製到其他電腦上運行,所以每換一台電腦就要重新下載遊戲檔案

參考資料

https://github.com/niizam/Genymotion_A11_libhoudini
https://github.com/m9rco/Genymotion_ARM_Translation
https://ivonblog.com/posts/genymotion-for-linux/
https://www.kocpc.com.tw/archives/4266

創作回應

ivon852
Genymotion可以用QtScrcpy達成按鍵映射
2024-03-15 11:32:29
傲月織羽
首先,請容許我大喊一聲"是Ivon大佬!",你的部落格於我而言是一個了解Linux的指引之一
2024-03-15 20:38:20
傲月織羽
QtScrcpy這個還沒有使用過,主要是Genymotion的模擬器搭建的環境可用容量過小,我安裝不了方舟,所以目前也就沒有繼續嘗試....
2024-03-15 20:39:26
傲月織羽
目前等有空的時候再去嘗試擴大可用空間的方法..
2024-03-15 20:39:59
ivon852
過獎了哈哈。Genymotion的空間問題,qcow2和vmdk應該都有調整的方法。
2024-03-16 04:20:39
傲月織羽
不不,沒有過獎,我現在可以在最常用的電腦以Kubuntu為主力系統,前面花幾個月的時間在虛擬機上摸索,在 大佬部落格 及 揮棒大佬的文章 得到不少的指引
2024-03-16 08:56:49
傲月織羽
雖然在Linux上還很多東西我要一邊看google才能操作,但你們提供的資源真的讓我受益不少
2024-03-16 08:57:30

更多創作