SlideShare une entreprise Scribd logo
1  sur  59
Télécharger pour lire hors ligne
Android App Development 
with Gradle & Android Studio 
Tech Circle #3 
2014.8.19 
Soichiro Kashima 
Copyright © 2014 Soichiro Kashima All rights reserved.
Introduction 
‣ Android の新ビルドシステムのご紹介 
‣ UI などの 作り方 が注目されがちだが… 
‣ ビルド は納品/リリースに関わる重要作業 
‣ ストア や OS のアップデートが頻繁にあるため 
常に最新仕様でリリースができる知識が必要 
2
Agenda 
1. 従来の Android アプリのビルド 
2. Gradle & Android Studio 
3. Product Flavor  
4. 活用例(CI) 
5. まとめ 
3
従来の Android アプリのビルド 
4
アプリの中身 
‣ アプリ = APK ファイル = ZIP ファイル 
‣ Dalvik VM / ART で動作 
‣ Java → .class → .dex 
5
アプリの中身 
‣ Java プログラム以外にもいろいろ 
‣ AndroidManifest.xml   
‣ リソース 
‣ 文字列,画像,色,アニメーション,… 
‣ ネイティブライブラリ(*.so) 
6
APK ファイルができるまでの工程 
‣ ソースファイル生成(R.java,BuildConfig.java) 
‣ コンパイル 
‣ ProGuard(難読化) 
‣ 署名なし APK ファイル作成 
‣ ZipAlign   
‣ 署名 
7
必要になる APK ファイルの種類 
‣ デザイン確認用(モックアップ) 
‣ デバッグ用 
‣ ステージング環境接続用 
‣ UAT用(お客様用) 
‣ 本番用 
8 
さらに種類が必要な場合も… 
Free/Pro,Google Play, 
Amazon,…
手作業での管理は困難 
‣ あまりにも種類が多い 
‣ 自動化するためにビルドの知識が重要 
9
従来の Android アプリビルド 
‣ 元々 Android がサポートしていたビルド方法 
‣ Eclipse ADT → Export (GUI) 
‣ Ant  
10
Ant の限界 
‣ 表現力が低い 
‣ 標準で用意されているのは Debug / Release のみ 
‣ 工夫すれば増やせるが… 
11
さすがに無理がある 
‣ XXX 環境向けの APK 作って 
‣ お客さんが XXX に YYY の設定で試したいって 
‣ 途中でもいいから試させて 
‣ これ前入れてもらったのと何が変わったの? 
12
新しいシステムへの期待… 
‣ ビルドの管理は大変になるばかり… 
‣ そろそろ新しい仕組みが必要なのでは? 
‣ と思っていたところに…! 
13
Gradle & Android Studio 
14
Android Studio 登場 
15 
https://developer.android.com/sdk/installing/studio.html
Android Studio 登場 
‣ 2013年登場,つい最近までα版,現在β版(0.8.0) 
‣ Eclipse でなく IntelliJ IDEA ベース 
‣ Gradle と統合されている 
‣ Gradle + Android Gradle Plugin 
16
Android Studio 登場 
‣ Gradle は Groovy の DSL であり拡張が容易 
‣ Gradle 
‣ http://www.gradle.org/ 
‣ Groovy 
‣ http://groovy.codehaus.org/ 
17
Android Studio 登場 
‣ Product Flavor による複数のビルド設定管理が可能 
‣ Ant / Maven / Ivy を統合できる依存関係管理 
‣ マルチプロジェクト構成が可能 
18
Android Studio 登場 
‣ IDE でもコマンドラインでも同じ動作 
19 
IDE - Android Studio CLI - Gradle
Ant と Gradle 
‣ ビルド定義 
‣ Ant: build.xml = XMLファイル 
‣ Gradle: build.gradle = Groovyスクリプト 
‣ コマンド 
‣ Ant: ant 
‣ Gradle: gradle / gradlew 
20
Gradle 自体はインストール不要 
‣ Gradle Wrapper という数ファイルだけあれば OK 
‣ シェルスクリプトと .bat がセット 
‣ バージョン管理すれば皆同じバージョンを使える 
‣ IDE がなくても IDE と同じビルドができる 
21
Gradle Wrapper 
‣ コマンド例 
$ ./gradlew tasks # タスク一覧 
$ ./gradlew assembleDebug # Debugビルド 
$ ./gradlew assemble # 全種類ビルド 
$ ./gradlew installDebug # インストール 
$ ./gradlew connectedAndroidTest # 端末接続テスト 
$ ./gradlew uninstallDebug # アンインストール 
$ ./gradlew uninstallAll # 全アンインストール 
22
依存関係管理 
‣ 数行書くだけで簡単にライブラリを取り込める 
‣ Eclipse のような面倒な設定が不要 
23
依存関係管理 
‣ フェーズごとに依存関係を定義できる 
dependencies { 
compile 'com.android.support:support-v4:20.0.+' 
compile 'com.google.android.gms:play-services:5.0.77' 
compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' 
! 
androidTestCompile ‘xxxx:yyyy:1.0.0’ 
! 
} 
24 
APKに含める 
テストのみ利用
依存関係管理 
‣ 機会があればぜひ使ってみてください! 
dependencies { 
// ダイアログライブラリ 
compile 'com.github.ksoichiro:simplealertdialog:1.1.1@aar' 
// 入力チェックライブラリ 
compile 'com.github.ksoichiro:androidformenhancer:1.1.0@aar' 
// ボタンUIライブラリ 
compile 'com.github.ksoichiro:richbuttons:0.1.1@aar' 
} 
25
カバレッジ計測 
‣ JaCoCo が使える 
‣ リフレクションがあると失敗する…(VerifyError) 
26 
android { 
jacoco { 
version = '0.7.0.201403182114' 
} 
: 
buildTypes { 
debug { 
testCoverageEnabled = true 
利用するバージョン指定 
計測有効化
ディレクトリ構成 
‣ Eclipse と違い自由に構成可能 
‣ Java ソースコード 
‣ XML リソース 
‣ テストコード 
‣ AndroidManifest.xml 
27
ディレクトリ構成 
‣ Eclipse に合わせることも可能 → 段階的に移行可 
android { 
sourceSets { 
main { 
manifest.srcFile 'AndroidManifest.xml' 
java.srcDirs = ['src'] 
resources.srcDirs = ['src'] 
aidl.srcDirs = ['src'] 
renderscript.srcDirs = ['src'] 
res.srcDirs = ['res'] 
assets.srcDirs = ['assets'] 
} 
28
Product Flavor 
29
Product Flavor 
// アプリのIDをFlavorごとに分けて同時にインストールできるようにする 
productFlavors { 
dev { // 開発用ID 
applicationId "com.domodomo.android.dev" 
} 
dgate { // DeployGate用ID 
applicationId "com.domodomo.android.dgate" 
} 
prod { // 本番用ID 
applicationId "com.domodomo.android" 
} 
} 
30 
‣ ビルド時に少しだけ内容を変えられる
Product Flavor 
‣ ソースも分離可能 
‣ デバッグ機能の ON / OFF 
‣ アプリ名の切り替え 
‣ アイコンの切り替え 
‣ Permission の有無 
31
Build Variant 
‣ ビルド構成を変える要素は2つある 
‣ BuildType : ビルド自体の設定を切り替える 
‣ ProGuard の有無,署名の種類など 
‣ ProductFlavor : プログラムの内容を切り替える 
‣ 有料/無料,アプリ名,API接続先など 
32
Build Variant 
‣ コマンドは ProductFlavors x BuildTypes 
‣ installDevDebug / installDevRelease 
‣ installStgDebug / installStgRelease 
‣ installProDebug / installProRelease 
33
Build Variant 
‣ コマンドがやたら長くなるが省略可能 
‣ 単語ごとに識別可能な分だけ入力すればOK 
‣ installStagingDebug → iSD 
‣ lintDevDebug → lDD 
‣ check → ch 
34
Build Variant 
‣ 依存関係も Flavor ごとに指定できる 
‣ dgateCompile ‘com.deploygate:sdk:2.4.+’ 
‣ DeployGate 配布用ビルドのみ DeployGate SDK 
を含めてビルドする 
(dgate という Flavor を定義している場合) 
35
複数の Product Flavor 
‣ Flavor の種類が複数ほしい 
‣ API X の環境(開発/ステージング/本番) 
‣ API Y の環境(開発/ステージング/本番) 
36
複数の Product Flavor 
‣ flavorDimensions で複数グループを組み合わせ 
37 
flavorDimensions "abi", "version" 
! 
! 
productFlavors { 
freeapp { 
flavorDimension "version" 
... 
} 
x86 { 
flavorDimension "abi" 
... 
x86-freeapp-debug 
x86-freeapp-release 
arm-freeapp-debug 
arm-freeapp-release 
mips-freeapp-debug 
mips-freeapp-release 
x86-paidapp-debug 
x86-paidapp-release 
arm-paidapp-debug 
arm-paidapp-release 
mips-paidapp-debug 
mips-paidapp-release 
アーキテクチャ有料/無料 
少し前まではflavorGroupsだった
利用例 
‣ グルーピング例 
‣ API等の外部接続先 
‣ アーキテクチャ(ARM,x86,MIPS,…) 
‣ リリース先のストア,配布サービス 
‣ 製品/サービスのグレード(Lite,Pro) 
‣ α/β/製品版(バグレポート自動送信機能の有無等) 
38
Groovy / Gradle の活用 
‣ 少しスクリプトを書けばこんなことも 
‣ APK ファイル名にバージョン番号を入れる 
‣ APK ファイル名にコミットハッシュ値をつける 
‣ APK ファイル名に Flavor 名を入れる 
39
Java プラグイン 
‣ Javaプラグインと互換性がないのが難点 
‣ Javaプラグイン? 
‣ 標準的な Java プロジェクトをビルドできる 
‣ Java プラグイン依存のライブラリが使えない 
40
Java プラグイン 
‣ .gradle ファイルを分ければ OK → CI 等に有効 
‣ ./gradlew :app:connectedCheck 
‣ 通常の端末接続テスト 
‣ ./gradlew -p app -b app/coveralls.gradle coveralls 
‣ カバレッジ計測結果を Coveralls へ送信 
41
活用例(CI) 
42
CI で最新アプリを常時利用可能に 
‣ Push をトリガーにして Gradle でビルド 
Docker container (Ubuntu) 
43 
Android SDK 
5. ./gradlew assemble 
Docker Jenkins 
GitLab 
Git repo 
App project 
Gradle 
Wrapper 
APK 
PC 
1. git push 
2. web hook 
3. git clone 
4. docker run 
AAPPKK APK 
Maven 
Central 
android 
m2repository
CI で最新アプリを常時利用可能に 
‣ Push をトリガーにして Gradle でビルド 
Docker container (Ubuntu) 
44 
Android SDK 
5. ./gradlew assemble 
Docker Jenkins 
GitLab 
Git repo 
App project 
Gradle 
Wrapper 
APK 
1. git push 
PC 
2. web hook 
3. git clone 
4. docker run 
AAPPKK APK 
Maven 
Central 
android 
m2repository
CI で最新アプリを常時利用可能に 
‣ Push をトリガーにして Gradle でビルド 
Docker container (Ubuntu) 
45 
Android SDK 
5. ./gradlew assemble 
Docker Jenkins 
GitLab 
Git repo 
App project 
Gradle 
Wrapper 
APK 
PC 
1. git push 
2. web hook 
3. git clone 
4. docker run 
AAPPKK APK 
Maven 
Central 
android 
m2repository
CI で最新アプリを常時利用可能に 
‣ Push をトリガーにして Gradle でビルド 
Docker container (Ubuntu) 
46 
Android SDK 
5. ./gradlew assemble 
Docker Jenkins 
GitLab 
Git repo 
App project 
Gradle 
Wrapper 
APK 
PC 
1. git push 
2. web hook 
3. git clone 
4. docker run 
AAPPKK APK 
Maven 
Central 
android 
m2repository
CI で最新アプリを常時利用可能に 
‣ Push をトリガーにして Gradle でビルド 
Docker container (Ubuntu) 
47 
Android SDK 
5. ./gradlew assemble 
Docker Jenkins 
GitLab 
Git repo 
App project 
Gradle 
Wrapper 
APK 
PC 
1. git push 
2. web hook 
3. git clone 
4. docker run 
AAPPKK APK 
Maven 
Central 
android 
m2repository
CI で最新アプリを常時利用可能に 
‣ Push をトリガーにして Gradle でビルド 
Docker container (Ubuntu) 
48 
Android SDK 
5. ./gradlew assemble 
Docker Jenkins 
GitLab 
Git repo 
App project 
Gradle 
Wrapper 
APK 
PC 
1. git push 
2. web hook 
3. git clone 
4. docker run 
AAPPKK APK 
Maven 
Central 
android 
m2repository
CI で最新アプリを常時利用可能に 
‣ Push をトリガーにして Gradle でビルド 
Docker container (Ubuntu) 
49 
Android SDK 
5. ./gradlew assemble 
Docker Jenkins 
GitLab 
Git repo 
App project 
Gradle 
Wrapper 
APK 
PC 
1. git push 
2. web hook 
3. git clone 
4. docker run 
AAPPKK APK 
Maven 
Central 
android 
m2repository 
Job終了後は 
Docker containerは破棄, 
Workspaceは残るので 
APKダウンロード可能
GitHub + Travis CI + Coveralls 
‣ Gradle じゃなくてもできる? Gradle だと簡単かも 
50 
PC GitHub Travis CI Coveralls
GitHub + Travis CI + Coveralls 
‣ Gradle じゃなくてもできる? Gradle だと簡単かも 
51 
1. git push 2. web hook 
PC GitHub 
3. POST 
Travis CI Coveralls
GitHub + Travis CI + Coveralls 
‣ Gradle じゃなくてもできる? Gradle だと簡単かも 
52 
1. git push 2. web hook 
PC GitHub 
複数のAPIレベルのエミュレータで 
./gradlew assemble や 
./gradlew connectedAndroidTest 
3. POST 
を実行できる 
Travis CI Coveralls
GitHub + Travis CI + Coveralls 
‣ Gradle じゃなくてもできる? Gradle だと簡単かも 
53 
1. git push 2. web hook 
PC GitHub 
複数のAPIレベルのエミュレータで 
./gradlew assemble や 
./gradlew connectedAndroidTest 
3. POST 
を実行できる 
Travis CI Coveralls 
成功したら 
JaCoCoのカバレッジデータを 
Coverallsへ送信
GitHub + Travis CI + Coveralls 
‣ Gradle じゃなくてもできる? Gradle だと簡単かも 
54 
1. git push 2. web hook 
PC GitHub 
複数のAPIレベルのエミュレータで 
./gradlew assemble や 
./gradlew connectedAndroidTest 
3. POST 
を実行できる 
Travis CI Coveralls 
成功したら 
JaCoCoのカバレッジデータを 
Coverallsへ送信 
テスト結果やカバレッジは 
プロジェクトトップページで 
バッジとして確認できる
まとめ 
55
Gradle/Android Studio 採用メリット 
‣ ビルド管理が従来に比べて圧倒的に柔軟で便利 
‣ IDE と CLI の結果が同じでありビルドに安心感 
‣ 依存関係管理が手軽でライブラリ導入しやすい 
‣ 開発スタートに必要なセットアップが少ない 
56
Gradle/Android Studio 採用リスク 
‣ α 版の間は激しく仕様変更があった→今後は…? 
‣ Gradle 自体が頻繁にバージョンアップしている 
‣ CheckStyle 等,Eclipse と統合してツールを 
使っていた場合は移行が難しいかも 
‣ Eclipse に最適化された人が多いと抵抗があるかも 
57
最新情報をチェックしよう 
‣ New Build System - Android Tools Project Site 
‣ http://tools.android.com/tech-docs/new-build-system 
58
Thank you! 
59

Contenu connexe

Tendances

GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」Taisuke Inoue
 
Go goes Mobile: Quick Exploration on Go 1.5 and Gomobile
Go goes Mobile: Quick Exploration on Go 1.5 and GomobileGo goes Mobile: Quick Exploration on Go 1.5 and Gomobile
Go goes Mobile: Quick Exploration on Go 1.5 and GomobileTakahiro Yoshimura
 
[Lt]versionごとにurlを自動生成
[Lt]versionごとにurlを自動生成[Lt]versionごとにurlを自動生成
[Lt]versionごとにurlを自動生成shouta yoshikai
 
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンドTakehara Ryo
 
DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法tkawashita
 
GitBucketPlugin@2014忘年度会
GitBucketPlugin@2014忘年度会GitBucketPlugin@2014忘年度会
GitBucketPlugin@2014忘年度会Kiyotaka Kunihira
 
Jjug ccc 2016_fall_blue_green_deployment
Jjug ccc 2016_fall_blue_green_deploymentJjug ccc 2016_fall_blue_green_deployment
Jjug ccc 2016_fall_blue_green_deploymentHiroyuki Onaka
 
Gradleでビルドするandroid NDKアプリ
Gradleでビルドするandroid NDKアプリGradleでビルドするandroid NDKアプリ
Gradleでビルドするandroid NDKアプリHideyuki Kikuma
 
Jenkinsを用いたAndroidアプリビルド作業効率化
Jenkinsを用いたAndroidアプリビルド作業効率化Jenkinsを用いたAndroidアプリビルド作業効率化
Jenkinsを用いたAndroidアプリビルド作業効率化Kenichi Kambara
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradleNobuhiro Sue
 
あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert2)
あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert2)あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert2)
あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert2)WESEEKWESEEK
 
Docker webinar 20170426−01
Docker webinar 20170426−01Docker webinar 20170426−01
Docker webinar 20170426−01Creationline,inc.
 
remote Docker over SSHが熱い
remote Docker over SSHが熱いremote Docker over SSHが熱い
remote Docker over SSHが熱いHiroyuki Ohnaka
 
あるゲームアプリケーションの構成とアップデートサイクル
あるゲームアプリケーションの構成とアップデートサイクルあるゲームアプリケーションの構成とアップデートサイクル
あるゲームアプリケーションの構成とアップデートサイクルKentaro Iizuka
 
JUnit入門/TDD入門[新人研修資料]
JUnit入門/TDD入門[新人研修資料]JUnit入門/TDD入門[新人研修資料]
JUnit入門/TDD入門[新人研修資料]Ryuhei Ishibashi
 
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code &  A clean dev env, working every ...Remote Development with Visual Studio Code &  A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...Hiroyuki Ohnaka
 
5分で分かった気になるTekton
5分で分かった気になるTekton5分で分かった気になるTekton
5分で分かった気になるTektonShuhei Kitagawa
 
Javaユーザに贈るJenkins 25のTips
Javaユーザに贈るJenkins 25のTipsJavaユーザに贈るJenkins 25のTips
Javaユーザに贈るJenkins 25のTipsMasanori Satoh
 

Tendances (20)

GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
 
Go goes Mobile: Quick Exploration on Go 1.5 and Gomobile
Go goes Mobile: Quick Exploration on Go 1.5 and GomobileGo goes Mobile: Quick Exploration on Go 1.5 and Gomobile
Go goes Mobile: Quick Exploration on Go 1.5 and Gomobile
 
[Lt]versionごとにurlを自動生成
[Lt]versionごとにurlを自動生成[Lt]versionごとにurlを自動生成
[Lt]versionごとにurlを自動生成
 
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
 
DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法DroidKaigi2016 windows環境での効率的なアプリ開発手法
DroidKaigi2016 windows環境での効率的なアプリ開発手法
 
AndroidLint #DroidKaigi
AndroidLint #DroidKaigiAndroidLint #DroidKaigi
AndroidLint #DroidKaigi
 
GitBucketPlugin@2014忘年度会
GitBucketPlugin@2014忘年度会GitBucketPlugin@2014忘年度会
GitBucketPlugin@2014忘年度会
 
Jjug ccc 2016_fall_blue_green_deployment
Jjug ccc 2016_fall_blue_green_deploymentJjug ccc 2016_fall_blue_green_deployment
Jjug ccc 2016_fall_blue_green_deployment
 
Gradleでビルドするandroid NDKアプリ
Gradleでビルドするandroid NDKアプリGradleでビルドするandroid NDKアプリ
Gradleでビルドするandroid NDKアプリ
 
Jenkinsを用いたAndroidアプリビルド作業効率化
Jenkinsを用いたAndroidアプリビルド作業効率化Jenkinsを用いたAndroidアプリビルド作業効率化
Jenkinsを用いたAndroidアプリビルド作業効率化
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradle
 
あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert2)
あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert2)あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert2)
あなたもできる!GASで勤怠入力Slack App構築【WESEEK Tech Conf #14】 (pert2)
 
