MOTO

APK(Android モバイル アプリケーション)の解凍とローカライズのプロセスに関する簡単な説明 [再投稿]

ローカリゼーションに関する資料をかなり集めてきましたが、実際に自分で試してみて、基本的なローカリゼーション(特殊なケースを除けば)はそれほど難しくないと感じています。今日は、私が集めた資料の一部を共有したいと思います。興味のある方は、ぜひ参考にしてみてください。

APK ファイルの説明: APK は Android パッケージの略で、Android アプリケーション パッケージ ファイルまたは Android インストール パッケージです。
Androidプラットフォームにインストールする各アプリケーションは、.apk拡張子を持つ単一のファイルにコンパイルおよびパッケージ化する必要があります。APKファイルは、Eclipseなどの専用ソフトウェアを使用して生成されるパッケージで、アプリケーションのバイナリコード、リソース、設定ファイルなどが含まれています。インストールは、APKファイルをAndroidスマートフォンに直接転送して実行することで実現されます。
APKファイルは基本的にZIPファイルですが、拡張子が.apkに変更されています。WinRAR/WinZIP/7-Zipなどの解凍ソフトを使ってWindows上で直接開くことができます。解凍後、いくつかのファイルとフォルダが表示されます。
一般的な APK ファイルは通常、次のもので構成されます。

AndroidManifest.xml、アプリケーションのグローバル構成ファイル。

classes.dex Dalvik バイトコード

コンパイルされたバイナリリソースファイル resources.arsc

META-INF ディレクトリには署名情報が含まれています。

res\ ディレクトリにはリソース ファイルが格納されます。

アセットディレクトリにはいくつかの設定ファイルを保存できます。以下に、これらのファイルとディレクトリに関する基本的なコメントと説明を示します。

AndroidManifest.xmlファイルは、すべてのAPKアプリケーションに必須です。アプリケーション名、バージョン、権限、参照ライブラリファイルなどの情報が記述されています。

classes.dexファイルは、Javaソースコードをコンパイルした後に生成されるJavaバイトコードファイルです。「dex」はDalvik VM executes(Android Dalvik実行プログラム)の略です。解析ツールを使用してJavaコードに変換することで、読みやすく理解しやすくなります。

resources.arsc はコンパイルされたバイナリリソースファイルです。テーマをカスタマイズする際には、このファイルを頻繁に操作することになります。

META-INFディレクトリには署名情報が含まれています。APKパッケージの整合性とシステムのセキュリティを確保するために使用される署名ファイルは3つあります。

EclipseはAPKファイルをコンパイルして生成する際に、パッケージ化するすべてのファイルに対して検証計算を実行し、その結果をMETA-INFディレクトリに格納します。これにより、APKファイル内のファイルが恣意的に置き換えられることが防止されます。例えば、APKファイル内の画像、コードの一部、著作権情報を置き換えたい場合、単純に解凍して置き換え、再パッケージ化するだけでは事実上不可能になります。これにより、ウイルス感染や悪意のある改変の難易度が高まり、システムセキュリティの保護に役立ちます。

`res` ディレクトリには、画像や文字列などのリソースファイルが格納されます。このディレクトリには、主に `drawable`、`layout`、`xml` といった複数のサブディレクトリが含まれています。解凍後、ほぼすべての変更と編集はここで行われます。ROM のローカライズ作業は主にここで行われます。ROM のローカライズには、基本的にすべての APK アプリケーションの文字ファイルを中国語に翻訳することが含まれます。

アセット ディレクトリには構成ファイルを保存でき、その内容はプログラム実行中に関連する API を通じて取得できます。

以下の例では、設定アプリケーション「Settings.apk」を使用しています。WinRARでファイルを開くと、上記の6つの項目が表示されます。ファイルを解凍したとしても、各ファイルの内容を直接読み取ることはできません。これらのファイルの内容を読み取って、さらに変更や編集を行うには、適切なツールが必要です。

APKアプリケーションの解凍およびパッケージ化ツール:このセクションでは、主にWindowsシステムでAPKアプリケーションの解凍、パッケージ化、逆コンパイル、解析によく使用されるツールキットをいくつか紹介します。すべてのAPKツールキットにはJavaが必要です。

以下に、収集した例をいくつか示します。
dex2jarとXJadの方法は、APKファイルを直接解凍するわけではありません。まずAPKファイルからclasses.dexファイルを抽出し、次にdex2jar.jarツールキットを使用してclasses.dexファイルをJARファイルに解凍します。その後、XJadなどのクラス逆コンパイルツールを使用してJavaコードを逆コンパイルし、最終的にJavaソースファイルを生成します。
ただし、このツールキットはclasses.dexファイルを復元できません(したがって、APKをパッケージ化できません)。それでも、classes.dexファイルをより読みやすいJavaソースファイルに変換するため、このツールキットは非常に重要です。APKアプリケーションを変更する際に不可欠であり、非常に強力な補助ツールです。一方、apktoolとapk managerはDalvikオペコードを取得するために逆コンパイルしますが、その解読には専門知識が必要で、直感的に理解できるものではありません。Javaソースファイルを理解していれば、対応するDalvikコードの変更ははるかに容易になります。
Google Smaliには、baksmali.jarとsmali.jarという2つのプログラムがあります。baksmali.jarはdexファイルとodexファイルを解析してDalvikコードを取得するために使用されます。その後、smali.jarはdexファイルを再構築するために使用されます。例えば、ステータスバーの時刻表示色を変更する際に使用されます。
AXMLPrinter2.jar は、APK ファイル内の AndroidManifest.xml および main.xml ファイルを操作し、XML をテキスト ファイルに復元して読みやすくします。
Apkdb は、apktool、smali、Dex2jar、署名などの機能を統合したツールです。

