SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
Report
Makoto Yamazaki
Follow
Chief Technology Officer at uPhyca Inc.
Apr. 24, 2015
•
0 likes
•
22,647 views
1
of
23
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
Apr. 24, 2015
•
0 likes
•
22,647 views
Download Now
Download to read offline
Report
Technology
Makoto Yamazaki
Follow
Chief Technology Officer at uPhyca Inc.
Recommended
絶対落ちないアプリの作り方
Fumihiko Shiroyama
52.8K views
•
124 slides
AndroidLint #DroidKaigi
Yukiya Nakagawa
16.6K views
•
89 slides
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
Yu Nobuoka
15K views
•
71 slides
DroidKaigi2016 windows環境での効率的なアプリ開発手法
tkawashita
8.9K views
•
45 slides
Android Dev Tools Knowledge
Shinobu Okano
12.3K views
•
71 slides
AndroidStudioはじめました ~Gradle編~
Yabata Tomomitsu
5K views
•
44 slides
More Related Content
What's hot
Go MobileでAndroidアプリ開発
Takuya Ueda
32.7K views
•
79 slides
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
Masataka Kono
8.6K views
•
66 slides
ネットワークの切り替えを感知する方法
Keisuke Yamaguchi
5.1K views
•
13 slides
パーミッションモデルの過渡期への対応
ak_shio_555
10.2K views
•
40 slides
Androidの新ビルドシステム
l_b__
19.5K views
•
26 slides
Eclipseを使ったandroid nativeデバッグ
l_b__
2.9K views
•
61 slides
What's hot
(20)
Go MobileでAndroidアプリ開発
Takuya Ueda
•
32.7K views
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
Masataka Kono
•
8.6K views
ネットワークの切り替えを感知する方法
Keisuke Yamaguchi
•
5.1K views
パーミッションモデルの過渡期への対応
ak_shio_555
•
10.2K views
Androidの新ビルドシステム
l_b__
•
19.5K views
Eclipseを使ったandroid nativeデバッグ
l_b__
•
2.9K views
ABS2015 のセッション紹介
l_b__
•
1.6K views
Android Studioの魅力
Keiji Ariyama
•
15.1K views
Jenkinsを用いたAndroidアプリビルド作業効率化
Kenichi Kambara
•
4.8K views
View Customize Pluginで出来ること
onozaty
•
51.3K views
僕がAndroid開発する時にちょっと便利だと思うtips
Masataka Kono
•
3.1K views
Android Studio開発講座
Keiji Ariyama
•
3.6K views
用途に合わせたアニメーションの実装方法
Takao Sumitomo
•
18K views
Yapf2013
l_b__
•
907 views
【ヒカ☆ラボ】 dely株式会社 梅森 翔氏 登壇資料 20171121
leverages_event
•
2.4K views
NPAPIを使ったandroid標準ブラウザの拡張方法
Naruto TAKAHASHI
•
4.1K views
go.mobile で Android 開発
Hiroshi Kurokawa
•
14.3K views
Write slides and books in VSCode + Markdown
ロフト くん
•
734 views
2015年のAndroidアプリ開発入門 - ABCD 2015 Kanazawa
Keiji Ariyama
•
2K views
Fuchsia概略その1
l_b__
•
6.1K views
Viewers also liked
AndroidとSELinux
android sola
32.8K views
•
80 slides
Android学ぶを君へ。生き抜くためのナレッジ共有
Shinobu Okano
61.2K views
•
160 slides
マテリアルデザインを用いたデザインリニューアル [フリル編]
YUKI YAMAGUCHI
93.7K views
•
88 slides
僕らのデータ同期プラクティス
Yukiya Nakagawa
24.2K views
•
40 slides
Droid kaigiプレゼン
Suguru Oho
23K views
•
56 slides
進化するArt
Takuya Matsunaga
21K views
•
33 slides
Viewers also liked
(20)
AndroidとSELinux
android sola
•
32.8K views
Android学ぶを君へ。生き抜くためのナレッジ共有
Shinobu Okano
•
61.2K views
マテリアルデザインを用いたデザインリニューアル [フリル編]
YUKI YAMAGUCHI
•
93.7K views
僕らのデータ同期プラクティス
Yukiya Nakagawa
•
24.2K views
Droid kaigiプレゼン
Suguru Oho
•
23K views
進化するArt
Takuya Matsunaga
•
21K views
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Yuki Anzai
•
52.2K views
あるゲームアプリケーションの構成とアップデートサイクル
Kentaro Iizuka
•
18K views
開発を効率的に進めるられるまでの道程
Takao Sumitomo
•
27.4K views
CardboardのUXをカメラで向上する (droidkaigi 2015/04)
Kenichi Takahashi
•
11.3K views
DroidKaigi - Welcome talk
Masahiro Hidaka
•
11.2K views
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
Yukiya Nakagawa
•
25.1K views
怖くないGradle設定とBazel
shimada tatsuya
•
11.4K views
明日から使えるRxjava頻出パターン (Droid kaigi 2016)
Kazuki Yoshida
•
25.8K views
Android lint-srp-practice
cch-robo
•
7.9K views
全てSになる -RxJavaとLWSを持ち込む楽しさ-
Ryutaro Miyashita
•
5.6K views
DroidKaigi 2017 welcometalk DAY02
Masahiro Hidaka
•
2.1K views
Workshop: Docker on Elastic Beanstalk
輝 子安
•
1.4K views
機械学習チュートリアル@Jubatus Casual Talks
Yuya Unno
•
735.3K views
AWSでアプリ開発するなら 知っておくべこと
Keisuke Nishitani
•
22.8K views
Similar to 20150425 DroidKaigi つかえるGradleプロジェクトの作り方
Android App Development with Gradle & Android Studio
Soichiro Kashima
3.2K views
•
59 slides
Google I/O 2013 報告会 Android Studio と Gradle
Keishin Yokomaku
7.1K views
•
37 slides
Gradleプラグインを作成してみた
shinya sakemoto
2.6K views
•
16 slides
Groovy base gradle_20130309
Nobuhiro Sue
2.3K views
•
24 slides
Android アプリ開発における Gradle ビルドシステム
Yu Nobuoka
7.5K views
•
31 slides
OpenShiftでJBoss EAP構築
Daein Park
454 views
•
55 slides
Similar to 20150425 DroidKaigi つかえるGradleプロジェクトの作り方
(20)
Android App Development with Gradle & Android Studio
Soichiro Kashima
•
3.2K views
Google I/O 2013 報告会 Android Studio と Gradle
Keishin Yokomaku
•
7.1K views
Gradleプラグインを作成してみた
shinya sakemoto
•
2.6K views
Groovy base gradle_20130309
Nobuhiro Sue
•
2.3K views
Android アプリ開発における Gradle ビルドシステム
Yu Nobuoka
•
7.5K views
OpenShiftでJBoss EAP構築
Daein Park
•
454 views
Gws 20130315 gradle_handson
Nobuhiro Sue
•
3.8K views
jQuery と MVC で実践する標準志向 Web 開発
Akira Inoue
•
1.9K views
Gws 20120521 gradle
Nobuhiro Sue
•
1.6K views
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Toshiyuki Ienaga
•
81 views
日本Androidの会のハンズオンセミナー資料(20130315)
eijikushida
•
1.2K views
[DevSummit2013S]Android_Multi-Version_Multi-Device
Kenichi Kambara
•
1.9K views
VSCodeで始めるAzure Static Web Apps開発
Yuta Matsumura
•
972 views
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
Kazuhiro Hara
•
12.1K views
G * magazine 0
Tsuyoshi Yamamoto
•
1.7K views
Android test tutorial
Kazuaki Ueda
•
1K views
sveltekit-ja.pdf
ssuser65180a
•
468 views
App Service の DevOps と Visual Studio Team Services 最新アップデート
Microsoft Azure Japan
•
903 views
はじめてのAndroid Things
Akira Sasaki
•
2.4K views
Gradle布教活動
Nemoto Yusuke
•
2K views
More from Makoto Yamazaki
Custom lintcheckをつくろう
Makoto Yamazaki
1.4K views
•
19 slides
20120516 第7回ウフィカ社内ハンズオン Git基礎
Makoto Yamazaki
1.5K views
•
19 slides
ICS ホットトピック
Makoto Yamazaki
1.3K views
•
16 slides
DevQuiz 2011 の模範解答 Android編
Makoto Yamazaki
1.3K views
•
17 slides
USB Host APIで遊んでみた
Makoto Yamazaki
8.2K views
•
22 slides
20110619 live view ideathon_logcatonliveview
Makoto Yamazaki
669 views
•
21 slides
More from Makoto Yamazaki
(13)
Custom lintcheckをつくろう
Makoto Yamazaki
•
1.4K views
20120516 第7回ウフィカ社内ハンズオン Git基礎
Makoto Yamazaki
•
1.5K views
ICS ホットトピック
Makoto Yamazaki
•
1.3K views
DevQuiz 2011 の模範解答 Android編
Makoto Yamazaki
•
1.3K views
USB Host APIで遊んでみた
Makoto Yamazaki
•
8.2K views
20110619 live view ideathon_logcatonliveview
Makoto Yamazaki
•
669 views
I/O 2011 報告会 ADKで遊んでみた
Makoto Yamazaki
•
1.9K views
ぐだ生 Java入門第三回(文字コードの話)(Keynote版)
Makoto Yamazaki
•
1.2K views
ぐだ生 Java入門第ニ回(synchronized and lock)
Makoto Yamazaki
•
819 views
ぐだ生 Java入門第ニ回(synchronized and lock)
Makoto Yamazaki
•
831 views
ぐだ生 Java入門第一回(equals hash code_tostring)
Makoto Yamazaki
•
1.4K views
20110326 ネットプリントの紹介
Makoto Yamazaki
•
664 views
20110109 abc2010w gingerbread_api_storage
Makoto Yamazaki
•
590 views
Recently uploaded
インフラチームとCCoEの関係.pptx
ssuser5c7ee4
20 views
•
18 slides
テスト自動化.pdf
ssuserf8ea02
29 views
•
26 slides
遠隔お酌IoTLT2309.pptx
Yoshiaki Ito
145 views
•
12 slides
CCoE実践者コミュニティ#1_CCoEが進めるセキュリティカイゼンの旅.pptx
Tomoaki Tada
57 views
•
20 slides
ヒアラブルデバイスにおける音漏れ信号を用いた空中ジェスチャ認識
sugiuralab
5 views
•
1 slide
磁石内臓イヤリングによる磁力変化を利用したジェスチャ識別
sugiuralab
7 views
•
1 slide
Recently uploaded
(14)
インフラチームとCCoEの関係.pptx
ssuser5c7ee4
•
20 views
テスト自動化.pdf
ssuserf8ea02
•
29 views
遠隔お酌IoTLT2309.pptx
Yoshiaki Ito
•
145 views
CCoE実践者コミュニティ#1_CCoEが進めるセキュリティカイゼンの旅.pptx
Tomoaki Tada
•
57 views
ヒアラブルデバイスにおける音漏れ信号を用いた空中ジェスチャ認識
sugiuralab
•
5 views
磁石内臓イヤリングによる磁力変化を利用したジェスチャ識別
sugiuralab
•
7 views
CatBoost on GPU のひみつ
Takuji Tahara
•
548 views
IGDA Japan SIG Audio #20-1 室内・野外でのマイク収録と整音.pdf
IGDA Japan SIG-Audio
•
115 views
拡散する画像生成.pdf
NTTDOCOMO-ServiceInnovation
•
44 views
2023情報処理学会関西支部大会-G12.pdf
KoseiShimoda1
•
7 views
GraphQLはどんな時に使うか
Yutaka Tachibana
•
14 views
20230921_IoTLT_vol103_kitazaki_v1.pdf
Ayachika Kitazaki
•
164 views
画像生成AIの問題点
iPride Co., Ltd.
•
10 views
MLOps Course Slides_JP(配布用).pdf
Yuya Yamamoto
•
118 views
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
1.
つかえるGradleプロジェクトの作り方 2015/4/25 DroidKaigi 山 誠
(@zaki50)
2.
自己紹介 • YAMAZAKI Makoto
(@zaki50) • 株式会社 uPhyca 所属
3.
Gradleとは • Antのようなあらゆる目的に使用できる汎用ビルドツール • Mavenのような規約によるビルドフレームワーク •
マルチプロジェクトをサポート • Ivyベースの強力な依存管理 • Maven/Ivyリポジトリのサポート • Antタスクが使用可能 • Groovyベースのビルドスクリプト http://gradle.monochromeroad.com/docs/userguide/introduction.html
4.
プロジェクト構成
5.
モジュールを追加
6.
build.grade buildscript { repositories { jcenter() } dependencies
{ classpath 'com.android.tools.build:gradle:1.1.0' } } allprojects { repositories { jcenter() } }
7.
app/build.gradle apply plugin: 'com.android.application' android
{ compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "com.example.myapplication" minSdkVersion 9 targetSdkVersion 22 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.1.0' }
8.
ポイント • build.gradleのあるディレクトリがプロジェクト • build.grade
は Groovyスクリプト • {} はクロージャー • 項目の設定はメソッド呼び出し
9.
最初からできること • デバッグビルド • リリースビルド(署名なし)
10.
設定するとできること • buildToolsVersion等の一元管理 • デバッグビルド用の証明書をプロジェクトに含めて共有 •
リリース用apkへの署名 • リリース署名設定の外出し • バージョンコード設定の自動化 • git hashをプログラムに埋め込む • アプリプロジェクトとライブラリプロジェクトのdebug連動 • ビルドサーバーでのビルドの高速化
11.
プロジェクト作成 ∼プロジェクトの作成とモジュールの追加∼
12.
buildToolsVersion等の一元管理 buildscript { … } allprojects { … } project.ext
{ compileSdkVersion = 22 buildToolsVersion = '22.0.1' } /build.gradle /app/build.gradle apply plugin: 'com.android.application' android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion defaultConfig { … } buildTypes { … } }
13.
デバッグビルド用の証明書を共有 apply plugin: 'com.android.application' android
{ … signingConfigs { debug { storeFile rootProject.file(‘./debug.keystore’) } } buildTypes { … } … } /app/build.gradle
14.
リリースapkへの署名 apply plugin: 'com.android.application' android
{ … signingConfigs { release { storeFile file('/Users/zaki/DroidKaigi/release.jks') storePassword 'android' keyAlias 'release' keyPassword 'android' } debug { … } } buildTypes { release { … signingConfig signingConfigs.release } } } /app/build.gradle
15.
リリース署名設定の外出し(1) buildscript { … } allprojects { … File
propertiesFile = rootProject.file("ext.properties") if (propertiesFile.exists()) { Properties properties = new Properties() propertiesFile.withInputStream { properties.load(it) } properties.entrySet().each { project.ext.set(it.key, it.value) } } } … /build.gradle
16.
リリース署名設定の外出し(2) /app/build.gradle apply plugin: 'com.android.application' android
{ … signingConfigs { if (project.hasProperty('signingStoreFile')) { release { storeFile file(signingStoreFile) storePassword signingStorePassword keyAlias signingKeyAlias keyPassword signingKeyPassword } } … } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt'), if (project.hasProperty('signingStoreFile')) { signingConfig signingConfigs.release } } } … }
17.
バージョンコード設定の自動化 apply plugin: 'com.android.application' def
versionMajor = 1 def versionMinor = 0 def versionPatch = 0 def versionBuild = 0 android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion defaultConfig { applicationId "com.example.myapplication" minSdkVersion 9 targetSdkVersion 22 versionCode versionMajor * 10000 + versionMinor * 1000 + versionPatch * 100 + versionBuild versionName "${versionMajor}.${versionMinor}.${versionPatch}" } … } /app/build.gradle
18.
git hashをプログラムに埋め込む apply plugin:
'com.android.application' def versionMajor = 1 def versionMinor = 0 def versionPatch = 0 def versionBuild = 0 android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion defaultConfig { applicationId "com.example.myapplication" minSdkVersion 9 targetSdkVersion 22 versionCode versionMajor * 10000 + versionMinor * 1000 + versionPatch * 100 + versionBuild versionName "${versionMajor}.${versionMinor}.${versionPatch}" buildConfigField "String", "GIT_HASH", """ + 'git rev-parse --short HEAD'.execute([], project.rootDir).text.trim() + """ } … } /app/build.gradle
19.
プロジェクトのdebug連動(1) apply plugin: 'com.android.library' android
{ … defaultPublishConfig 'libRelease' publishNonDefault true … productFlavors { lib } } … /mylibrary/build.gradle
20.
プロジェクトのdebug連動(2) apply plugin: 'com.android.application' … android
{ … } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.1.0' debugCompile project(path: ':mylibrary', configuration: 'libDebug') releaseCompile project(path: ':mylibrary', configuration: 'libRelease') } /app/build.gradle
21.
ビルドサーバーでの高速化 buildscript { … } allprojects { … project.plugins.whenPluginAdded
{ plugin -> if ("com.android.build.gradle.AppPlugin".equals(plugin.class.name)) { project.android.dexOptions.preDexLibraries = rootProject.ext.preDexLibs } else if ("com.android.build.gradle.LibraryPlugin".equals(plugin.class.name)) { project.android.dexOptions.preDexLibraries = rootProject.ext.preDexLibs } } } project.ext { // CIサーバなどでは -PdisablePreDex をつける。 preDexが省略されてビルドが速くなる preDexLibs = !project.hasProperty('disablePreDex') … } /build.gradle
22.
まとめ • build.grade はスクリプトなので可能性 は無限大 •
楽をするための苦労を惜しまない • let’s hack!
23.
参考 http://tools.android.com/tech-docs/new-build-system/user-guide https://github.com/zaki50/android_gradle_template https://techbooster.booth.pm/items/75014 Android実践プログラミング 第五章 android_gradle_template Gradle Plugin
User Guide