Jenkins と groovy
Jenkins と groovyJenkins と groovy
Jenkins と groovy
 
Docker webinar 20170426−01
Docker webinar 20170426−01Docker webinar 20170426−01
Docker webinar 20170426−01
 
remote Docker over SSHが熱い
remote Docker over SSHが熱いremote Docker over SSHが熱い
remote Docker over SSHが熱い
 
あるゲームアプリケーションの構成とアップデートサイクル
あるゲームアプリケーションの構成とアップデートサイクルあるゲームアプリケーションの構成とアップデートサイクル
あるゲームアプリケーションの構成とアップデートサイクル
 
JUnit入門/TDD入門[新人研修資料]
JUnit入門/TDD入門[新人研修資料]JUnit入門/TDD入門[新人研修資料]
JUnit入門/TDD入門[新人研修資料]
 
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code &  A clean dev env, working every ...Remote Development with Visual Studio Code &  A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...
 
5分で分かった気になるTekton
5分で分かった気になるTekton5分で分かった気になるTekton
5分で分かった気になるTekton
 
Javaユーザに贈るJenkins 25のTips
Javaユーザに贈るJenkins 25のTipsJavaユーザに贈るJenkins 25のTips
Javaユーザに贈るJenkins 25のTips
 

Similaire à Android App Development with Gradle & Android Studio

どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Codeどっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio CodeTakashi Okawa
 
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力Keiji Ariyama
 
つ部 Android Studio 勉強会 12/7
つ部 Android Studio 勉強会 12/7つ部 Android Studio 勉強会 12/7
つ部 Android Studio 勉強会 12/7Hikaru Wada
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309Nobuhiro Sue
 
Android studio で行ってみよう!!
Android studio で行ってみよう!!Android studio で行ってみよう!!
Android studio で行ってみよう!!Kazuaki Ueda
 
App Service の DevOps と Visual Studio Team Services 最新アップデート
App Service の DevOps と Visual Studio Team Services 最新アップデートApp Service の DevOps と Visual Studio Team Services 最新アップデート
App Service の DevOps と Visual Studio Team Services 最新アップデートMicrosoft Azure Japan
 
OpenShiftでJBoss EAP構築
OpenShiftでJBoss EAP構築OpenShiftでJBoss EAP構築
OpenShiftでJBoss EAP構築Daein Park
 
Spring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswersSpring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswersTakuma Watabiki
 
Github基礎 | [FLEXER Project]
Github基礎 | [FLEXER Project]Github基礎 | [FLEXER Project]
Github基礎 | [FLEXER Project]Mitsumasa Yamaga
 
実践! Argo cd & rollouts による canary release(cndt2021)
実践! Argo cd & rollouts による canary release(cndt2021) 実践! Argo cd & rollouts による canary release(cndt2021)
実践! Argo cd & rollouts による canary release(cndt2021) HayatoOkuma1
 
