なんか前も似たようなのを書いたような気がするけど。気のせいや^^;
以前書いた自前のnativeライブラリビルド時にaar内にある既存のnativeライブラリとリンクした〜い^^/
ではgradle.buildスクリプトで特定の共有nativeライブラリにリンクしつつもaarには出力されないように除外する方法を書きました。
今回のは特定CPUの共有nativeライブラリをまるっと除外です。
なんでそないな事しようと思ったかって?参照しているある外部ライブラリを更新してリリースビルドして実行するとUnsatisfiedLinkErrorで落っこちてん(´・ω・`)
例えばarm64-v8aが含まれているaar/モジュールと含まれていないaar/モジュールを1つのapkにして64ビットarmプロセッサの載った端末で動かすとUnsatisfiedLinkErrorで落っこちます。自分のライブラリの方はarm64-v8a用にはビルドしてなかってんけどしょうがないからApplication.mkに追加してビルドすると…apkのサイズが3倍ぐらいになってん…それも80MBぐらい。あかんやん。という事でいらん子はまるっと除外してやるぅって事で^^
特定CPUの共有nativeライブラリをまるっと除外には、aar/apkから手動で除外してからリパックするとか、以前の記事と同じようにスクリプトを書いて除外するのも可能ですが、いつのまにやらもっと簡単な方法が出来てました(単に知らんかっただけ?^^;)。
方法は簡単で gradle.buildスクリプト内で
1 |
packagingOptions |
ちゅうのを使います。
1 2 3 4 5 6 7 8 9 10 11 |
android{ ... packagingOptions { exclude 'lib/armeabi/*.so' exclude 'lib/arm64-v8a/*.so' exclude 'lib/mips/**.so' exclude 'lib/mips64/*.so' exclude 'lib/x86_64/*.so' } ... } |
ここではarmeabi, mips, mips64, x86_64の共有nativeライブラリをまるごと除外しています。ワイルカードが使えるんです。便利ですねぇ。まぁ自前のnativeライブラリをリンクさせようとすると以前の記事と同じようにしないといけないですけど。
ちなみにこれを追加してsyncしただけだとビルドが出来ない時がありますのでクリーンビルドしてください。プロダクトフレーバーを切り替えた時もクリーンビルドがいるかも。
そもそも今のところ64ビット向けのバイナリを含めるメリットがあんまりないんですよねぇ。メモリの使用量が増えて、バイナリサイズとapkのサイズが大きくなって、パフォーマンスが落ちて、Google Playでダウンロードするのに時間がかかって、モバイルネットワークだと通信料金が増える…ってええとこ無いやん?
PCなら仮想メモリもあるし広大なメモリ空間を使えるようになるからとか色々イイコト有るんやけど、標準で仮想メモリOFF、RAMが全部で多くても4GB…1GBとか2GBな端末も多いAndroid端末の現状ではなぁ。
という事でお疲れ様でした。
次はh264の記事の続きを書くぞぉ…なつもり
(^.^)/~~~
コメント
Now the Android installation process is smart enough to discard the native libraries for non relevant CPUs,