Android開発の最適化-APKスリミングの最適化

APK構造を理解する

アプリケーションのサイズを縮小する方法を説明する前に、アプリケーションAPKの構造を理解する必要があります。APKファイルは、アプリを構成するすべてのファイルを含むZipアーカイブで構成されます。これらには、Javaクラスファイル、リソースファイル、およびコンパイルされたリソースのファイルが含まれます。

APKには次のディレクトリが含まれています。

  • META-INF /:CERT.SFおよびCERT.RSA署名ファイル、およびMANIFEST.MFマニフェストファイルが含まれています。
  • Assets /:アプリのアセットが含まれています。アプリはAssetManagerオブジェクトを使用してこれらのアセットを取得できます。
  • res /:resources.arscにコンパイルされていないリソース(画像、オーディオ、ビデオなど)が含まれています。
  • lib /:プロセッサソフトウェア層に固有のコンパイル済みコードが含まれています。このディレクトリには、armeabi、armeabi-v7a、arm64-v8a、x86、x86_64、mipsなどの各プラットフォームタイプのサブディレクトリが含まれています。

APKには次のファイルも含まれています。これらのファイルのうち、AndroidManifest.xmlのみが必要です。

  • resources.arsc:コンパイルされたリソースが含まれています。このファイルには、res /values/フォルダー内のすべての構成のXMLコンテンツが含まれています。パッケージングツールは、このXMLコンテンツを抽出し、バイナリ形式にコンパイルして、コンテンツを圧縮します。このコンテンツには、言語の文字列とスタイル、およびレイアウトファイルや画像などのresources.arscファイルに直接含まれていないコンテンツへのパスが含まれます。
  • classes.dex:Dalvik/ART仮想マシンが理解できるDEXファイル形式でコンパイルされたクラスが含まれています。
  • AndroidManifest.xml:コアAndroidマニフェストファイルが含まれています。このファイルには、アプリの名前、バージョン、アクセス権、および参照されるライブラリファイルが一覧表示されます。このファイルはAndroidのバイナリXMLファイルを使用しています

Androidサイズアナライザー

Android Size Analyzerツールを使用すると、アプリのサイズを縮小するための複数の戦略を簡単に見つけて実装できます。

まず、AndroidStudioのプラグインマーケットからAndroidSizeAnalyzerプラグインをダウンロードしてインストールします。プラグインをインストールした後、メニューバーから[分析]> [アプリサイズの分析]を選択して、現在のプロジェクトでアプリサイズ分析を実行します。プロジェクトが分析されると、ツールウィンドウが表示され、アプリのサイズを縮小する方法が提案されます。

未使用のリソースを削除する

APKスリミングの鍵は一言で言えば削除です!役に立たない場合は削除してください。

リソース削減を有効にする(パッケージ化なし)

リソースの縮小:アプリのbuild.gradleファイルでshrinkResourcesが有効になっている場合、GradleはAPKをパッケージ化するときに未使用のリソースを自動的に無視できます。リソースの縮小は、コードの縮小:minifyEnabledと組み合わせて使用​​した場合にのみ機能します。コードリデューサーが未使用のコードをすべて削除した後、リソースリデューサーはアプリがまだ使用しているリソースを判別できます。

android { 
    // Other settings 
    buildTypes { 
        release { 
            minifyEnabled true 
            shrinkResources true 
       proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
        } 
    } 
}    
复制代码

ダイナミックライブラリのパッケージ構成

soファイルはndkによってコンパイルされ、c / c ++で記述されたダイナミックライブラリであるため、クロスプラットフォームではありません。ABIはApplicationBinaryInterfaceの略で、使用される命令セット、メモリアライメント、使用可能なシステム関数ライブラリなど、対応するシステムプラットフォームでバイナリファイル(特に.soファイル)を実行する方法を定義します。Androidシステムでは、各CPUアーキテクチャはABIに対応しており、現在サポートされているのは、armeabi-v7a、arm64-v8a、x86、x86_64です。現在、市場に出回っているモバイルデバイスは基本的にアームアーキテクチャであり、armeabi-v7aはほとんどすべてのデバイスと互換性があります。したがって、以下を構成することが可能です。

android{ 
    defaultConfig{ 
        ndk{
            abiFilters "armeabi-v7a" 
        } 
    }
 }
复制代码

Baidu Maps、Buglyなどのサードパーティサービスの場合、プラットフォーム全体のCPUアーキテクチャが提供されます。上記の設定の後、armeabi-v7aのみがApkにパッケージ化されることを意味します。これにより、APKサイズを縮小します。

おすすめ

転載: juejin.im/post/7098256852768522277