怖くないgradle設定とbazel

33
怖怖怖怖 GRADLE 怖怖怖 BAZEL 怖怖怖怖 (@USAGANIKKI)

Upload: shimada-tatsuya

Post on 09-Jan-2017

7.960 views

Category:

Engineering


1 download

TRANSCRIPT

Page 1: 怖くないGradle設定とBazel

怖くないGRADLE 設定と BAZEL嶋田達哉 (@USAGANIKKI)

Page 2: 怖くないGradle設定とBazel

目次・自己紹介

gradle• gradle とは• ビルドについて• とりあえずしておくといい設定• buildType を使った署名• productFlavors を使った設定

Bazel• Bazel のプロジェクト構成• Bazel の java プロジェクトビルド• Bazel の android プロジェクトビルド• Bazel の今後

Page 3: 怖くないGradle設定とBazel

はじめまして• 名前

嶋田達哉 (@usaganikki)ネット上では「うさがに」

• ブログうさがにっき( http://tiro105.hateblo.jp/ )

• 生息地福井県 富山県 東京➡︎ ➡︎

• 会社SI 屋から転々としてリクルート住まいカンパニーに

• 今やってることAndroid, iOS, AWS, AR とかとか

Page 4: 怖くないGradle設定とBazel

DROIDKAIGI で講演するきっかけ2015/11 某日・・・

どうせ受からんやろうし応募してみたろー(ポチー

Page 5: 怖くないGradle設定とBazel

時は過ぎ、 2015/12初頭・・・

Page 6: 怖くないGradle設定とBazel

あり

がと

うご

ざい

ます

!!

!!

!!

Page 7: 怖くないGradle設定とBazel

GRADLEGradle のコア機能とは・・・• 定型的に繰り返し行う作業を実行化するための仕組み• 自動化された処理を実行するための部品

ビルドが超得意だけど、ビルド以外でも使えるんですよ!!!

Page 8: 怖くないGradle設定とBazel

ビルド方法

初期化スクリプトinit.gradle

設定スクリプトsetting.gradle

ビルドスクリプトbuild.gradle

スクリプトファイル

プロパティファイルgradle.property

環境変数 /コマンドライン引数 src

ビルドを実行

Page 9: 怖くないGradle設定とBazel

ANDROID プロジェクトでは・・・

buildscript { repositories { jcenter() }…}allprojects { repositories { jcenter() }}task clean(type: Delete) { delete rootProject.buildDir}

apply plugin: 'com.android.application’android {…}dependencies {…}

Page 10: 怖くないGradle設定とBazel

とりあえずしておくと幸せになれる設定

Page 11: 怖くないGradle設定とBazel

とりあえずしておくと幸せになれる設定gradle.properties

# deamon で起動org.gradle.daemon=true

# java memory size 設定# Default value: -Xmx10248m -XX:MaxPermSize=256morg.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

# 並列処理モード(何か実行に条件があるらしい)org.gradle.parallel=true

# ondeamand モード 大規模プロジェクトで有効org.gradle.configureondemand=true

Page 12: 怖くないGradle設定とBazel

BUILDTYPE を使った署名signingConfigs { releaseConfig { keyAlias ’demo' keyPassword ’password' storeFile file(’demo.keystore') storePassword ’keystore' }}

buildTypes { release { signingConfig signingConfigs.releaseConfig }}

Page 13: 怖くないGradle設定とBazel

BUILDSCRIPT を使った署名android { // ... // signingConfigs apply from: 'signingConfigs/debug.gradle', to: android apply from: 'signingConfigs/release.gradle', to: android

buildTypes { debug { signingConfig signingConfigs.debug } release { signingConfig signingConfigs.release } }}

Page 14: 怖くないGradle設定とBazel

PRODUCTFLAVORS を使った設定android {… productFlavors { free { applicationId 'com.example.app.free' } pro { applicationId 'com.example.app.pro' } }}

Page 15: 怖くないGradle設定とBazel

BUILDTYPE と PRODUCTFLAVORS• buildType と productFlavors は同時に設定することが

できる・・・が同じ名前は設定できない

• 例えば・・・productFlavors debug statings release

free FreeDebug FreeStating FreeRelease

pro ProDebug ProStating ProRelease

Page 16: 怖くないGradle設定とBazel

BUILDTYPE と PRODUCTFLAVORS• AndroidStudio では Build Variants メニューから選択

Page 17: 怖くないGradle設定とBazel

BAZEL• Google が社内で使用していたビルドツールを

オープンソース版として開発をしている• 最近 Beta 版が公開され、 Android のビルドが可能に• 2016 年 12 月以降の Stable 版では Android Studio との統合という計画• gradle より構造的に記述することができ、高速らしい

12 月からよろしくね!!!!!(予定)

Page 18: 怖くないGradle設定とBazel

ところで・・・

読みましたか?

Page 19: 怖くないGradle設定とBazel
Page 20: 怖くないGradle設定とBazel

(も

う喋

るこ

と)

ない

じゃ

ん・

・・

Page 21: 怖くないGradle設定とBazel

みんなも読もう!

https://techbooster.booth.pm/items/178226

Page 22: 怖くないGradle設定とBazel

おしまい!!!!

Page 23: 怖くないGradle設定とBazel

BAZEL の構成

WORKSPACE• WORKSPACE ファイルが配置されたところが workspace

のトップディレクトリになる

• ライブラリの外部参照の依存関係の記述

BUILD• ソースコードの配置やプロジェクトの依存関係

• ライブラリの依存

Page 24: 怖くないGradle設定とBazel

BAZEL の JAVA プロジェクトビルド

├── BUILD├── WORKSPACE└── src └── main └── java └── com └── example ├── Greeting.java └── ProjectRunner.java

Page 25: 怖くないGradle設定とBazel

BAZEL の JAVA プロジェクトビルド

$ cat BUILDjava_binary( name = "my-runner", srcs = glob(["**/*.java"]), main_class = "com.example.ProjectRunner",)

BUILD ファイルで使える Functionhttp://bazel.io/docs/be/functions.html#glob

Page 26: 怖くないGradle設定とBazel

BAZEL の JAVA プロジェクトビルド

$ bazel build :my-runnerINFO: Found 1 target...Target //:my-runner up-to-date: bazel-bin/my-runner.jar bazel-bin/my-runnerINFO: Elapsed time: 15.839s, Critical Path: 4.91s

$ bazel-bin/my-runnerHi!

Page 27: 怖くないGradle設定とBazel

BAZEL の ANDROID プロジェクトビルド

公式のサンプルは非常に複雑なため、 @tomorrowkey さんのサンプルを使わせていただきます!!

https://github.com/tomorrowkey/HelloBazel

@tomorrowkey さんありがとうございます!!

Page 28: 怖くないGradle設定とBazel

BAZEL の ANDROID プロジェクトビルド├── BUILD├── HelloBazel│   └── app│   ├── proguard-rules.pro│   └── src...│   └── main│   ├── AndroidManifest.xml│   ├── java│   │   └── jp│   │   └── tomorrowkey│   │   └── android│   │   └── hellobazel│   │   └── MainActivity.java│   └── res...└── WORKSPACE

Page 29: 怖くないGradle設定とBazel

BAZEL の ANDROID プロジェクトビルド

$ cat WORKSPACEandroid_sdk_repository( name="androidsdk", path="/Users/01011818/Library/Android/sdk", api_level = 23, build_tools_version="23.0.2")

Page 30: 怖くないGradle設定とBazel

BAZEL の ANDROID プロジェクトビルド

$ cat BUILD android_binary ( name = "app", srcs = glob(["HelloBazel/app/src/main/java/**/*.java"]), custom_package = "jp.tomorrowkey.android.hellobazel", manifest = "HelloBazel/app/src/main/AndroidManifest.xml", resource_files = glob(["HelloBazel/app/src/main/res/**"]), deps = [ "@androidsdk//:appcompat_v4", "@androidsdk//:appcompat_v7", "@androidsdk//:appcompat_v7_import", ],)

Page 31: 怖くないGradle設定とBazel

BAZEL の ANDROID プロジェクトビルド$ bazel build :appINFO: Found 1 target...INFO: From Generating unsigned apk:

THIS TOOL IS DEPRECATED. See --help for more information.

INFO: From Generating signed apk:

THIS TOOL IS DEPRECATED. See --help for more information.

Target //:app up-to-date: bazel-bin/app_deploy.jar bazel-bin/app_unsigned.apk bazel-bin/app.apkINFO: Elapsed time: 33.836s, Critical Path: 30.55s

$ bazel mobile-install :appで端末に install もできる

Page 32: 怖くないGradle設定とBazel

BAZEL の ANDROID プロジェクトビルド

• WORKSPACE 内に maven_jar を追加することで maven リポジトリを参照することも可能

• 自分で作った aar ライブラリを参照することも可能

• 思ったより早くなかった!!

Page 33: 怖くないGradle設定とBazel

BAZEL の今後