SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
id:nobuoka (@nobuoka)
株式会社はてな
2014-08-23 京都 Android 勉強会 2014.08
Android アプリ開発における
Gradle ビルドシステム
こんにちは、id:nobuoka です
● 普段の仕事: web サービス開発
– サーバーサイド: Perl
– クライアントサイド: Web (JS)、Android アプリ (Java)
● Java 好き
● 最近は Docker 周りを調べたりしてる
概要
● Gradle と Android アプリ開発
● Gradle や Android Gradle plugin の便利機能
● AAR パッケージの公開
● Gradle プラグインの作り方
Gradle と
Android アプリ開発
Gradle での Android アプリのビルドをしたことがない人向け
Gradle とは何か
● ビルドシステム
– Maven とか Ant とか sbt とか Rake みたいな
● ビルド設定は Groovy による DSL で記述
● Maven (Ivy) による依存管理が組み込まれている
● Java 界隈で主に使われてる
– Java に限ったビルドシステムではない
– 最近は C/C++/Objective-C のサポートが向上
Gradle ビルドスクリプトの例
// build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 19
buildToolsVersion "20.0.0"
defaultConfig {
applicationId "info.vividcode.android.app.seminar.kyotoandroid"
minSdkVersion 10
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
}
Gradle の利点と欠点
● Groovy の処理を書ける → 自由度が高い
● プラグインも作りやすい!
● Maven リポジトリが使える
● Groovy に慣れるまで難しい
– DSL として理解できても Groovy コードとして読めな
い
– API ドキュメントを見ても処理の流れがわかりづらい
Android Studio で Gradle 採用
● 最近ベータ版がリリースされた
● 嫌でも Gradle のことを知る必要がある
● IDE 上でのビルドが Gradle に統合されている
– IDE 上でもコマンドライン上でも同じ仕組みでビルド
– CI がやりやすい
Gradle による Android アプリのビルド
● Android Gradle plugin というプラグインでサ
ポート
● Android 用ライブラリ → AAR パッケージ
– リソースファイル入り JAR みたいな感じ (便利!!)
Android アプリプロジェクト
or
Android ライブラリプロジェクト
Gradle + Android Gradle plugin
ビルドしたりテストしたり
Android Studio コマンドライン
使う 使う
Gradle や Android Gradle plugin
の便利機能
Android アプリ開発時に知っておくとよいこと
Gradle wrapper
● プロジェクト内に置ける Gradle コマンド (?)
● 「gradlew」、「gradlew.bat」、
「gradle/wrapper」
● Wrapper の使用が推奨されている
– Gradle がインストールされていない環境でも簡単に
Gradle タスクを実行できる
– Gradle のバージョンを揃えられる
http://www.gradle.org/docs/current/userguide/gradle_wrapper.html
マルチプロジェクト
● 「settings.gradle」 にプロジェクト構成を記述
● 複数のサブプロジェクトで構成
– 大きなアプリを複数のサブプロジェクトに分けるとか
– Maven リポジトリのないライブラリ (例: Volley) の
コードをサブプロジェクトにするなど
http://www.gradle.org/docs/current/userguide/multi_project_builds.html
Android SDK の Maven リポジトリ
● Support library や Google Play Services の
Maven リポジトリ
dependencies {
compile 'com.android.support:appcompat-v7:20.0.0'
}
Build Variants や Manifest Placeholder
● デバッグ時だけ機能を変化させるとかできる
● Build Variants : Build Types と Product
Flavors の組
– Build types : Release build, debug build, など
– Product Flavors : 同じプロジェクトから複数アプリ
● AndroidManifest.xml 中の文字列を
build.gradle 側で指定できる
– http://ninjinkun.hatenablog.com/entry/2014
/08/18/102849
http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
buildTypes {
release { buildConfigField "boolean", "XXX_DEBUG", "false" }
debug { buildConfigField "boolean", "XXX_DEBUG", "true" }
}
BuildConfig のプロパティをビルド時に
決定
● ビルドタイプに応じて実行時に動作を変化させる
● 使いすぎると混乱のもとだけど
他の便利機能
● ドキュメント:
http://tools.android.com/tech-docs/new-bu
ild-system/user-guide
● 変更内容:
http://tools.android.com/tech-docs/new-bu
ild-system
– まだまだ開発中なので変更点を追いかけよう
AAR パッケージの公開
Android ライブラリを Maven リポジトリで共有する
AAR パッケージ
● Android ライブラリプロジェクトのバイナリディスト
リビューション
● classes.jar や AndroidManifest.xml やリソース
ファイルなどが含まれる
● リソースファイルの名前衝突には気を付ける必要
がある (?)
● AAR は JAR と同じく Maven リポジトリに置ける
http://tools.android.com/tech-docs/new-build-system/aar-format
Maven リポジトリへのアップロード
● maven プラグインを使うのが今のところ良さそう
● 単にアップロードするだけならそれほど大変では
ない
– ローカル Maven リポジトリ
– 社内 Maven リポジトリ
例: ファイルシステム上へのデプロイ
apply plugin: 'com.android.library'
// … Android ライブラリプロジェクトの設定いろいろ …
apply plugin: 'maven'
version = "1.0-SNAPSHOT"
group = "org.example.android.sugoi.project"
uploadArchives {
repositories.mavenDeployer {
repository(url: "file:test-repo")
pom.artifactId = 'sugoi-library'
pom.project {
name 'Sugoi library'
packaging 'aar'
description 'This is Sugoi library'
url 'http://sugoi.android.example.org/'
}
}
}
● gradle uploadArchives
一般的な Maven リポジトリ
● Maven Central へのデプロイはそこそこ大変
– 手作業でやるべきことがいろいろあるし時間がかかる
– 参考:
http://vividcode.hatenablog.com/entry/howto/p
ublish-aar-package-to-maven-central-with-grad
le
● 最近だと Bintray (jCenter) が良さそう?
– Android Studio のプロジェクトのひな形でも Maven
Central ではなく jCenter を参照するようになってい
る
Gradle プラグインの作り方
http://www.gradle.org/docs/current/userguide/custom_plugins.html
プラグインの利点
● ビルド処理を再利用可能な部品にパッケージ化
● 多くのプロジェクトから利用できる
● 他の人との共有も簡単
● Groovy でも書けるし Java でも Scala でも書ける
– 個人的には Java で書くと理解しやすい
プロジェクト固有の簡単なプラグイン
● Plugin<Project> インターフェイスを実装したクラ
ス
● ビルドスクリプト中に定義して apply
apply plugin: GreetingPlugin
class GreetingPlugin implements Plugin<Project> {
void apply(Project project) {
project.task('hello') << {
println "Hello from the GreetingPlugin"
}
}
}
Plugin<T> : http://www.gradle.org/docs/current/javadoc/org/gradle/api/Plugin.html
(http://www.gradle.org/docs/current/userguide/custom_plugins.html より)
Plugin<T> : http://www.gradle.org/docs/current/javadoc/org/gradle/api/Plugin.html
スタンドアロンのプラグインの作成
● ビルドスクリプトの準備とメタファイルの準備
<build.gradle ファイル>
dependencies {
compile gradleApi()
compile localGroovy()
}
<src/main/resources/META-INF/gradle-plugins/xxxx.properties ファイル>
implementation-class=your.package.GreetingPlugin
プラグインを使う側
● buildscript の依存を定義しておいて apply
<build.gradle ファイル>
buildscript {
repositories {
maven {
jcenter()
}
}
dependencies {
classpath group: 'your.package', name: 'xxxxplugin', version: '1.0'
}
}
apply plugin: 'xxxx'
Android Gradle plugin と連携する
● アプリ開発では Android Gradle plugin と連携
して動作させたいこともある
● ドキュメントは揃ってないので Android Gradle
plugin の実装を読むしかない (と思う)
例: Android SDK のセットアップ
● ビルドスクリプト内で Android SDK の準備をする
Gradle plugin。
– nobuoka/vc-gradle-android-sdk-manager ←
作った
– cookpad/gradle-android-sdk-manager
– JakeWharton/sdk-manager-plugin
● CI だけでなく手元で開発する際にも便利。
Windows ユーザーへ朗報
build.gradle が UTF-8 で解釈される
● Gradle 1.x 系では、build.gradle の文字エン
コーディングはデフォルトエンコーディングで解釈
● UTF-8 で書かれた build.gradle を日本語
Windows 上の Gradle で解釈させると…!!
● Gradle 2.0 では常に UTF-8 として解釈される!
– http://vcs.hatenablog.com/entry/20131227/
1388097109
おわりに
● Gradle + Android Gradle plugin でビルド環境
のカスタマイズがしやすくなった
● AAR フォーマットができてライブラリ公開がやりや
すくなった
● 便利プラグインや便利ライブラリを作って公開した
りしてコミュニティを盛り上げていきたいですね!

Mais conteúdo relacionado

Mais procurados

Jenkinsを用いたAndroidアプリビルド作業効率化
Jenkinsを用いたAndroidアプリビルド作業効率化Jenkinsを用いたAndroidアプリビルド作業効率化
Jenkinsを用いたAndroidアプリビルド作業効率化
Kenichi Kambara
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
Yohei Fushii
 

Mais procurados (20)

お気に入り拡張機能
お気に入り拡張機能お気に入り拡張機能
お気に入り拡張機能
 
Jenkinsを用いたAndroidアプリビルド作業効率化
Jenkinsを用いたAndroidアプリビルド作業効率化Jenkinsを用いたAndroidアプリビルド作業効率化
Jenkinsを用いたAndroidアプリビルド作業効率化
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
VS Code新機能紹介 2020-2021
VS Code新機能紹介2020-2021VS Code新機能紹介2020-2021
VS Code新機能紹介 2020-2021
 
Android App Development with Gradle & Android Studio
Android App Development with Gradle & Android StudioAndroid App Development with Gradle & Android Studio
Android App Development with Gradle & Android Studio
 
GitとCIとかチャットとかをオンプレで運用する話
GitとCIとかチャットとかをオンプレで運用する話GitとCIとかチャットとかをオンプレで運用する話
GitとCIとかチャットとかをオンプレで運用する話
 
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
 
今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう
 
Bicep + VS Code で楽々Azure Deploy
Bicep + VS Code で楽々Azure DeployBicep + VS Code で楽々Azure Deploy
Bicep + VS Code で楽々Azure Deploy
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
 
Javaユーザに贈るJenkins 25のTips
Javaユーザに贈るJenkins 25のTipsJavaユーザに贈るJenkins 25のTips
Javaユーザに贈るJenkins 25のTips
 
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 ...
 
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
 
【BS2】.NET 6 最新アップデート
【BS2】.NET 6 最新アップデート【BS2】.NET 6 最新アップデート
【BS2】.NET 6 最新アップデート
 
ClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろうClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろう
 
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介 【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
 
Ciじゃない方のJenkins
Ciじゃない方のJenkinsCiじゃない方のJenkins
Ciじゃない方のJenkins
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
 
高速!Clojure Web 開発入門
高速!Clojure Web 開発入門高速!Clojure Web 開発入門
高速!Clojure Web 開発入門
 
.NET Core時代のCI/CD
.NET Core時代のCI/CD.NET Core時代のCI/CD
.NET Core時代のCI/CD
 

Destaque

Flower Fields Disease Control Chart
Flower Fields Disease Control ChartFlower Fields Disease Control Chart
Flower Fields Disease Control Chart
CherylAnn Crysler
 
オープンソースカンファレンス2012大分資料
オープンソースカンファレンス2012大分資料オープンソースカンファレンス2012大分資料
オープンソースカンファレンス2012大分資料
俊之 渡邊
 
Giao an hoa hoc 11 nang cao tron bo
Giao an hoa hoc 11 nang cao tron boGiao an hoa hoc 11 nang cao tron bo
Giao an hoa hoc 11 nang cao tron bo
Hue Bui
 
Spring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsugSpring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsug
Toshiaki Maki
 

Destaque (17)

LESS楽しいれす(^q^)
LESS楽しいれす(^q^) LESS楽しいれす(^q^)
LESS楽しいれす(^q^)
 
Flower Fields Disease Control Chart
Flower Fields Disease Control ChartFlower Fields Disease Control Chart
Flower Fields Disease Control Chart
 
オープンソースカンファレンス2012大分資料
オープンソースカンファレンス2012大分資料オープンソースカンファレンス2012大分資料
オープンソースカンファレンス2012大分資料
 
FACEBOOK FAN PAGE TIPS AND TRICKS – PART 1
FACEBOOK FAN PAGE  TIPS  AND  TRICKS – PART 1 FACEBOOK FAN PAGE  TIPS  AND  TRICKS – PART 1
FACEBOOK FAN PAGE TIPS AND TRICKS – PART 1
 
WordBench大分第二回勉強会資料
WordBench大分第二回勉強会資料WordBench大分第二回勉強会資料
WordBench大分第二回勉強会資料
 
Inspirational Design Portfolio
Inspirational Design PortfolioInspirational Design Portfolio
Inspirational Design Portfolio
 
Social Media Marketing
Social Media MarketingSocial Media Marketing
Social Media Marketing
 
Rhomania, Madness Presentation
Rhomania, Madness Presentation Rhomania, Madness Presentation
Rhomania, Madness Presentation
 
Web Design Terms
Web Design TermsWeb Design Terms
Web Design Terms
 
おおいたIT人材塾プレゼン大会資料20141206
おおいたIT人材塾プレゼン大会資料20141206おおいたIT人材塾プレゼン大会資料20141206
おおいたIT人材塾プレゼン大会資料20141206
 
GIF と LZW 圧縮と GifWriter.js
GIF と LZW 圧縮と GifWriter.jsGIF と LZW 圧縮と GifWriter.js
GIF と LZW 圧縮と GifWriter.js
 
Giao an hoa hoc 11 nang cao tron bo
Giao an hoa hoc 11 nang cao tron boGiao an hoa hoc 11 nang cao tron bo
Giao an hoa hoc 11 nang cao tron bo
 
OSC2015大分 Scratch資料
OSC2015大分 Scratch資料OSC2015大分 Scratch資料
OSC2015大分 Scratch資料
 
CREATING BLOG PROFITS WITH SIMPLE METHODS
CREATING BLOG PROFITS WITH SIMPLE METHODSCREATING BLOG PROFITS WITH SIMPLE METHODS
CREATING BLOG PROFITS WITH SIMPLE METHODS
 
激熱プラグインCustom Field SuiteとWordPress Front-end Editorをさわってみよう!
激熱プラグインCustom Field SuiteとWordPress Front-end Editorをさわってみよう!激熱プラグインCustom Field SuiteとWordPress Front-end Editorをさわってみよう!
激熱プラグインCustom Field SuiteとWordPress Front-end Editorをさわってみよう!
 
Windows ストアアプリのつくりかた (JS + HTML + CSS)
Windows ストアアプリのつくりかた (JS + HTML + CSS)Windows ストアアプリのつくりかた (JS + HTML + CSS)
Windows ストアアプリのつくりかた (JS + HTML + CSS)
 
Spring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsugSpring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsug
 

Semelhante a Android アプリ開発における Gradle ビルドシステム

Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
Nobuhiro Sue
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradle
Nobuhiro Sue
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)
masanori kataoka
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
kimukou_26 Kimukou
 