Gradleプラグインを作成してみた
Gradleプラグインを作成してみたGradleプラグインを作成してみた
Gradleプラグインを作成してみたshinya sakemoto
 
みゆっき☆Think#3 「androidに触ってみるよ!」
みゆっき☆Think#3 「androidに触ってみるよ!」みゆっき☆Think#3 「androidに触ってみるよ!」
みゆっき☆Think#3 「androidに触ってみるよ!」techtalkdwango
 
go.mobile で Android 開発
go.mobile で Android 開発go.mobile で Android 開発
go.mobile で Android 開発Hiroshi Kurokawa
 
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデートデモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデートAkira Inoue
 
Houdini 製品概要
Houdini 製品概要 Houdini 製品概要
Houdini 製品概要 Ken Taki
 
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜Masaya Aoyama
 
Cloud Foundry Cli Plugin入門
Cloud Foundry Cli Plugin入門Cloud Foundry Cli Plugin入門
Cloud Foundry Cli Plugin入門Takeshi Morikawa
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Daisuke Hiraoka
 
Scalaコーディングの準備
Scalaコーディングの準備Scalaコーディングの準備
Scalaコーディングの準備Yusuke Arakaki
 

Similaire à Android App Development with Gradle & Android Studio (20)

どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Codeどっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
 
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
 
