[android] モジュール管理で ビルド高速化!
TRANSCRIPT
![Page 1: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/1.jpg)
[Android] モジュール管理で ビルド高速化!
!
@ichigotake
!
#potatotips 5
![Page 2: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/2.jpg)
Profile
• name: @ichigotake
• hoby: 2013年夏頃からAndroidアプリ開発
!
• work: スタディプラス株式会社
![Page 3: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/3.jpg)
注意事項• この実験は全て構想段階もしくは模索中のもの
• まだまだ検証不足( 先週から開始
• gradle-android-plugin の仕様・バグを掴んでいないとハマるリスクがとても高い
• 検証の経過報告と思ってください
![Page 4: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/4.jpg)
Androidアプリ開発の悩み!
•巨大ではなくてもビルド時間がかる
•すぐに30秒越え
•つらい
•ツラい・つらい……
![Page 5: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/5.jpg)
検証のきっかけ
• ビルド時間を短くしたい!!!!
• LogCatの追記で1分も待たされる…
• ProductFlavors の模索時に気付きを得る
• ???「ライブラリのコンパイル速いよね」
![Page 6: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/6.jpg)
試しにアプリケーションプロジェクトを
ライブラリ化してみよう!!!!
![Page 7: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/7.jpg)
まずは結果からassembleDebugの実行時間
0秒
15秒
30秒
45秒
60秒
大きいアプリ(12,000行 リソース/依存多)
そこそこのアプリ(7,000行)
小さいアプリ(3,000行)
8秒10秒12秒
30秒
40秒
60秒
Before After
![Page 8: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/8.jpg)
前提条件• gradle-android-plugin 0.8.3 ( + AS 0.4.6
• assembleBuild を通す事のみを確認
(アプリは起動しない
• 試行ケース・回数は少なめ
• 実験結果はあくまで理論値
![Page 9: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/9.jpg)
検証した事1. 既存アプリを丸ごとライブラリ化
- apply plugin: ‘android' +apply plugin: ‘android-library'
!
2. mavenLocal化 !
$ ./gradlew :App:uploadArchives # /repository へ
3. 新アプリモジュール内はAndroidManifestのみ
![Page 10: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/10.jpg)
言いたい事は1つ
![Page 11: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/11.jpg)
構成イメージ/ProjectRoot
/App # dependencies { compile “${stock}” }
/Stock # アプリのソース/リソースを詰めたライブラリ
/repository # /Stock のアップロード先
mavenLocal() で /repository を追加しておく
![Page 12: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/12.jpg)
何がダメだったのか
アプリケーションプロジェクトでは…
• 毎回 mergeResource, preDexCompile を実行
• この2つが一番のボトルネック
• ライブラリは clean しない限り1回だけ実行?
![Page 13: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/13.jpg)
効能
コードをいじるためのコストが少し増える
• レガシー資産を凍結する仕組みとして
• 処理の共通化・汎用化への意識向上
• 注) デメリットと表裏一体
![Page 14: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/14.jpg)
考慮すべき事 その1• Activityはライブラリ化しない
• いわゆるコントローラを楽に編集出来ると小回り利く
• 密結合度が高いならI/Fの抽出などしてみる
• 自身のモジュール内に置かないとダメなモノもある
• AndroidManifestで参照する R.* など
![Page 15: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/15.jpg)
考慮すべき事 その2
既存コードの修正が必要な場合も
• ライブラリでは R.* が定数でなくなる
• R.* はアノテーションの引数・case文に使えない
• IDEで switch文をif-else に変換しよう
![Page 16: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/16.jpg)
考慮すべき事 その3• 毎回実行されるタスクのコストを下げる
• アプリモジュールにモノを置かない工夫
• モジュール の include を増やさない
• 依存でcompile projectを使わない工夫
![Page 17: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/17.jpg)
考慮すべき事 その4
1. いちいちuploadArchivesやるのはめんどう!
2. 作業中だけ作業用モジュールで
3. fixしたらライブラリモジュールへ
など、運用の一例として。
![Page 18: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/18.jpg)
考慮すべき事 そのn
細かい注意点はまだまだ他にも…!!
(5分でまとめるには多すぎる…)
![Page 19: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/19.jpg)
考慮すべき事 まとめ
• アプリモジュールは「今作業してるもの」のみにすると速くなる
• 用意,運用の手間とビルド時間短縮の費用対効果
• スムーズに移行出来るか,運用で混乱させないか
![Page 20: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/20.jpg)
実験対象の実測値は?
• でかいものは依存が複雑で難しい
• 各種罠と複雑な運用を避けると…
60秒 -> 2,30秒
くらいにはなりそう(未検証/予測値
![Page 21: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/21.jpg)
そもそも…
コード量を減らす,汎用処理はライブラリ化などを
実践していればこの実験も工夫もいらないはず…
![Page 22: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/22.jpg)
新規or小さい規模なら…
• モジュール内に置かないスタイルへの移行はそこまで苦にならないはず
• あわよくば独自汎用ライブラリも充実…するかも
![Page 23: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/23.jpg)
• 後日 検証結果をまとめて公開します
• おおよそ罠と回避策は見つかった
![Page 24: [Android] モジュール管理で ビルド高速化!](https://reader034.vdocuments.mx/reader034/viewer/2022052405/58efb1941a28ab1b618b4605/html5/thumbnails/24.jpg)
Best, :)