apk痩身シリーズ③:無駄なリソースファイルを削除_html/css_WEB-ITnose
無駄なコードは削除できますし、もちろん無駄なリソースファイルも削除できます。この機能を有効にするには、gradle 属性 shrinResources を true に設定するだけです。
build.gradle
Java
android { ... buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}
android { ... buildTypes { release { minifyEnabledtrue shrinkResourcestrue proguardFilesgetDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}
一部のリソースが誤って削除された場合、コードが (リフレクション経由で) 使用される場合、これらのリソースは tools:keep 属性を通じて保持できます。管理を容易にするために、ProGuard の構成ファイルと同様に、保持する必要があるすべてのリソースを保持する別のファイルを作成することもできます:
res/raw/keep.xml
🎜>
<?xml version="1.0" encoding="utf-8"?><resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*"/>
<?xmlversion="1.0" encoding="utf-8"?><resourcesxmlns:tools="http://schemas.android.com/tools" tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*"/>
ResConfigs を使用して不要な構成タイプを削除します
さまざまなサードパーティ ライブラリが文字列リソースをさまざまな言語に変換します。たとえば、サポート ライブラリや Google Play サービスは数十の言語をサポートしています。ただし、アプリケーションは 1 つまたは複数の言語のみをサポートする場合があります。resConfigs オプションを使用して、アプリケーションがこれらの構成された言語のみをサポートすることをコンパイラーに伝えることができます。
build .gradle
Java
<?xml version="1.0" encoding="utf-8"?><resources xmlns:tools="http://schemas.android.com/tools" tools:shrinkMode="safe" tools:discard="@layout/unused2"/>
<?xmlversion="1.0" encoding="utf-8"?><resourcesxmlns:tools="http://schemas.android.com/tools" tools:shrinkMode="safe" tools:discard="@layout/unused2"/>
上記の構成では、中国語と英語のリソース ファイルのみが保持されます。他のリソース ファイルは保持されません。最終的なapkファイルに含まれます。
resConfigs で定義できる画面密度属性は 1 つだけであることに注意してください。異なる画面密度を処理するには、後で完了する異なるバージョンの分割画面公開機能を使用できます。
resources.arsc の設定項目が緩い問題
このセクションで説明する問題は、通常、数千のリソース ファイルを使用する大規模なプロジェクトに当てはまります。
resources.arsc ファイルが不当に多くのスペースを占有していることが判明した場合、その原因は設定項目が緩いことが原因である可能性が高くなります。 この問題の原因を確認する例を見てみましょう:
デフォルトの文字列構成ファイル (values/strings.xml) に 5 つの文字列があるとします。これら 5 つの文字列の値は文字列プールで定義され、各文字列の識別子と対応するプール アドレスは別の場所に保存されます。そして、最終的に resource.arsc にコンパイルされたこれら 5 つの文字列の内容は、次のようになります。
android { defaultConfig { ... resConfigs "en", "zh" }}
android { defaultConfig { ... resConfigs "en", "zh" }}
ここで、アプリケーションに新しい機能を追加するとします。その機能は API 21 以降にのみ存在します。新しい機能では、別の文字列コンテンツを表示する必要があるため、values-v21/strings.xml に文字列を追加することを選択します。
新しい v21 文字列を追加するだけで、resources.arsc の内容は次のようになります:
Java
各構成項目はすべてのリソース ファイルのスペースを占有しますが、実際には、他の文字列が指すアドレスは v21 では null ですが、依然として同じバイト数を占有します。識別子ごとに 4 バイト。
String pool: "My App", "Hello", "Exit", "Settings", "Feature" Default config: string/myapp 0x00000001string/hello 0x00000002string/exit 0x00000003string/settings 0x00000004string/feature 0x00000005
String pool: "My App", "Hello", "Exit", "Settings", "Feature" Default config: string/myapp 0x00000001string/hello 0x00000002string/exit 0x00000003string/settings 0x00000004string/feature 0x00000005
実際のシナリオでは、アプリケーションに 3500 個の文字列があるが、別の構成項目で別途定義された特別な文字列があり、変更された文字列を他の 50 の言語に翻訳する必要があるとします (つまり、つまり、values-en-land、-pl-land、-de-land、-fr-land... などの 50 個のディレクトリが存在し、次の追加スペースが必要になります:
4 バイト * 3500 個の null エントリ * 50 言語 = 700 キロバイト
この特別な文字列を削除すると、700 KB のスペースを節約できます。 一部の大規模プロジェクトでは、3 つのリソースを削除するだけで 2.5M のスペースを節約できます。
この特殊なケースでは、ほんの数文字列を追加するだけで APK ファイルが非常に大きくなることがわかった場合、これらの特殊な文字列をデフォルトの構成項目で定義し、実行時にどの文字列を追加するかを検討できます。使用はシステム構成に基づいて動的に選択されます。
リソース ID の難読化String pool: "My App", "Hello", "Exit", "Settings", "Feature", "New feature" Default config: -v21 config:string/myapp 0x00000001 NO_ENTRYstring/hello 0x00000002 NO_ENTRYstring/exit 0x00000003 NO_ENTRYstring/settings 0x00000004 NO_ENTRYstring/feature 0x00000005 0x00000006 ========== ==========Config size: 20 bytes **20 bytes!**
String pool: "My App", "Hello", "Exit", "Settings", "Feature", "New feature" Default config: -v21config:string/myapp 0x00000001 NO_ENTRYstring/hello 0x00000002 NO_ENTRYstring/exit 0x00000003 NO_ENTRYstring/settings 0x00000004 NO_ENTRYstring/feature 0x00000005 0x00000006 ========== ==========Configsize: 20 bytes **20 bytes!**

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









この記事では、HTML&lt; Progress&gt;について説明します。要素、その目的、スタイリング、および&lt; meter&gt;との違い要素。主な焦点は、&lt; Progress&gt;を使用することです。タスクの完了と&lt; Meter&gt; statiの場合

この記事では、HTML&lt; Datalist&GT;について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。

記事では、HTML5クロスブラウザーの互換性を確保するためのベストプラクティスについて説明し、機能検出、プログレッシブエンハンスメント、およびテスト方法に焦点を当てています。

この記事では、html&lt; meter&gt;について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化&lt; Meter&gt; &lt; Progress&gt;およびex

この記事では、html5&lt; time&gt;について説明します。セマンティックデート/時刻表現の要素。 人間の読み取り可能なテキストとともに、マシンの読みやすさ(ISO 8601形式)のDateTime属性の重要性を強調し、Accessibilitを増やします

この記事では、ブラウザのユーザー入力を直接検証するために、必要、パターン、MIN、MAX、および長さの制限などのHTML5フォーム検証属性を使用して説明します。

この記事では、モバイルデバイスのレスポンシブWebデザインに不可欠なViewportメタタグについて説明します。適切な使用により、最適なコンテンツのスケーリングとユーザーの相互作用が保証され、誤用が設計とアクセシビリティの問題につながる可能性があることを説明しています。

この記事では、&lt; iframe&gt;外部コンテンツをWebページ、その一般的な用途、セキュリティリスク、およびオブジェクトタグやAPIなどの代替案に埋め込む際のタグの目的。
