修改Android安裝包(APK)以支援應用程式個別語言切換

目錄

從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的資料夾代表各種語言的字串檔,應該也可以自行新增語言來讓應用程式支援,這部分我沒測試過,不過應該可行。


隨機推薦文章