十三、Android性能最適化のインストールパッケージの性能最適化
インストールパッケージのパフォーマンス最適化の真髄:できるだけ削除します.インストールパッケージのパフォーマンスの最適化方法:####1.画像圧縮ピクチャ:apkの中のリソースピクチャ圧縮ピクチャsvgピクチャ:いくつかのピクチャの記述、CPUの計算能力を犠牲にして、空間を節約します.使用する原則:簡単なアイコン. webp:グーグルは現在、非常に提唱されている使用です.画像を保存するのは小さいです.VP 8から派生したものです.webpの無損圧縮はPNGファイルより45%程度小さく,PNGが他の圧縮ツールで圧縮された後でもPNGの28%に任意に小さくできる. Facebookは、テンセント、タオバオを使用しています.欠点:ロードはPNGよりかなり遅い.しかし、構成は比較的高い.画像圧縮ツール:tinypng.com/画像圧縮変換ツール:isparta.github.io/
####2.リソースの動的ロード
例えば、emojiの表情、肌の交換、動的ダウンロードのリソース、いくつかのモジュールのプラグイン化の動的追加
####3.ASが持参するLintツールを用いて不要なリソースを削除する1)不要なレイアウトを検出する削除2)未使用のリソース例えばピクチャ---削除3)推奨String.xmlには使用されていない文字があります.
####4.限界圧縮7 zZipツールの使用.
####5. libリソース最適化(1)動的にダウンロードされたリソース.(2)一部のモジュールのプラグイン化動的追加.(3)soファイルのクリップと圧縮.####6.assetsリソース最適化
(1)オーディオファイルは、opus、mp 3などの非可逆圧縮のフォーマットを使用することが望ましいが、非破壊圧縮の音楽フォーマットは使用しないほうがよい(2)ttfフォントファイルを圧縮するには、FontCreatorツールを使用して必要な文字だけを抽出することができます.例えば、日付表示を行う場合、実際にはデジタルフォントしか必要ありませんが、既存のフォントライブラリを使用すると10 MBのサイズが必要になる場合があります.必要なフォントを抽出するだけで生成されるフォントファイルは10 KBしかありません.
####7.Proguard混同
####7.1コンセプト
リソース混同は簡単に言えば、res/drawable/icon、pngをres/drawable/a.pngに変更するか、ファイルパスも同時に混同してr/s/a.pngに変更することができる.
注意:このときの混同はASが持参した混同が終わった後に圧縮混同する.ASが持参した混同はコード内容の混同であり,我々の混同はファイル名である.
####7.2 apkコンパイル原理
#####7.2.1コンパイル原理図Androidアプリケーションは主にコードとリソースの2つの部分から構成されています.リソースとは、主にUIレイアウト、文字列、画像など、UIに関連するものを指します.コードとリソースの分離により、アプリケーションが実行時に実際のニーズに応じてUIを整理することができます.これにより、アプリケーションを1回コンパイルするだけで、異なるUIレイアウトをサポートできます.この機能により、アプリケーションは実行時に異なる画面サイズと密度、および異なる国や言語などに適応できます.7.2.1 aaptはaaptすなわちAndroid Asset Packaging Toolをコンパイルし、SDKのbuild-toolsディレクトリの下にあります.このツールは、ZIP形式のドキュメント添付ファイル(zip,jar,apk)を表示、作成、更新することができます.リソースファイルをバイナリファイルにコンパイルすることもできます.
図に示すように、A.assetsおよびres/rawリソースが元のAPKにパッケージングされる以外は、他のリソースがコンパイルまたは処理される.B.assetsリソース以外のリソースには、リソースIDが付与されます.C.パッケージングツールはリソースのコンパイルとパッケージングを担当し、コンパイルが完了するとresourcesが生成される.ArscファイルとR.javaで、前者はリソースインデックステーブルを保存し、後者は各リソースID定数を定義します.D.アプリケーションプロファイルAndroidManifest.xmlは同様にバイナリのXMLファイルにコンパイルされ、APKにパッケージされます.E.アプリケーションは、実行時にAssetManagerでリソースにアクセスしたり、リソースIDでアクセスしたり、ファイル名でアクセスしたりします.
ここでarscファイル.このファイルには、各リソース名、タイプ、値、ID、および構成された次元情報を含むすべてのアプリケーションリソースディレクトリの情報が記録されます.これをArscファイルは、所与のリソースIDとデバイス構成情報の場合、アプリケーションのリソースディレクトリで最も一致するリソースを迅速に見つけることができるリソースインデックステーブルとして想像される.
#####7.2.3 resources.Arscファイル解析
####(1)Resource.arscファイルフォーマット図
resources.Arscは全部で5種類のchunkタイプがあり、それぞれTYPERABLE、TYPERPACKAGE、TYPE_STRING ,TYPETYPE,TYPECONFIG.
-tableは、reousces table全体の始まりであり、chunksizeはファイル全体のサイズです.-packageとは、1つのpackageの始まりを指し、実際にはresourcesではarscは複数のpackageを持つことができます.一方packageIDはリソースresIDの最高8ビットであり、一般的にシステムandroidは1(0 x 01)、一般的にはcomである.tencent.mmは127(0 x 7 f)で、残りは2からスタートします.もちろんこれはaaptでも指定できます(1-127、つまり8ビットの合法的な空間で、いくつかの混合コンパイルはこのpackageIDを変更します).string、stringblockを代表して、私たちは全部で3種類のstringblockがあります.それぞれtable stringblock、typename stringblock、specsname stringblockです.—type、ここではtypename stringblockで私たちが使っている様々なtype(何種類のtypeを使うか、何個のtype chunkがあるか)、例えばattr、drawable、layout、id、color、animなど、Type IDはPackage IDに続いています.—config、すなわちAndroidは、横長スクリーン、スクリーン密度、言語などのリソース次元を記述するために使用されます.各typeについて、何種類のconfigが定義されているか、その後に何個のconfig chunkが続いています.例えば、drawable-mdpi、drawable-hdpiを定義すると、後に2つのconfigがあります.
これをarscファイル部分の内容読み出しは以下のように表示される.
####7.3混同プロセス
システムコンパイルapkファイル完了後:マッピング関係:res/drawable/ic_launcher.png —– > 0x7f020000
さらに「混同」:res/drawable/icを実装するにはlauncher.png画像をa.png drawableファイルの名前Stringファイルの名前layoutの名前に変更します.例えば、R.string.description—>R.string.a res/drawable/ic_launcher.pngピクチャをa.pngに変更
res/drawable->r/d res/value->r/v res/drawable/ic_をさらに誇張することもできます.launcher.pngピクチャをr/d/a.pngに変更
読み取りarscバイナリファイルを使用して、あるセグメントのバイトを変更します.res/drawable/icという言葉がありますlauncher.pngは、自分の配列の800ビット−810ビット目で、この800ビット−810ビット目をr/d/a.pngに変更されたバイトコードに置き換える.
####8.zipalign最適化APKは実はZip圧縮ファイルであることを知っています.原理的にはZipフォルダのバイナリファイルのシーケンスをフォーマットすることで、システム解析速度を向上させることができます.コードを読むときにコードをフォーマットすると、その意味が理解しやすくなります.Androidプラットフォームでは、データファイルがapkファイルに格納され、マルチプロセスでアクセスできます.Win 32を開発したことがあれば、プログラムの粒度整列の問題を知っているかもしれませんが、PE形式のファイルではありませんが、Zipでは同様に、リソースへのアクセスはより最適化されますが、zipalignは4バイトの境界整列方式を使用してメモリを投影しています.空間的に時間を変えることで実行効率が向上します.
私が理解しているのは、通俗的に言えば、システム処理に有利な配列方式に従って、私たちのapkの中の資源ファイルを配列して、資源の検索速度を高めて、それによって応用の運行効率を高めます.
#####先に署名してから位置合わせしないと、先に位置合わせしてから署名すると位置合わせが破壊されます.
####9.ReDexを使用してReDexを最適化するのはFacebookのオープンソースで、Android appのサイズを小さくして性能を高めるツールで、ゾンビコードを埋め込み、クリアするような最適化はバイトコードを小さくし、主にDexを最適化し、APKをより速く実行することができますが、クラッシュするかどうかをテストする必要があります.Redex変換後のAPKでは,体積が小さくなり,動作速度が速くなった.Redexはパイプラインの方式に基づいてAndroidを最適化する.dexファイル、ソース.dexファイルは、パイプを介して一連のカスタム変換を行うと、最適化される.dexファイル.
Androidのコンパイルプロセスはまずjavacツールを通じて行われることを知っています.JAvaファイルをコンパイルする.classファイル、次にすべてを.classファイルはDalvik仮想マシンの実行可能ファイルにマージする.dexは、最後に他のリソースなどのファイルとともにAPKファイルに圧縮され、大まかな流れは以下の通りです.
#####変換のタイミングRedexは、Javaソースコードではなくバイトコードファイルに基づいて最適化を選択した.バイトコードはJavaソースコードよりもグローバルであり、単一のクラスファイルのローカル最適化ではなく、クラスとクラス間の最適化を行うことができるからである.Javaバイトコードではなくdexバイトコードに基づいて最適化を選択するのは、dexファイルでのみ最適化できる最適化があるためです.######パイプの思想は時間の推移に従って、開発者は絶えず新しい最適化ideaを得ることができることを考慮して、便利に新しい最適化点を既存のコードに加えるため、同時に異なる開発者が並列に最適化点を開発することを便利にするため、Redexはパイプの思想に基づいてdexの最適化を実現することを選択して、これにより、各最適化ideaは、プラグインの形式でパイプに統合され、プラグアンドプレイを実現し、他の最適化プラグインにも影響を与えず、全体的な最適化プロセスは以下のようになります.
githubアドレス:github.com/facebook/re…
特に感謝します:動脳学院Ricky asce 1885
####2.リソースの動的ロード
例えば、emojiの表情、肌の交換、動的ダウンロードのリソース、いくつかのモジュールのプラグイン化の動的追加
####3.ASが持参するLintツールを用いて不要なリソースを削除する1)不要なレイアウトを検出する削除2)未使用のリソース例えばピクチャ---削除3)推奨String.xmlには使用されていない文字があります.
####4.限界圧縮7 zZipツールの使用.
####5. libリソース最適化(1)動的にダウンロードされたリソース.(2)一部のモジュールのプラグイン化動的追加.(3)soファイルのクリップと圧縮.####6.assetsリソース最適化
(1)オーディオファイルは、opus、mp 3などの非可逆圧縮のフォーマットを使用することが望ましいが、非破壊圧縮の音楽フォーマットは使用しないほうがよい(2)ttfフォントファイルを圧縮するには、FontCreatorツールを使用して必要な文字だけを抽出することができます.例えば、日付表示を行う場合、実際にはデジタルフォントしか必要ありませんが、既存のフォントライブラリを使用すると10 MBのサイズが必要になる場合があります.必要なフォントを抽出するだけで生成されるフォントファイルは10 KBしかありません.
####7.Proguard混同
####7.1コンセプト
リソース混同は簡単に言えば、res/drawable/icon、pngをres/drawable/a.pngに変更するか、ファイルパスも同時に混同してr/s/a.pngに変更することができる.
注意:このときの混同はASが持参した混同が終わった後に圧縮混同する.ASが持参した混同はコード内容の混同であり,我々の混同はファイル名である.
####7.2 apkコンパイル原理
#####7.2.1コンパイル原理図Androidアプリケーションは主にコードとリソースの2つの部分から構成されています.リソースとは、主にUIレイアウト、文字列、画像など、UIに関連するものを指します.コードとリソースの分離により、アプリケーションが実行時に実際のニーズに応じてUIを整理することができます.これにより、アプリケーションを1回コンパイルするだけで、異なるUIレイアウトをサポートできます.この機能により、アプリケーションは実行時に異なる画面サイズと密度、および異なる国や言語などに適応できます.7.2.1 aaptはaaptすなわちAndroid Asset Packaging Toolをコンパイルし、SDKのbuild-toolsディレクトリの下にあります.このツールは、ZIP形式のドキュメント添付ファイル(zip,jar,apk)を表示、作成、更新することができます.リソースファイルをバイナリファイルにコンパイルすることもできます.
図に示すように、A.assetsおよびres/rawリソースが元のAPKにパッケージングされる以外は、他のリソースがコンパイルまたは処理される.B.assetsリソース以外のリソースには、リソースIDが付与されます.C.パッケージングツールはリソースのコンパイルとパッケージングを担当し、コンパイルが完了するとresourcesが生成される.ArscファイルとR.javaで、前者はリソースインデックステーブルを保存し、後者は各リソースID定数を定義します.D.アプリケーションプロファイルAndroidManifest.xmlは同様にバイナリのXMLファイルにコンパイルされ、APKにパッケージされます.E.アプリケーションは、実行時にAssetManagerでリソースにアクセスしたり、リソースIDでアクセスしたり、ファイル名でアクセスしたりします.
ここでarscファイル.このファイルには、各リソース名、タイプ、値、ID、および構成された次元情報を含むすべてのアプリケーションリソースディレクトリの情報が記録されます.これをArscファイルは、所与のリソースIDとデバイス構成情報の場合、アプリケーションのリソースディレクトリで最も一致するリソースを迅速に見つけることができるリソースインデックステーブルとして想像される.
#####7.2.3 resources.Arscファイル解析
####(1)Resource.arscファイルフォーマット図
resources.Arscは全部で5種類のchunkタイプがあり、それぞれTYPERABLE、TYPERPACKAGE、TYPE_STRING ,TYPETYPE,TYPECONFIG.
-tableは、reousces table全体の始まりであり、chunksizeはファイル全体のサイズです.-packageとは、1つのpackageの始まりを指し、実際にはresourcesではarscは複数のpackageを持つことができます.一方packageIDはリソースresIDの最高8ビットであり、一般的にシステムandroidは1(0 x 01)、一般的にはcomである.tencent.mmは127(0 x 7 f)で、残りは2からスタートします.もちろんこれはaaptでも指定できます(1-127、つまり8ビットの合法的な空間で、いくつかの混合コンパイルはこのpackageIDを変更します).string、stringblockを代表して、私たちは全部で3種類のstringblockがあります.それぞれtable stringblock、typename stringblock、specsname stringblockです.—type、ここではtypename stringblockで私たちが使っている様々なtype(何種類のtypeを使うか、何個のtype chunkがあるか)、例えばattr、drawable、layout、id、color、animなど、Type IDはPackage IDに続いています.—config、すなわちAndroidは、横長スクリーン、スクリーン密度、言語などのリソース次元を記述するために使用されます.各typeについて、何種類のconfigが定義されているか、その後に何個のconfig chunkが続いています.例えば、drawable-mdpi、drawable-hdpiを定義すると、後に2つのconfigがあります.
これをarscファイル部分の内容読み出しは以下のように表示される.
####7.3混同プロセス
システムコンパイルapkファイル完了後:マッピング関係:res/drawable/ic_launcher.png —– > 0x7f020000
さらに「混同」:res/drawable/icを実装するにはlauncher.png画像をa.png drawableファイルの名前Stringファイルの名前layoutの名前に変更します.例えば、R.string.description—>R.string.a res/drawable/ic_launcher.pngピクチャをa.pngに変更
res/drawable->r/d res/value->r/v res/drawable/ic_をさらに誇張することもできます.launcher.pngピクチャをr/d/a.pngに変更
読み取りarscバイナリファイルを使用して、あるセグメントのバイトを変更します.res/drawable/icという言葉がありますlauncher.pngは、自分の配列の800ビット−810ビット目で、この800ビット−810ビット目をr/d/a.pngに変更されたバイトコードに置き換える.
####8.zipalign最適化APKは実はZip圧縮ファイルであることを知っています.原理的にはZipフォルダのバイナリファイルのシーケンスをフォーマットすることで、システム解析速度を向上させることができます.コードを読むときにコードをフォーマットすると、その意味が理解しやすくなります.Androidプラットフォームでは、データファイルがapkファイルに格納され、マルチプロセスでアクセスできます.Win 32を開発したことがあれば、プログラムの粒度整列の問題を知っているかもしれませんが、PE形式のファイルではありませんが、Zipでは同様に、リソースへのアクセスはより最適化されますが、zipalignは4バイトの境界整列方式を使用してメモリを投影しています.空間的に時間を変えることで実行効率が向上します.
私が理解しているのは、通俗的に言えば、システム処理に有利な配列方式に従って、私たちのapkの中の資源ファイルを配列して、資源の検索速度を高めて、それによって応用の運行効率を高めます.
#####先に署名してから位置合わせしないと、先に位置合わせしてから署名すると位置合わせが破壊されます.
release {
// Log
buildConfigField "boolean", "LOG_DEBUG", "false"
//
minifyEnabled true
//Zipalign
zipAlignEnabled true
// resource
shrinkResources true
......
}
####9.ReDexを使用してReDexを最適化するのはFacebookのオープンソースで、Android appのサイズを小さくして性能を高めるツールで、ゾンビコードを埋め込み、クリアするような最適化はバイトコードを小さくし、主にDexを最適化し、APKをより速く実行することができますが、クラッシュするかどうかをテストする必要があります.Redex変換後のAPKでは,体積が小さくなり,動作速度が速くなった.Redexはパイプラインの方式に基づいてAndroidを最適化する.dexファイル、ソース.dexファイルは、パイプを介して一連のカスタム変換を行うと、最適化される.dexファイル.
Androidのコンパイルプロセスはまずjavacツールを通じて行われることを知っています.JAvaファイルをコンパイルする.classファイル、次にすべてを.classファイルはDalvik仮想マシンの実行可能ファイルにマージする.dexは、最後に他のリソースなどのファイルとともにAPKファイルに圧縮され、大まかな流れは以下の通りです.
#####変換のタイミングRedexは、Javaソースコードではなくバイトコードファイルに基づいて最適化を選択した.バイトコードはJavaソースコードよりもグローバルであり、単一のクラスファイルのローカル最適化ではなく、クラスとクラス間の最適化を行うことができるからである.Javaバイトコードではなくdexバイトコードに基づいて最適化を選択するのは、dexファイルでのみ最適化できる最適化があるためです.######パイプの思想は時間の推移に従って、開発者は絶えず新しい最適化ideaを得ることができることを考慮して、便利に新しい最適化点を既存のコードに加えるため、同時に異なる開発者が並列に最適化点を開発することを便利にするため、Redexはパイプの思想に基づいてdexの最適化を実現することを選択して、これにより、各最適化ideaは、プラグインの形式でパイプに統合され、プラグアンドプレイを実現し、他の最適化プラグインにも影響を与えず、全体的な最適化プロセスは以下のようになります.
githubアドレス:github.com/facebook/re…
特に感謝します:動脳学院Ricky asce 1885