Androidアプリ開発 Android Studio NDKビルド時間を改善する

2016年08月15日(編集2016年08月15日)
このエントリーをはてなブックマークに追加

Androidアプリ開発では、NDKを利用したアプリをビルドすることがあります。 NDKのビルドは非常に時間がかかります。なので、ツールを導入してビルドを高速化するべきです。
この記事は、AndroidアプリでNDKビルドの時間を高速化する方法を記載した記事です。

環境はAndroid 7.0 (API level 24) です。

環境

  • OS X Yosemite
  • Oracle jdk version 1.8.0_72
  • Android Studio 2.1.2
  • android sdk 24
  • Gradle 2.1.0
  • android-ndk-r12b

難易度

初心者向け

ビルドターゲットを絞る

本番リリース以外のapk、 つまり開発用のapk作成時は、自分が開発に利用する端末のABIだけに絞るとビルド時間を短縮できます。
端末の絞り込みはApplication.mkファイルで設定します。

Before

{project_folder}/Application.mk
APP_ABI := armeabi-v7a x86
        

After

{project_folder}/Application.mk
APP_ABI := armeabi-v7a
        

これにより、ビルド時間を減らすことができます。
ビルドに10分かかるコードがあるとすると、5分程度まで下げることができます。

端末のビルドターゲットを調べる

自分が開発で利用している端末のABIは、Javaコードの実装で確認できます。

{project_folder}/util/Common.java
Log.d("build","CPU_ABI:" + Build.CPU_ABI);
Log.d("build","CPU_ABI2:" + Build.CPU_ABI2);

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  for (String abis : Build.SUPPORTED_ABIS ) {
    Log.d("build", "CPU_ABI:" + abis);
  }
}
        

Build.CPU_ABIとBuild.CPU_ABI2はsdk21以上では非推奨です。
しかし、確認に利用するだけなら利用しても問題ありません。

上記のコードをビルドして、コンソールで確認します。

console
CPU_ABI:armeabi-v7a
CPU_ABI2:armeabi
CPU_ABI:armeabi-v7a
CPU_ABI:armeabi
        

端末のABIが表示されました。

ccacheでキャッシュ

ccacheを利用することで、コンパイル時間を短縮できます。
C++等のファイルが多いほど、高い効果が期待できます。

ccacheのインストール

開発環境がmacの場合は、brewを利用すると簡単にinstallすることができます。

terminal
brew install ccache
        

続いて設定します。

terminal
ccache -o compiler_check=content
// cacheサイズ
ccache -o max_size=10G
        

cacheサイズは、開発環境に応じて設定します。大きい方が効果は高くなります。

コマンド入力後は、local.propertiesに設定を記述します。

local.properties
ccache.path=/usr/local/bin/ccache
        

パスはシンボリックリンクでなく、実体のパス記載します。

全ての設定が終了したらビルドを実行します。二度目以降はキャッシュされ、ビルド速度が大幅に向上します。

まとめ

NDKのビルド環境、開発環境は、お世辞にも整備されているとは言い難いです。
現状、NDKは多用しない方が良いと思います。

関連記事

タグ検索で調べてみよう

Android7.0 Android Studio