Semelhante a Android アプリ開発における Gradle ビルドシステム (20)

Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradle
 
Gradle handson
Gradle handsonGradle handson
Gradle handson
 
G * magazine 0
G * magazine 0G * magazine 0
G * magazine 0
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)
 
Gradleプラグインを作成してみた
Gradleプラグインを作成してみたGradleプラグインを作成してみた
Gradleプラグインを作成してみた
 
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
 
どっちの 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の魅力
 
Mvc conf session_2_shibamura
Mvc conf session_2_shibamuraMvc conf session_2_shibamura
Mvc conf session_2_shibamura
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
 
GBDC 勉強会 #2 Android Studio 実践レポート
GBDC 勉強会 #2 Android Studio 実践レポートGBDC 勉強会 #2 Android Studio 実践レポート
GBDC 勉強会 #2 Android Studio 実践レポート
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
 
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
 
Azure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しよう
Azure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しようAzure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しよう
Azure DevOpsとVisual Studio App CenterをモバイルアプリのCI/CDに活用しよう
 
Grails 2.0.0.M1の話
Grails 2.0.0.M1の話 Grails 2.0.0.M1の話
Grails 2.0.0.M1の話
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
 
Azure serverless!! azure functionsでサーバーを意識しない開発
Azure serverless!! azure functionsでサーバーを意識しない開発Azure serverless!! azure functionsでサーバーを意識しない開発
Azure serverless!! azure functionsでサーバーを意識しない開発
 
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 最新アップデート
 

