相關資料的詞條
- 欢迎来到THBWiki!如果您是第一次来到这里,请点击右上角注册一个帐户
- 有任何意见、建议、求助、反馈都可以在 讨论板 提出
- THBWiki以专业性和准确性为目标,如果你发现了任何确定的错误或疏漏,可在登录后直接进行改正
在Android手机上运行日服游戏
相關資料的詞條
從2019年開始,東方官方逐漸放開了對於商業二次創作手機遊戲的授權。到現在為止,在智能手機平台上已經有六款獲得了授權,並處於開服運營狀態的商業手遊,分別是東方CB(已於2020年10月14日停服)、東方LW、東方DD(已於2024年5月15日停服)、東方DK(已於2022年10月28日停服)、東方AR和東方GL。
然而,這些手遊大都只在日本地區運營,對於國內的玩家而言,它們的本地化程度等於零。因此想要玩到這些手機遊戲可能會有些難度,而其中語言的隔閡則只是一小部分問題。
這篇知識文章介紹如何在Android智能手機上運行日服手機遊戲並實現相關功能。
Google Play 組件
Google Play組件是國外Android手機出廠ROM中自帶的系統組件,會連接谷歌的服務器自動更新。而在國內的Android手機上,由於用得到這一功能的人較少,並且它在手機後台反覆重試連接谷歌服務會導致嚴重的耗電問題,大部分國產手機廠商都會選擇不在自己的出廠ROM中內置該服務。而如果我們想在手機上正常運行外服手遊和一些國外APP,則需要將這一環境裝回來。
在較新版本的Android系統上,Google Play組件包含以下內容:
Google Services Framework(Google 服務框架)
Google Play Services(Google Play 服務)
Google Play Store(Google Play 商店)
運行一些外服遊戲時,可能還需要安裝以下內容:
Google Play Games(Google Play 遊戲)
而想要氪金的時候,還需要安裝以下內容:
Google Pay(Google Pay)
需要注意的是,不同Android手機所需要的Google Play組件版本都是不同的,安裝包不能通用。
確定自己的手機所需要的具體是哪個版本的Google Play組件,由以下三個因素決定:
- 處理器架構(CPU Architecture)
對於安卓手機,現在常見的SoC架構有四種,分別是arm (armeabi, armeabi-v7a),arm64 (arm64, arm64-v8a),x86,x86_64 (x64)。具體由其指令集決定,詳見List of CPU architectures。
其中,最常見且較為現代的是arm64-v8a,絕大部分高通驍龍,華為海思麒麟,聯發科,以及三星獵戶座的較新處理器型號都是屬於該架構。
armeabi-v7a則是較老的手機處理器架構,一些舊手機,如某些聯發科SoC的山寨手機可能屬於該架構。
x86與x86_64則是英特爾和AMD的處理器架構,是PC上最常使用的,而由於功耗等問題在手機上則相當罕見。不少應用完全沒有針對其做任何適配。
arm64-v8a處理器的手機能夠向下兼容為armeabi-v7a開發的應用,同樣x86_64處理器的手機能夠向下兼容為x86開發的應用。但這樣顯然會無法發揮其最大性能,並可能會導致一些其他的問題。
用戶能夠在手機系統設置中找到自己的處理器型號,而後可以網上搜索該型號以獲知其屬於哪一個架構。實在不確定時,arm64-v8a往往會是個正確的選擇。
谷歌公司有計劃未來的Android不再提供32位的版本,徹底結束對於這類架構處理器的支持。此外,微軟也宣布了Windows 10 2004會是32位Windows操作系統的最後一個主要功能更新版本。
- 最低Android版本(Minimum Android Version)
用戶能夠在手機系統設置中看到自己的安卓系統版本,注意需要和手機廠商定製ROM的版本區分開來。Google Play 組件提供支持的最低Android版本是Android 4.1,而現在的不少應用都會要求Android 6.0或更高的版本。
Android版本歷史詳見Android version history。
- 屏幕DPI(Screen DPI)
DPI(Dots Per Inch),是手機屏幕像素密度的衡量指標,單位是像素/英寸。
從技術角度考慮,當涉及屏幕的像素密度時,更準確的術語應該是PPI(Pixels Per Inch),但DPI仍然是更為廣泛使用的叫法。對於作為非專業用戶的我們而言,這兩者的含義大致是相同的,沒必要做仔細區分。
用戶可以先訪問自己手機廠商官網頁面上有關的規格參數,或搜索手機型號以獲知該信息;如未能找到,屏幕的DPI數據也可以由計算得出,非常簡單。
屏幕DPI計算公式:
[math]\displaystyle{ DPI = {\sqrt{X^2+Y^2} \over Z} }[/math]
其中,X與Y分別代表屏幕長和寬上的像素數,Z代表屏幕大小(英寸)。這些信息都可以很輕鬆地查找到。
例如,Google Pixel 4 XL的屏幕分辨率是3200*1800像素,屏幕大小是6.3英寸,計算得到它的DPI約等於583,相當高;小米10 Pro的屏幕分辨率是2340*1080像素,屏幕大小是6.67英寸,計算得到它的DPI約等於386。當然,除根據計算得來的這個數字以外還有等效PPI等更複雜的概念,在此不多作介紹。
2010年,時任蘋果公司CEO史蒂夫·喬布斯在iPhone 4發布會上說:「當你所拿的東西距離你10-12英寸時,它的分辨率只要達到300ppi這個『神奇數字』以上,你的視網膜就無法分辨出像素點了。」後來這個數字被精確定義到了326。而隨着技術的不斷發展,現在手機屏幕的DPI也已經大都超過了這個數字。
選擇自己所需要的APK時,應當選擇儘量接近或略微超過手機實際DPI的安裝包;如果不能完全匹配,則可以選擇DPI更高的安裝包。或者,部分應用會有「nodpi」的通用版本,所有用戶都能正常使用。
確認了這三個信息後,可以進入下一個步驟:尋找合適的Google Play 組件安裝包。
為了圖省事,不少人可能會選擇使用各種第三方的「谷歌安裝器」進行安裝。這一方法同樣可行,雖然並不十分推薦。
這裡則以網站apkmirror提供的APK下載鏈接為例:
Google Services Framework
Google Play Services
Google Play Store
Google Play Games
Google Pay(需要翻牆)
Android TV是適合Android電視使用的版本,Wear OS是適合Wear OS手錶使用的版本。沒有後綴的則是適合普通安卓手機的版本。
這裡還有一個簡單的判斷方法,谷歌對於多版本的應用會有一個統一的六位數編號,軟件更新後這一編號不會發生變化。例如,對於Google Play Services,具體如下:
| 編號 | Android版本 | 架構 | DPI |
| 000300 | Android 4.1+ | armeabi-v7a | nodpi |
| 000302 | Android 4.1+ | armeabi-v7a | 160dpi |
| 000304 | Android 4.1+ | armeabi-v7a | 240dpi |
| 000306 | Android 4.1+ | armeabi-v7a | 320dpi |
| 000308 | Android 4.1+ | armeabi-v7a | 480dpi |
| 020300 | Android 5.0+ | armeabi-v7a | nodpi |
| 020302 | Android 5.0+ | armeabi-v7a | 160dpi |
| 020304 | Android 5.0+ | armeabi-v7a | 240dpi |
| 020306 | Android 5.0+ | armeabi-v7a | 320dpi |
| 020308 | Android 5.0+ | armeabi-v7a | 480dpi |
| 040300 | Android 6.0+ | armeabi-v7a | nodpi |
| 040302 | Android 6.0+ | armeabi-v7a | 160dpi |
| 040304 | Android 6.0+ | armeabi-v7a | 240dpi |
| 040306 | Android 6.0+ | armeabi-v7a | 320dpi |
| 040308 | Android 6.0+ | armeabi-v7a | 480dpi |
| 110300 | Android 8.1+ | armeabi-v7a | nodpi |
| 110302 | Android 8.1+ | armeabi-v7a | 160dpi |
| 110304 | Android 8.1+ | armeabi-v7a | 240dpi |
| 110306 | Android 8.1+ | armeabi-v7a | 320dpi |
| 110308 | Android 8.1+ | armeabi-v7a | 480dpi |
| 100300 | Android 9.0+ | armeabi-v7a | nodpi |
| 100302 | Android 9.0+ | armeabi-v7a | 160dpi |
| 100304 | Android 9.0+ | armeabi-v7a | 240dpi |
| 100306 | Android 9.0+ | armeabi-v7a | 320dpi |
| 100308 | Android 9.0+ | armeabi-v7a | 480dpi |
| 120300 | Android 10+ | armeabi-v7a | nodpi |
| 120302 | Android 10+ | armeabi-v7a | 160dpi |
| 120304 | Android 10+ | armeabi-v7a | 240dpi |
| 120306 | Android 10+ | armeabi-v7a | 320dpi |
| 120308 | Android 10+ | armeabi-v7a | 480dpi |
| 150300 | Android 11+ | armeabi-v7a | nodpi |
| 150302 | Android 11+ | armeabi-v7a | 160dpi |
| 150304 | Android 11+ | armeabi-v7a | 240dpi |
| 150306 | Android 11+ | armeabi-v7a | 320dpi |
| 150308 | Android 11+ | armeabi-v7a | 480dpi |
| 190300 | Android 12+ | armeabi-v7a | nodpi |
| 190302 | Android 12+ | armeabi-v7a | 160dpi |
| 190304 | Android 12+ | armeabi-v7a | 240dpi |
| 190306 | Android 12+ | armeabi-v7a | 320dpi |
| 190308 | Android 12+ | armeabi-v7a | 480dpi |
| 000400 | Android 4.1+ | arm64-v8a + armeabi-v7a | nodpi |
| 000402 | Android 4.1+ | arm64-v8a + armeabi-v7a | 160dpi |
| 000404 | Android 4.1+ | arm64-v8a + armeabi-v7a | 240dpi |
| 000406 | Android 4.1+ | arm64-v8a + armeabi-v7a | 320dpi |
| 000408 | Android 4.1+ | arm64-v8a + armeabi-v7a | 480dpi |
| 020400 | Android 5.0+ | arm64-v8a + armeabi-v7a | nodpi |
| 020402 | Android 5.0+ | arm64-v8a + armeabi-v7a | 160dpi |
| 020404 | Android 5.0+ | arm64-v8a + armeabi-v7a | 240dpi |
| 020406 | Android 5.0+ | arm64-v8a + armeabi-v7a | 320dpi |
| 020408 | Android 5.0+ | arm64-v8a + armeabi-v7a | 480dpi |
| 040400 | Android 6.0+ | arm64-v8a + armeabi-v7a | nodpi |
| 040402 | Android 6.0+ | arm64-v8a + armeabi-v7a | 160dpi |
| 040404 | Android 6.0+ | arm64-v8a + armeabi-v7a | 240dpi |
| 040406 | Android 6.0+ | arm64-v8a + armeabi-v7a | 320dpi |
| 040408 | Android 6.0+ | arm64-v8a + armeabi-v7a | 480dpi |
| 110400 | Android 8.1+ | arm64-v8a + armeabi-v7a | nodpi |
| 110402 | Android 8.1+ | arm64-v8a + armeabi-v7a | 160dpi |
| 110404 | Android 8.1+ | arm64-v8a + armeabi-v7a | 240dpi |
| 110406 | Android 8.1+ | arm64-v8a + armeabi-v7a | 320dpi |
| 110408 | Android 8.1+ | arm64-v8a + armeabi-v7a | 480dpi |
| 100400 | Android 9.0+ | arm64-v8a + armeabi-v7a | nodpi |
| 100402 | Android 9.0+ | arm64-v8a + armeabi-v7a | 160dpi |
| 100404 | Android 9.0+ | arm64-v8a + armeabi-v7a | 240dpi |
| 100406 | Android 9.0+ | arm64-v8a + armeabi-v7a | 320dpi |
| 100408 | Android 9.0+ | arm64-v8a + armeabi-v7a | 480dpi |
| 120400 | Android 10+ | arm64-v8a + armeabi-v7a | nodpi |
| 120402 | Android 10+ | arm64-v8a + armeabi-v7a | 160dpi |
| 120404 | Android 10+ | arm64-v8a + armeabi-v7a | 240dpi |
| 120406 | Android 10+ | arm64-v8a + armeabi-v7a | 320dpi |
| 120408 | Android 10+ | arm64-v8a + armeabi-v7a | 480dpi |
| 150400 | Android 11+ | arm64-v8a + armeabi-v7a | nodpi |
| 150402 | Android 11+ | arm64-v8a + armeabi-v7a | 160dpi |
| 150404 | Android 11+ | arm64-v8a + armeabi-v7a | 240dpi |
| 150406 | Android 11+ | arm64-v8a + armeabi-v7a | 320dpi |
| 150408 | Android 11+ | arm64-v8a + armeabi-v7a | 480dpi |
| 190400 | Android 12+ | arm64-v8a + armeabi-v7a | nodpi |
| 190402 | Android 12+ | arm64-v8a + armeabi-v7a | 160dpi |
| 190404 | Android 12+ | arm64-v8a + armeabi-v7a | 240dpi |
| 190406 | Android 12+ | arm64-v8a + armeabi-v7a | 320dpi |
| 190408 | Android 12+ | arm64-v8a + armeabi-v7a | 480dpi |
| 000700 | Android 4.1+ | x86 | nodpi |
| 020700 | Android 5.0+ | x86 | nodpi |
| 040700 | Android 6.0+ | x86 | nodpi |
| 110700 | Android 8.1+ | x86 | nodpi |
| 100700 | Android 9.0+ | x86 | nodpi |
| 120700 | Android 10+ | x86 | nodpi |
| 150700 | Android 11+ | x86 | nodpi |
| 190700 | Android 12+ | x86 | nodpi |
| 000800 | Android 4.1+ | x86 + x86_64 | nodpi |
| 020800 | Android 5.0+ | x86 + x86_64 | nodpi |
| 040800 | Android 6.0+ | x86 + x86_64 | nodpi |
| 110800 | Android 8.1+ | x86 + x86_64 | nodpi |
| 100800 | Android 9.0+ | x86 + x86_64 | nodpi |
| 120800 | Android 10+ | x86 + x86_64 | nodpi |
| 150800 | Android 11+ | x86 + x86_64 | nodpi |
| 190800 | Android 12+ | x86 + x86_64 | nodpi |
某些國產手機ROM可能對Android系統底層做了深度修改,或有意阻止了用戶使用谷歌服務,即便在安裝了合適的Google Play組件後此服務也無法正常運行。這種情況下只能通過解鎖BootLoader並刷入第三方ROM包的方式解決;或安裝虛擬空間類軟件,在有框架的"虛擬機"中運行。(注意,此方法有一定風險,可能會導致谷歌封號,或者是虛擬空間本身不乾淨,存在竊取數據等行為,使用時還需注意)
Google Play 商店
Google Play Store是Android系統唯一真正意義上的官方應用商店,地位相當於蘋果App Store對於iOS,提供了應用下載更新和正版付費應用購買等服務。此外,部分通過東方同人音樂流通發行了的東方同人音樂也可以在這裡試聽和購買。使用Google Play 商店需要登錄Google賬號。
而對於一個外服手遊來說,它們在安卓端上架即意味着登陸了Play 商店。但有些時候我們會遇到這樣的問題:某個應用或遊戲已經登陸了Play 商店,自己卻就是怎麼也搜索不到。
會發生這種情況,一般是由於谷歌允許應用開發者自由地選擇向哪些用戶顯示或不顯示自己開發的APP,而他們決定了向你的設備隱藏該應用。應用是否顯示通常取決於以下因素:
- x 應用已鎖區
這是最常見的一種情況,比如東方CB和東方LW兩款手遊在Google Play Store上全部鎖在了日區,只有登錄了日區Google Play賬號的用戶能夠看到。
- x 應用處於內部測試狀態
處於內測階段的APP只有受開發者邀請的用戶能夠看見。可以從開發者那裡找到內測邀請鏈接,註冊後即可加入內測。
- x 設備不兼容或不滿足應用運行的最低要求
開發者沒有對你的手機架構做適配,或者安卓版本太低,都可能導致這一情況。
- x 設備未通過谷歌Play保護機制(Google Play Protect)認證或谷歌SafetyNet驗證
-
某個SafetyNet驗證測試樣本
這是一種較為複雜的問題,Play保護機制與SafetyNet驗證是谷歌的一組安全驗證相關服務。谷歌的描述是设备制造商会与 Google 合作,以证明已安装 Google 应用的 Android 设备安全无虞,且能够正常运行应用。要获得 Play 保护机制认证,设备必须通过 Android 兼容性测试。;一些國產與測試版本的手機ROM,或系統被修改後會無法通過該驗證。該功能常用於對版權問題有高度要求的應用,如Netflix。詳見Google Play Protect,使用SafetyNet抵禦安全威脅。
遇到這種情況並非無法破解,比如在解鎖BootLoader並Root(或通過fastboot線刷第三方rec等)後使用某些Magisk模塊能夠通過SafetyNet驗證中的ctsProfile驗證。這一操作具體實現難度較高,且不適合普通用戶進行,因此不多做介紹。
對於這部分內容感興趣的用戶詳細可以參考少數派的這篇文章。
- 對於使用模塊或Xposed框架強行通過驗證的方法仍不完美,可能出現顯示已通過認證,但實際上仍然不能正常運行的情況。如果為了圖方便(一般只是為了打外國遊戲的普通用戶可能不了解刷機之類的方法),最好還是購買非國行的手機,非國行基本上都有谷歌。
- 如果刷了機,修改了系統,那麼可以在 谷歌網站(需要翻牆)上註冊自己系統的Android ID(可通過ADB命令行或Devcheck等軟件查看),這樣的話也許會通過驗證。
- 要檢測自己的手機是否因為撞了SafetyNet而搜不到要找到APP,可以通過Play商店->設置->關於->Play保護機制認證中查看,或在手機上通過超鏈接打開受保護應用程序的商店界面(如Netfilx(需要翻牆),如果看到「⚠您的設備與此版本不兼容。」的紅字,除了1%的真不兼容的情況外,剩下的99%則一定是未通過SafetyNet。如果提示的是「⚠此商品無法在您所在國家/地區購買或下載。」,則是區域問題。
那麼對於大多數的一般用戶而言,遇到搜不到一些應用的情況,只需要換個區就可以了。以下介紹如何在Google Play Store上將自己賬號的地區更改為日本。
- c 此前沒有在Play 商店進行過交易
將自己的代理IP地址更換到日本,清除Play 商店的數據後重新打開即可。
- c 此前已在Play 商店的其他地區進行過交易
第一次交易完成後,你的賬號即會和第一次交易時的IP或填寫的賬單地址所在的地區綁定;即便將來更換代理IP地址到其他國家,也能並且只能顯示原先地區的應用。這種情況下換區需要綁定一個新的交易方式。
將自己的代理IP地址更換到日本後,在Google Play Store中依次選擇賬號→偏好設置→國家/地區和個人資料→切換到日本的Play商店,並按照頁面提示綁定交易方式。
-
切換到美國的Play商店,反之亦然
支持綁定的交易方式包括賬單地址填寫到了日本(可以隨便寫,不一定得是真實地址)的信用卡與借記卡(可以是VISA、MasterCard、American Express、JCB等單卡標的外幣卡,基本上不支持中國銀聯),以及日區的PayPal賬號。
綁定成功需要進行一筆自動扣款(約1~2美元)以確認支付方式真實有效,扣款成功後這筆錢會自動退回,無需人工操作。
每365天的時間內只能進行一次換區的操作。
除此之外,還有一些問題可能會導致無法換區;這種情況下最簡單的解決辦法是在其他區重新註冊一個谷歌賬號。
Google Pay
圖省事的話可以直接在某購物平台尋找代充服務,雖然並不十分推薦這麼做。
不像我們通常使用支付寶和微信,外服Android手機遊戲進行氪金購買時都會調用Google Pay的API進行交易。而Google Pay可以直接綁定銀行卡,或者可以綁定PayPal,而PayPal再綁定銀行卡進行扣款。
上文中提到了,可能不少人並沒有Google Pay所支持綁定的銀行卡。這裡可以使用一個簡單的方法替代,即在任意購物平台上搜索「Play充值」等關鍵詞購買Google Play禮品卡。禮品卡兌換後,它的面值會直接進入你的Play賬戶餘額。
這裡同時需要注意,和類似Steam的充值碼不僅不鎖區還能自動按匯率進行兌換不同,Google Play的禮品卡是鎖區的;日區的賬號只能兌換日區的Google Play充值碼,不要買錯區了。換區方式見上文內容;換區後,賬號原先所在地區的Play賬戶餘額會被凍結。但餘額並不會消失,如果未來將地區換回則可以解凍並繼續使用。
購買禮品卡的同時需要注意謹防上當受騙。
- 自2021年6月起,谷歌公司對於禮品卡充值採取了更嚴格的限制措施。現除了要求禮品卡貨幣與賬號所在區一致外,用戶的IP地址同樣需要在目標地區,並且封殺了部分常見的代理IP,購買禮品卡充值時需要更加謹慎。
Android模擬器
在電腦上玩Android手遊時會需要用到模擬器。這裡推薦唯一一個受Android官方(谷歌公司)認可,運行在PC上的Android模擬器,Android Studio。
Android Studio 是基於 IntelliJ IDEA 且適用於開發 Android 應用的官方集成開發環境 (IDE)。除了 IntelliJ 強大的代碼編輯器和開發者工具,Android Studio 還提供了更多可提高 Android 應用編譯效率的功能。
Android Studio所支持的PC操作系統包括Windows,macOS,多種不同發行版的Linux以及Chrome OS。
Android 模擬器則是Android Studio的可選功能之一。相比其他第三方安卓模擬器,具有高度可自定義,支持通過控制台進行ADB調試等優點。
引繼
國內手遊常用的登陸方式是使用郵箱或手機號註冊賬號後登陸,以及第三方賬號授權登錄;對於日服手遊,常用的同樣有第三方賬號授權登錄(連攜),除此之外還有引繼的方式。
引繼的原理類似用戶名和密碼,但可以在開始遊戲後執行,並且不需要使用郵箱或手機號等作為密保工具註冊。進入遊戲後,轉到設置→引繼,輸入密碼並確認,遊戲會生成一個隨機的「引繼碼」,這樣就算是引繼成功了。引繼碼相當於玩家的用戶名,需要將其記下。
更換設備或清除遊戲數據後,在進入遊戲前的初始頁面找到「引繼」選項,輸入自己的引繼碼和對應的密碼以繼承存檔。
如果沒有進行引繼或綁定第三方登錄賬號,清除數據或卸載軟件後玩家的遊戲存檔可能將永遠無法找回。