從Android13開始,使用者可以選擇切換個別應用程式的語言,不依賴於系統預設語言,例如可以在系統語言為英文時,將地圖切換成中文以用中文顯示地名,但這些的前提在該應用程式有支援的情況下。
這篇文章將會介紹如何自行修改APK,來將原本不支援個別切換的應用程式支援個別切換語言,甚至可以新增其他原本不支援的語言。
以pixiv為例
以pixiv為例,若在非日文顯示的情況下,插圖的tag會在旁邊顯示翻譯後的文字,很佔空間又有點礙眼,但只因為這個原因把整個系統調成日文又有點不妥,所以可以用此方法新增支援應用程式語言,來達成只調整pixiv程式的顯示語言。
在中文的顯示下,tag會附上翻譯
在日文的情況下,tag簡潔乾淨
圖源: 97147052
因為工具支援度的問題,有些安裝檔(可能是刻意混淆過的)會無法拆解或是重新包裝,例如目前已知的有LINE、Messenger。
且修改完之後,因為簽名會與原開發者不同,安裝時必須先解除安裝原本的程式,資料會全部遺失,且修改過的版本無法透過Google Play直接更新。
SDK Build-Tools只能透過安裝整個Android Studio後從SDK Manager安裝,然後再複製出來,當然第三方也找得到有人已經複製出來的檔案,但安全性堪虞,請自己判斷是否要信任第三方的備份來節省時間。
純文字編輯器要用的話記事本也是能用,但推薦Notepad++或是其他有上色的編輯器較佳。
可以選擇將以上工具加入環境變數,會比較方便操作,詳細教學可以上網查。
必須先知道終端機如CMD及adb怎麼使用,網路上教學也很多。
首先要取得目標應用程式的安裝包,建議從手機中取得已安裝的程式,這樣可以確保相容性以及安全性,以下示範從手機中取出已安裝程式的安裝包。
要取得安裝包,必須要先知道安裝包名稱,可以去play商店網頁版看id=後面的參數,如pixiv的網址長這樣:
https://play.google.com/store/apps/details?id=jp.pxv.android
其中jp.pxv.android就是pixiv程式的套件名稱,也可以透過以下指令來看手機中已經有哪些package了:
adb shell pm list package
從中找出要取得的程式套件名稱之後,可以用以下指令找出安裝包在手機裡的哪裏:
adb shell pm path [應用程式套件名稱]
# 以pixiv舉例就是:
adb shell pm path jp.pxv.android
之後就能得到類似以下的輸出:
package:/data/app/~~PCsS6lOjxypM0fXUtg64lg==/jp.pxv.android-ZRblp8nyffd0Y-1AfxN4Mw==/base.apk
斜線後面就是apk的路徑,如果是用app bundle的較新的應用程式,可能會有好幾個apk,其中base.apk是最主要的主程式包,然後接下來就要把apk檔案都複製出來:
adb pull [剛才取得的路徑] .
# 以剛才的舉例就是:
adb pull /data/app/~~PCsS6lOjxypM0fXUtg64lg==/jp.pxv.android-ZRblp8nyffd0Y-1AfxN4Mw==/base.apk .
執行完之後會把apk檔案都複製到目前工作目錄,然後用apktool拆開:
apktool d base.apk
然後進到拆開的資料夾中,會看到res/xml資料夾及AndroidManifest.xml檔案,首先要先建立支援的語言列表檔案,進到res/xml資料夾中,新增一個檔案叫做locales_config.xml,格式如下:
xml version="1.0" encoding="utf-8"?
...
其中每行locale都代表一種語言,完整列表可以參考
官方文件
。
然後在AndroidManifest.xml中修改標籤,新增以下屬性:
android:localeConfig="@xml/locales_config"
範例如下圖:
藍色標示是新增的區段
修改完成之後就要把apk打包回去了:
apktool b base
# base是原本拆出來的資料夾名稱
打包完之後的apk會在資料夾中的dist資料夾裡面。
然後就是對齊與簽章的步驟了,可以參考
Microsoft的文章
,寫得很詳細。
若原本從手機拉出來的apk檔有好幾個,需要把每個檔案都用壓縮檔工具開啟,刪除裡面的MATA-INF資料夾並重新對齊與簽章,才能進行安裝,否則憑證與自行簽章的apk不同會安裝失敗。
此處假設apk已經簽章完成叫做signed.apk,然後接下來就要進行安裝。
安裝之前要先把手機中原本的應用程式移除,否則原本應用程式的簽章與自己簽的簽章不同就無法覆蓋上去。
安裝可以用adb的方式,也可以把檔案手動丟進手機再打開,但這樣會麻煩很多,以下為adb安裝方式:
adb install signed.apk
如果有多個bundle apk的話可以用以下方式安裝:
adb install-multiple base.apk [xxx.apk xxx.apk ...] # 後面填入每個檔名
安裝完成之後就能去設定中找應用程式語言選項來調整了。
沒意外的話,res資料夾底下也有values-xxx的資料夾代表各種語言的字串檔,應該也可以自行新增語言來讓應用程式支援,這部分我沒測試過,不過應該可行。
Keyboard Shortcuts
| Command | Function |
|---|---|
| ? (Shift+/) | Bring up this help modal |
| g+h | Go to Home |
| g+p | Go to Posts |
| g+e | Open Editor page on GitHub in a new tab |
| g+s | Open Source page on GitHub in a new tab |
| r | Reload page |