Mais de Yu Nobuoka

Mais de Yu Nobuoka (6)

AndroidJUnitRunner で JUnit 4 形式のテストに移行
AndroidJUnitRunner で JUnit 4 形式のテストに移行AndroidJUnitRunner で JUnit 4 形式のテストに移行
AndroidJUnitRunner で JUnit 4 形式のテストに移行
 
Java による Web アプリケーションのプロトタイプのために最近使っている構成
Java による Web アプリケーションのプロトタイプのために最近使っている構成Java による Web アプリケーションのプロトタイプのために最近使っている構成
Java による Web アプリケーションのプロトタイプのために最近使っている構成
 
はてなにおける Android アプリのソフトウェアテスト
はてなにおける Android アプリのソフトウェアテストはてなにおける Android アプリのソフトウェアテスト
はてなにおける Android アプリのソフトウェアテスト
 
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCGUI アプリケーションにおける MVC
GUI アプリケーションにおける MVC
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
 
WebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocketWebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocket
 

Android アプリ開発における Gradle ビルドシステム

  • 1. id:nobuoka (@nobuoka) 株式会社はてな 2014-08-23 京都 Android 勉強会 2014.08 Android アプリ開発における Gradle ビルドシステム
  • 2. こんにちは、id:nobuoka です ● 普段の仕事: web サービス開発 – サーバーサイド: Perl – クライアントサイド: Web (JS)、Android アプリ (Java) ● Java 好き ● 最近は Docker 周りを調べたりしてる
  • 3. 概要 ● Gradle と Android アプリ開発 ● Gradle や Android Gradle plugin の便利機能 ● AAR パッケージの公開 ● Gradle プラグインの作り方
  • 4. Gradle と Android アプリ開発 Gradle での Android アプリのビルドをしたことがない人向け
  • 5. Gradle とは何か ● ビルドシステム – Maven とか Ant とか sbt とか Rake みたいな ● ビルド設定は Groovy による DSL で記述 ● Maven (Ivy) による依存管理が組み込まれている ● Java 界隈で主に使われてる – Java に限ったビルドシステムではない – 最近は C/C++/Objective-C のサポートが向上
  • 6. Gradle ビルドスクリプトの例 // build.gradle apply plugin: 'com.android.application' android { compileSdkVersion 19 buildToolsVersion "20.0.0" defaultConfig { applicationId "info.vividcode.android.app.seminar.kyotoandroid" minSdkVersion 10 targetSdkVersion 19 versionCode 1 versionName "1.0" } }
  • 7. Gradle の利点と欠点 ● Groovy の処理を書ける → 自由度が高い ● プラグインも作りやすい! ● Maven リポジトリが使える ● Groovy に慣れるまで難しい – DSL として理解できても Groovy コードとして読めな い – API ドキュメントを見ても処理の流れがわかりづらい
  • 8. Android Studio で Gradle 採用 ● 最近ベータ版がリリースされた ● 嫌でも Gradle のことを知る必要がある ● IDE 上でのビルドが Gradle に統合されている – IDE 上でもコマンドライン上でも同じ仕組みでビルド – CI がやりやすい
  • 9. Gradle による Android アプリのビルド ● Android Gradle plugin というプラグインでサ ポート ● Android 用ライブラリ → AAR パッケージ – リソースファイル入り JAR みたいな感じ (便利!!) Android アプリプロジェクト or Android ライブラリプロジェクト Gradle + Android Gradle plugin ビルドしたりテストしたり Android Studio コマンドライン 使う 使う
  • 10. Gradle や Android Gradle plugin の便利機能 Android アプリ開発時に知っておくとよいこと
  • 11. Gradle wrapper ● プロジェクト内に置ける Gradle コマンド (?) ● 「gradlew」、「gradlew.bat」、 「gradle/wrapper」 ● Wrapper の使用が推奨されている – Gradle がインストールされていない環境でも簡単に Gradle タスクを実行できる – Gradle のバージョンを揃えられる http://www.gradle.org/docs/current/userguide/gradle_wrapper.html
  • 12. マルチプロジェクト ● 「settings.gradle」 にプロジェクト構成を記述 ● 複数のサブプロジェクトで構成 – 大きなアプリを複数のサブプロジェクトに分けるとか – Maven リポジトリのないライブラリ (例: Volley) の コードをサブプロジェクトにするなど http://www.gradle.org/docs/current/userguide/multi_project_builds.html
  • 13. Android SDK の Maven リポジトリ ● Support library や Google Play Services の Maven リポジトリ dependencies { compile 'com.android.support:appcompat-v7:20.0.0' }
  • 14. Build Variants や Manifest Placeholder ● デバッグ時だけ機能を変化させるとかできる ● Build Variants : Build Types と Product Flavors の組 – Build types : Release build, debug build, など – Product Flavors : 同じプロジェクトから複数アプリ ● AndroidManifest.xml 中の文字列を build.gradle 側で指定できる – http://ninjinkun.hatenablog.com/entry/2014 /08/18/102849 http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
  • 15. buildTypes { release { buildConfigField "boolean", "XXX_DEBUG", "false" } debug { buildConfigField "boolean", "XXX_DEBUG", "true" } } BuildConfig のプロパティをビルド時に 決定 ● ビルドタイプに応じて実行時に動作を変化させる ● 使いすぎると混乱のもとだけど
  • 17. AAR パッケージの公開 Android ライブラリを Maven リポジトリで共有する
  • 18. AAR パッケージ ● Android ライブラリプロジェクトのバイナリディスト リビューション ● classes.jar や AndroidManifest.xml やリソース ファイルなどが含まれる ● リソースファイルの名前衝突には気を付ける必要 がある (?) ● AAR は JAR と同じく Maven リポジトリに置ける http://tools.android.com/tech-docs/new-build-system/aar-format
  • 19. Maven リポジトリへのアップロード ● maven プラグインを使うのが今のところ良さそう ● 単にアップロードするだけならそれほど大変では ない – ローカル Maven リポジトリ – 社内 Maven リポジトリ
  • 20. 例: ファイルシステム上へのデプロイ apply plugin: 'com.android.library' // … Android ライブラリプロジェクトの設定いろいろ … apply plugin: 'maven' version = "1.0-SNAPSHOT" group = "org.example.android.sugoi.project" uploadArchives { repositories.mavenDeployer { repository(url: "file:test-repo") pom.artifactId = 'sugoi-library' pom.project { name 'Sugoi library' packaging 'aar' description 'This is Sugoi library' url 'http://sugoi.android.example.org/' } } } ● gradle uploadArchives
  • 21. 一般的な Maven リポジトリ ● Maven Central へのデプロイはそこそこ大変 – 手作業でやるべきことがいろいろあるし時間がかかる – 参考: http://vividcode.hatenablog.com/entry/howto/p ublish-aar-package-to-maven-central-with-grad le ● 最近だと Bintray (jCenter) が良さそう? – Android Studio のプロジェクトのひな形でも Maven Central ではなく jCenter を参照するようになってい る
  • 23. プラグインの利点 ● ビルド処理を再利用可能な部品にパッケージ化 ● 多くのプロジェクトから利用できる ● 他の人との共有も簡単 ● Groovy でも書けるし Java でも Scala でも書ける – 個人的には Java で書くと理解しやすい
  • 24. プロジェクト固有の簡単なプラグイン ● Plugin<Project> インターフェイスを実装したクラ ス ● ビルドスクリプト中に定義して apply apply plugin: GreetingPlugin class GreetingPlugin implements Plugin<Project> { void apply(Project project) { project.task('hello') << { println "Hello from the GreetingPlugin" } } } Plugin<T> : http://www.gradle.org/docs/current/javadoc/org/gradle/api/Plugin.html (http://www.gradle.org/docs/current/userguide/custom_plugins.html より) Plugin<T> : http://www.gradle.org/docs/current/javadoc/org/gradle/api/Plugin.html
  • 25. スタンドアロンのプラグインの作成 ● ビルドスクリプトの準備とメタファイルの準備 <build.gradle ファイル> dependencies { compile gradleApi() compile localGroovy() } <src/main/resources/META-INF/gradle-plugins/xxxx.properties ファイル> implementation-class=your.package.GreetingPlugin
  • 26. プラグインを使う側 ● buildscript の依存を定義しておいて apply <build.gradle ファイル> buildscript { repositories { maven { jcenter() } } dependencies { classpath group: 'your.package', name: 'xxxxplugin', version: '1.0' } } apply plugin: 'xxxx'
  • 27. Android Gradle plugin と連携する ● アプリ開発では Android Gradle plugin と連携 して動作させたいこともある ● ドキュメントは揃ってないので Android Gradle plugin の実装を読むしかない (と思う)
  • 28. 例: Android SDK のセットアップ ● ビルドスクリプト内で Android SDK の準備をする Gradle plugin。 – nobuoka/vc-gradle-android-sdk-manager ← 作った – cookpad/gradle-android-sdk-manager – JakeWharton/sdk-manager-plugin ● CI だけでなく手元で開発する際にも便利。
  • 30. build.gradle が UTF-8 で解釈される ● Gradle 1.x 系では、build.gradle の文字エン コーディングはデフォルトエンコーディングで解釈 ● UTF-8 で書かれた build.gradle を日本語 Windows 上の Gradle で解釈させると…!! ● Gradle 2.0 では常に UTF-8 として解釈される! – http://vcs.hatenablog.com/entry/20131227/ 1388097109
  • 31. おわりに ● Gradle + Android Gradle plugin でビルド環境 のカスタマイズがしやすくなった ● AAR フォーマットができてライブラリ公開がやりや すくなった ● 便利プラグインや便利ライブラリを作って公開した りしてコミュニティを盛り上げていきたいですね!