LoginSignup
0
0

More than 1 year has passed since last update.

[Android][Kotlin]圧縮ネイティブ・ライブラリについて

Posted at

新規アプリケーションをPlay Consoleにアップロードする場合はAndroid App Bundle (AAB) 形式が義務付けられているが、既存アプリケーションでリリース手順を変更したくないとか、デバッグ用途でadbコマンドで端末にアプリケーションをインストールする場合はAndroid Application Package (APK) 形式でアプリケーションを生成することになる。

Play ConsoleにアップロードされたAABは、ストアによってインストールする端末に対応しAPKを生成し、ストアによって署名して端末にダウンロードされインストールされる。

AAB.png

アプリケーションのサイズを縮小するという目的で、デフォルト値がサイズ縮小の方向になるようになった。

Gradleで署名されたAPKを生成される場合は、サイズ縮小のための変更点について気にしなくても問題がないが、手動で署名する場合、変更点を気にするポイントがある。

アプリのサイズを削減する

APK内のネイティブ・ライブラリが圧縮されていると、インストール時にPackageManagerがAPKからネイティブ・ライブラリをコピーするが、圧縮されていないとコピーされない。圧縮されていないとAPKのファイルサイズは増加するが、ネイティブ・ライブラリのコピーが発生しないので、結果的に端末のストレージを消費するサイズが小さくなる。

APKのダウンロードサイズ

ネイティブ・ライブラリが非圧縮の方が、ストアの圧縮効率が高いと説明されており、結果、ダウンロードサイズが小さくなるそうだ。ただし、こちらの欠点は、Play Consoleにアプリをアップロードしないと、ダウンロードサイズが制限内か分からないことだ。

Android StudioにはAPK Analyzerが用意され、これを使うとダウンロードサイズを得ることができるが、サポートに確認したところ、これの計算式はストアでダウンロードサイズを得る計算式と異なるという説明だったので、目安程度と考えるのが良さそうだ。

ネイティブ・ライブラリの圧縮の指定

AndroidManifest.xmlのandroid:extractNativeLibsが"false"だと非圧縮となる。Android Gradle プラグイン (AGP) 4.2.0 以降は、build.gradleのuseLegacyPackagingに置き換わっている。また、extractNativeLibsのデフォルト値はminSdkVersionとAGPのバージョンによって異なる。

zipalignの-pオプション

APKに共有ライブラリ.soが含まれている場合は、-pオプションを指定して、mmapに適して4KBページ境界にライブラリをアライメントする必要がある。この対応はネイティブ・ライブラリが非圧縮となった場合に必須となったようだ。

本件は関係する項目がバラバラに説明されており、把握するのに苦労した。Googleが推奨する手順、Android StudioでアプリケーションをAAB形式で生成する場合、変更点を把握していなくても、気づかず、うまく行っていたと思うが、非推奨の手順を選択していると罠に引っかかることがある。今回、APK内の共有ライブラリ.soは圧縮から非圧縮に変わり、Gradleで署名していない場合、zipalignコマンドの-pオプションの指定が必須になっていたとは…

【関連情報】

アプリへの署名
APK Analyzer でのビルドの分析
android:extractNativeLibs
ネイティブ コードと Java コードを削減する
非圧縮ネイティブ ライブラリのパッケージ化(デフォルト)
zipalign
There are explanations of similar concepts, and the content is difficult to understand.
Cocoa.swift
Cocoa勉強会 関東
Cocoa練習帳

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0