このセクションでは、APK のローカリゼーションについて説明します。まずは APK について説明しましょう。
1. APKを解凍した後
2. APKファイルの下には、/resと/smaliという2つのフォルダと、AndroidManifest.xmlとapktool.ymlという2つのファイルがあります。AndroidManifest.xmlをテキストエディタで開き、パート1で説明した内容と一致しているかどうかを確認します。変更が必要な内容は/resフォルダにあります。
3. `/res` フォルダを開きます。5つのサブフォルダがあります。`/drawable` には APK アプリケーションのアイコンが、`drawable-hdpi` (および `drawable-mdpi`) にはその他の必要なグラフィックファイル (これらはカスタマイズや置き換えが可能ですが、フォーマットとサイズが同じでないとエラーが発生します) が、`/layout` には APK のレイアウトファイルが、`/values` にはキャラクターファイルが含まれています。APK のローカライズには、`/values` フォルダ内の `string.xml` ファイルのコンテンツのローカライズが含まれます。

APK の中国語文字ローカライズ(英語初心者向け、Google 翻訳など)

Notepad++ で string.xml を開きます。

中国語に翻訳するだけです。
xxxxxxxxxx</文字列>
中国語でもいいです。他にも探すところはありますよ。

ローカリゼーションには、一般的に 1. 標準ローカリゼーション、2. 強制ローカリゼーションの 2 つの方法があります。
これは、解凍された APK ファイルを指します。

1. APKアプリケーションを適切にローカライズすることで、英語と中国語の両方のシステムで動作できるようになります。`/values`ディレクトリには英語の言語パックが含まれています。中国語の言語パックを作成するには、`/values`の横にサブフォルダ`/values-zh-rCN`を作成します(このファイル名は重要です)。`values-zh`は中国語の言語パック(香港、マカオ、台湾、中国本土を含む)、`values-zh-rCN`は簡体字中国語の言語パック(中国本土のみを含む)、`values-zh-rTW`は繁体字中国語の言語パック(香港、マカオ、台湾を含む)です。`strings.xml`などの言語ファイルを`/values`フォルダから`/values-zh-rCN`にコピーします。ソフトウェアによっては、`strings.xml`ファイルのみが存在する場合があります。 `/values-zh-rCN` に移動し、テキスト エディターで `strings.xml` を開いて、英語の説明を対応する中国語に翻訳します。

例えば、上記の string.xml ファイルを次のように翻訳できます。`ミュート起動が有効; サイレント起動 シャットダウンもサイレントシャットダウン サイレントではない\nサイレント起動が有効でない場合は、シャットダウン時に起動音楽を再生します`。`\n` 演算子は改行文字であり、テキスト内容を新しい行に表示します。その後、「名前を付けて保存」を使用して UTF-8 形式でファイルを保存します。これにより、中国語テキストの形式が保持されます。ローカライズ作業を行う際には、string.xml ファイルを変更する必要があります。場合によっては、他の XML ファイルも変更する必要があります。各ファイルを慎重に確認し、1 つずつローカライズしてください。

2. 強制ローカリゼーション

いわゆる「強制ローカライズ」とは、`/values-zh-rCN`フォルダを作成しないことを意味します。代わりに、`/values`フォルダ内のローカライズが必要なすべてのファイルを中国語に直接翻訳します。当然のことながら、英語版OSに中国語の文字セットがない場合、強制ローカライズAPKは文字化けする可能性があります。そのため、適切なローカライズ方法を身につけ、「適切なローカライズ」を行うことをお勧めします。

上記のローカライズでは、`string.xml` を修正して英語のテキストを対応する中国語の文字に翻訳し、パッケージ化と署名を行います。しかし、一部の APK ファイルでは、表示される文字が XML ファイル内にすべて含まれているわけではありません。元の APK 作成者がコード内に特定の文字を記述しており、逆コンパイルすると、それらは `/smali` フォルダに保存されます。レイヤーを検索すると、最終的に多数の Dalvik コードファイルが見つかります。これらはすべて `.smali` 拡張子を持っています。例えば、テキストエディタで `.smali` ファイルを開くと、`const-string v5, “ServiceMode”` と表示されます。`“ServiceMode”` は APK の実行時に英語で表示されます。そのため、ローカライズする必要があります。ROM では、プロジェクトモードで特別なコードを使用して表示されるものの多くがこれに該当します。これを中国語に翻訳するのは非常に時間がかかります。`ServiceMode` を「服务模式」(サービスモード)に翻訳する必要があります。これはどのように行うのでしょうか? `const-string v5, “ServiceMode”` を `const-string v5, “服务模式”` に直接変更することはできません。パッケージ化は失敗します。正しい方法は、対応する中国語の文字を16進Unicodeで表現することです。例えば、「service mode」は16進Unicodeでは \u670d\u52a1\u6a21\u5f0f です。各中国語の文字は4文字で表現され、\u は16進Unicodeのコードポイントを表します。したがって、正しい翻訳は const-string v5, "\u670d\u52a1\u6a21\u5f0f" です。
中国語の文字とその 16 進 Unicode コードの対応を示す表や変換ツールがオンラインで存在します。

APKのパッケージ化と署名は簡単なプロセスです。APKファイルを再構築します。ソフトウェアによって若干の違いが生じる場合があります。再構築後、署名するだけです。一部のプログラムは署名できません。結果として得られる新しいAPKアプリケーションがローカライズされたAPKです。次に、ファイル名を希望の名前に変更します。

仕上げる。
ぜひ返信してください。応援してください!

元記事のリンク:
http://bbs.anzhi.com/forum.php?mod=viewthread&tid=6299419&fromuid=4000750