つ部 Android Studio 勉強会 12/7
つ部 Android Studio 勉強会 12/7つ部 Android Studio 勉強会 12/7
つ部 Android Studio 勉強会 12/7
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
 
Gradle再入門.pptx
Gradle再入門.pptxGradle再入門.pptx
Gradle再入門.pptx
 
Android studio で行ってみよう!!
Android studio で行ってみよう!!Android studio で行ってみよう!!
Android studio で行ってみよう!!
 
App Service の DevOps と Visual Studio Team Services 最新アップデート
App Service の DevOps と Visual Studio Team Services 最新アップデートApp Service の DevOps と Visual Studio Team Services 最新アップデート
App Service の DevOps と Visual Studio Team Services 最新アップデート
 
OpenShiftでJBoss EAP構築
OpenShiftでJBoss EAP構築OpenShiftでJBoss EAP構築
OpenShiftでJBoss EAP構築
 
Spring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswersSpring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswers
 
Github基礎 | [FLEXER Project]
Github基礎 | [FLEXER Project]Github基礎 | [FLEXER Project]
Github基礎 | [FLEXER Project]
 
実践! Argo cd & rollouts による canary release(cndt2021)
実践! Argo cd & rollouts による canary release(cndt2021) 実践! Argo cd & rollouts による canary release(cndt2021)
実践! Argo cd & rollouts による canary release(cndt2021)
 
