Android: Dagger 2.17のfastInitを試してみた

Dagge 2.17でfastInitオプションが追加されました。 https://google.github.io/dagger/compiler-options

これは、startup timeを改善するための機能です。どれくらい差があるかを担当アプリで実際に調べてみました。

確認に使用した端末はAndroid8系のGalaxyと、Android7系のXperiaの計2台になります。

確認に使用したシェルスクリプト

adb shellコマンドから起動時間を調べるコマンドです。計11回startup timeを確認する事ができます。

for i in {0..10}
do
    adb shell am start -S -W jp.hoge/.ui.main.MainActivity -c android.intent.category.LAUNCHER -a android.intent.action.MAIN >> hoge.txt
    sleep 10
done

下記を参考にしました。

fastInit有効の場合

下記をbuild.gradleに追加します。

kapt {
    javacOptions {
        option("-Adagger.fastInit=enabled")
    }
}

結果:

平均: 1609ms

fastInit無効の場合

結果:

平均: 1607ms

まとめ

ほぼ変わらない数字が出てきてしまいました。悲しい。 Dagger生成コードを見る限りだと、最初のComponentのcreateのタイミングでComponentが持っているフィールドの初期化が行われていなかったので、早くなりそうだなと思ったんですが、実際にはほぼ変わりませんでした。

芳しくない結果になった推測として

なにか分かったら追記します、もしくは間違っている点があればご指摘いただければ幸いです😊

Written by