Gradleプラグインを作成してみた
Gradleプラグインを作成してみたGradleプラグインを作成してみた
Gradleプラグインを作成してみた
 
みゆっき☆Think#3 「androidに触ってみるよ!」
みゆっき☆Think#3 「androidに触ってみるよ!」みゆっき☆Think#3 「androidに触ってみるよ!」
みゆっき☆Think#3 「androidに触ってみるよ!」
 
go.mobile で Android 開発
go.mobile で Android 開発go.mobile で Android 開発
go.mobile で Android 開発
 
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデートデモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
 
Houdini 製品概要
Houdini 製品概要 Houdini 製品概要
Houdini 製品概要
 
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
 
Cloud Foundry Cli Plugin入門
Cloud Foundry Cli Plugin入門Cloud Foundry Cli Plugin入門
Cloud Foundry Cli Plugin入門
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
 
Scalaコーディングの準備
Scalaコーディングの準備Scalaコーディングの準備
Scalaコーディングの準備
 

Dernier

論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Dernier (11)

論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

Android App Development with Gradle & Android Studio

  • 1. Android App Development with Gradle & Android Studio Tech Circle #3 2014.8.19 Soichiro Kashima Copyright © 2014 Soichiro Kashima All rights reserved.
  • 2. Introduction ‣ Android の新ビルドシステムのご紹介 ‣ UI などの 作り方 が注目されがちだが… ‣ ビルド は納品/リリースに関わる重要作業 ‣ ストア や OS のアップデートが頻繁にあるため 常に最新仕様でリリースができる知識が必要 2
  • 3. Agenda 1. 従来の Android アプリのビルド 2. Gradle & Android Studio 3. Product Flavor  4. 活用例(CI) 5. まとめ 3
  • 5. アプリの中身 ‣ アプリ = APK ファイル = ZIP ファイル ‣ Dalvik VM / ART で動作 ‣ Java → .class → .dex 5
  • 6. アプリの中身 ‣ Java プログラム以外にもいろいろ ‣ AndroidManifest.xml   ‣ リソース ‣ 文字列,画像,色,アニメーション,… ‣ ネイティブライブラリ(*.so) 6
  • 7. APK ファイルができるまでの工程 ‣ ソースファイル生成(R.java,BuildConfig.java) ‣ コンパイル ‣ ProGuard(難読化) ‣ 署名なし APK ファイル作成 ‣ ZipAlign   ‣ 署名 7
  • 8. 必要になる APK ファイルの種類 ‣ デザイン確認用(モックアップ) ‣ デバッグ用 ‣ ステージング環境接続用 ‣ UAT用(お客様用) ‣ 本番用 8 さらに種類が必要な場合も… Free/Pro,Google Play, Amazon,…
  • 9. 手作業での管理は困難 ‣ あまりにも種類が多い ‣ 自動化するためにビルドの知識が重要 9
  • 10. 従来の Android アプリビルド ‣ 元々 Android がサポートしていたビルド方法 ‣ Eclipse ADT → Export (GUI) ‣ Ant  10
  • 11. Ant の限界 ‣ 表現力が低い ‣ 標準で用意されているのは Debug / Release のみ ‣ 工夫すれば増やせるが… 11
  • 12. さすがに無理がある ‣ XXX 環境向けの APK 作って ‣ お客さんが XXX に YYY の設定で試したいって ‣ 途中でもいいから試させて ‣ これ前入れてもらったのと何が変わったの? 12
  • 13. 新しいシステムへの期待… ‣ ビルドの管理は大変になるばかり… ‣ そろそろ新しい仕組みが必要なのでは? ‣ と思っていたところに…! 13
  • 14. Gradle & Android Studio 14
  • 15. Android Studio 登場 15 https://developer.android.com/sdk/installing/studio.html
  • 16. Android Studio 登場 ‣ 2013年登場,つい最近までα版,現在β版(0.8.0) ‣ Eclipse でなく IntelliJ IDEA ベース ‣ Gradle と統合されている ‣ Gradle + Android Gradle Plugin 16
  • 17. Android Studio 登場 ‣ Gradle は Groovy の DSL であり拡張が容易 ‣ Gradle ‣ http://www.gradle.org/ ‣ Groovy ‣ http://groovy.codehaus.org/ 17
  • 18. Android Studio 登場 ‣ Product Flavor による複数のビルド設定管理が可能 ‣ Ant / Maven / Ivy を統合できる依存関係管理 ‣ マルチプロジェクト構成が可能 18
  • 19. Android Studio 登場 ‣ IDE でもコマンドラインでも同じ動作 19 IDE - Android Studio CLI - Gradle
  • 20. Ant と Gradle ‣ ビルド定義 ‣ Ant: build.xml = XMLファイル ‣ Gradle: build.gradle = Groovyスクリプト ‣ コマンド ‣ Ant: ant ‣ Gradle: gradle / gradlew 20
  • 21. Gradle 自体はインストール不要 ‣ Gradle Wrapper という数ファイルだけあれば OK ‣ シェルスクリプトと .bat がセット ‣ バージョン管理すれば皆同じバージョンを使える ‣ IDE がなくても IDE と同じビルドができる 21
  • 22. Gradle Wrapper ‣ コマンド例 $ ./gradlew tasks # タスク一覧 $ ./gradlew assembleDebug # Debugビルド $ ./gradlew assemble # 全種類ビルド $ ./gradlew installDebug # インストール $ ./gradlew connectedAndroidTest # 端末接続テスト $ ./gradlew uninstallDebug # アンインストール $ ./gradlew uninstallAll # 全アンインストール 22
  • 24. 依存関係管理 ‣ フェーズごとに依存関係を定義できる dependencies { compile 'com.android.support:support-v4:20.0.+' compile 'com.google.android.gms:play-services:5.0.77' compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' ! androidTestCompile ‘xxxx:yyyy:1.0.0’ ! } 24 APKに含める テストのみ利用
  • 25. 依存関係管理 ‣ 機会があればぜひ使ってみてください! dependencies { // ダイアログライブラリ compile 'com.github.ksoichiro:simplealertdialog:1.1.1@aar' // 入力チェックライブラリ compile 'com.github.ksoichiro:androidformenhancer:1.1.0@aar' // ボタンUIライブラリ compile 'com.github.ksoichiro:richbuttons:0.1.1@aar' } 25
  • 26. カバレッジ計測 ‣ JaCoCo が使える ‣ リフレクションがあると失敗する…(VerifyError) 26 android { jacoco { version = '0.7.0.201403182114' } : buildTypes { debug { testCoverageEnabled = true 利用するバージョン指定 計測有効化
  • 27. ディレクトリ構成 ‣ Eclipse と違い自由に構成可能 ‣ Java ソースコード ‣ XML リソース ‣ テストコード ‣ AndroidManifest.xml 27
  • 28. ディレクトリ構成 ‣ Eclipse に合わせることも可能 → 段階的に移行可 android { sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } 28
  • 30. Product Flavor // アプリのIDをFlavorごとに分けて同時にインストールできるようにする productFlavors { dev { // 開発用ID applicationId "com.domodomo.android.dev" } dgate { // DeployGate用ID applicationId "com.domodomo.android.dgate" } prod { // 本番用ID applicationId "com.domodomo.android" } } 30 ‣ ビルド時に少しだけ内容を変えられる
  • 31. Product Flavor ‣ ソースも分離可能 ‣ デバッグ機能の ON / OFF ‣ アプリ名の切り替え ‣ アイコンの切り替え ‣ Permission の有無 31
  • 32. Build Variant ‣ ビルド構成を変える要素は2つある ‣ BuildType : ビルド自体の設定を切り替える ‣ ProGuard の有無,署名の種類など ‣ ProductFlavor : プログラムの内容を切り替える ‣ 有料/無料,アプリ名,API接続先など 32
  • 33. Build Variant ‣ コマンドは ProductFlavors x BuildTypes ‣ installDevDebug / installDevRelease ‣ installStgDebug / installStgRelease ‣ installProDebug / installProRelease 33
  • 34. Build Variant ‣ コマンドがやたら長くなるが省略可能 ‣ 単語ごとに識別可能な分だけ入力すればOK ‣ installStagingDebug → iSD ‣ lintDevDebug → lDD ‣ check → ch 34
  • 35. Build Variant ‣ 依存関係も Flavor ごとに指定できる ‣ dgateCompile ‘com.deploygate:sdk:2.4.+’ ‣ DeployGate 配布用ビルドのみ DeployGate SDK を含めてビルドする (dgate という Flavor を定義している場合) 35
  • 36. 複数の Product Flavor ‣ Flavor の種類が複数ほしい ‣ API X の環境(開発/ステージング/本番) ‣ API Y の環境(開発/ステージング/本番) 36
  • 37. 複数の Product Flavor ‣ flavorDimensions で複数グループを組み合わせ 37 flavorDimensions "abi", "version" ! ! productFlavors { freeapp { flavorDimension "version" ... } x86 { flavorDimension "abi" ... x86-freeapp-debug x86-freeapp-release arm-freeapp-debug arm-freeapp-release mips-freeapp-debug mips-freeapp-release x86-paidapp-debug x86-paidapp-release arm-paidapp-debug arm-paidapp-release mips-paidapp-debug mips-paidapp-release アーキテクチャ有料/無料 少し前まではflavorGroupsだった
  • 38. 利用例 ‣ グルーピング例 ‣ API等の外部接続先 ‣ アーキテクチャ(ARM,x86,MIPS,…) ‣ リリース先のストア,配布サービス ‣ 製品/サービスのグレード(Lite,Pro) ‣ α/β/製品版(バグレポート自動送信機能の有無等) 38
  • 39. Groovy / Gradle の活用 ‣ 少しスクリプトを書けばこんなことも ‣ APK ファイル名にバージョン番号を入れる ‣ APK ファイル名にコミットハッシュ値をつける ‣ APK ファイル名に Flavor 名を入れる 39
  • 40. Java プラグイン ‣ Javaプラグインと互換性がないのが難点 ‣ Javaプラグイン? ‣ 標準的な Java プロジェクトをビルドできる ‣ Java プラグイン依存のライブラリが使えない 40
  • 41. Java プラグイン ‣ .gradle ファイルを分ければ OK → CI 等に有効 ‣ ./gradlew :app:connectedCheck ‣ 通常の端末接続テスト ‣ ./gradlew -p app -b app/coveralls.gradle coveralls ‣ カバレッジ計測結果を Coveralls へ送信 41
  • 43. CI で最新アプリを常時利用可能に ‣ Push をトリガーにして Gradle でビルド Docker container (Ubuntu) 43 Android SDK 5. ./gradlew assemble Docker Jenkins GitLab Git repo App project Gradle Wrapper APK PC 1. git push 2. web hook 3. git clone 4. docker run AAPPKK APK Maven Central android m2repository
  • 44. CI で最新アプリを常時利用可能に ‣ Push をトリガーにして Gradle でビルド Docker container (Ubuntu) 44 Android SDK 5. ./gradlew assemble Docker Jenkins GitLab Git repo App project Gradle Wrapper APK 1. git push PC 2. web hook 3. git clone 4. docker run AAPPKK APK Maven Central android m2repository
  • 45. CI で最新アプリを常時利用可能に ‣ Push をトリガーにして Gradle でビルド Docker container (Ubuntu) 45 Android SDK 5. ./gradlew assemble Docker Jenkins GitLab Git repo App project Gradle Wrapper APK PC 1. git push 2. web hook 3. git clone 4. docker run AAPPKK APK Maven Central android m2repository
  • 46. CI で最新アプリを常時利用可能に ‣ Push をトリガーにして Gradle でビルド Docker container (Ubuntu) 46 Android SDK 5. ./gradlew assemble Docker Jenkins GitLab Git repo App project Gradle Wrapper APK PC 1. git push 2. web hook 3. git clone 4. docker run AAPPKK APK Maven Central android m2repository
  • 47. CI で最新アプリを常時利用可能に ‣ Push をトリガーにして Gradle でビルド Docker container (Ubuntu) 47 Android SDK 5. ./gradlew assemble Docker Jenkins GitLab Git repo App project Gradle Wrapper APK PC 1. git push 2. web hook 3. git clone 4. docker run AAPPKK APK Maven Central android m2repository
  • 48. CI で最新アプリを常時利用可能に ‣ Push をトリガーにして Gradle でビルド Docker container (Ubuntu) 48 Android SDK 5. ./gradlew assemble Docker Jenkins GitLab Git repo App project Gradle Wrapper APK PC 1. git push 2. web hook 3. git clone 4. docker run AAPPKK APK Maven Central android m2repository
  • 49. CI で最新アプリを常時利用可能に ‣ Push をトリガーにして Gradle でビルド Docker container (Ubuntu) 49 Android SDK 5. ./gradlew assemble Docker Jenkins GitLab Git repo App project Gradle Wrapper APK PC 1. git push 2. web hook 3. git clone 4. docker run AAPPKK APK Maven Central android m2repository Job終了後は Docker containerは破棄, Workspaceは残るので APKダウンロード可能
  • 50. GitHub + Travis CI + Coveralls ‣ Gradle じゃなくてもできる? Gradle だと簡単かも 50 PC GitHub Travis CI Coveralls
  • 51. GitHub + Travis CI + Coveralls ‣ Gradle じゃなくてもできる? Gradle だと簡単かも 51 1. git push 2. web hook PC GitHub 3. POST Travis CI Coveralls
  • 52. GitHub + Travis CI + Coveralls ‣ Gradle じゃなくてもできる? Gradle だと簡単かも 52 1. git push 2. web hook PC GitHub 複数のAPIレベルのエミュレータで ./gradlew assemble や ./gradlew connectedAndroidTest 3. POST を実行できる Travis CI Coveralls
  • 53. GitHub + Travis CI + Coveralls ‣ Gradle じゃなくてもできる? Gradle だと簡単かも 53 1. git push 2. web hook PC GitHub 複数のAPIレベルのエミュレータで ./gradlew assemble や ./gradlew connectedAndroidTest 3. POST を実行できる Travis CI Coveralls 成功したら JaCoCoのカバレッジデータを Coverallsへ送信
  • 54. GitHub + Travis CI + Coveralls ‣ Gradle じゃなくてもできる? Gradle だと簡単かも 54 1. git push 2. web hook PC GitHub 複数のAPIレベルのエミュレータで ./gradlew assemble や ./gradlew connectedAndroidTest 3. POST を実行できる Travis CI Coveralls 成功したら JaCoCoのカバレッジデータを Coverallsへ送信 テスト結果やカバレッジは プロジェクトトップページで バッジとして確認できる
  • 56. Gradle/Android Studio 採用メリット ‣ ビルド管理が従来に比べて圧倒的に柔軟で便利 ‣ IDE と CLI の結果が同じでありビルドに安心感 ‣ 依存関係管理が手軽でライブラリ導入しやすい ‣ 開発スタートに必要なセットアップが少ない 56
  • 57. Gradle/Android Studio 採用リスク ‣ α 版の間は激しく仕様変更があった→今後は…? ‣ Gradle 自体が頻繁にバージョンアップしている ‣ CheckStyle 等,Eclipse と統合してツールを 使っていた場合は移行が難しいかも ‣ Eclipse に最適化された人が多いと抵抗があるかも 57
  • 58. 最新情報をチェックしよう ‣ New Build System - Android Tools Project Site ‣ http://tools.android.com/tech-docs/new-build-system 58