Download - 怖くないGradle設定とBazel
![Page 1: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/1.jpg)
怖くないGRADLE 設定と BAZEL嶋田達哉 (@USAGANIKKI)
![Page 2: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/2.jpg)
目次・自己紹介
gradle• gradle とは• ビルドについて• とりあえずしておくといい設定• buildType を使った署名• productFlavors を使った設定
Bazel• Bazel のプロジェクト構成• Bazel の java プロジェクトビルド• Bazel の android プロジェクトビルド• Bazel の今後
![Page 3: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/3.jpg)
はじめまして• 名前
嶋田達哉 (@usaganikki)ネット上では「うさがに」
• ブログうさがにっき( http://tiro105.hateblo.jp/ )
• 生息地福井県 富山県 東京➡︎ ➡︎
• 会社SI 屋から転々としてリクルート住まいカンパニーに
• 今やってることAndroid, iOS, AWS, AR とかとか
![Page 4: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/4.jpg)
DROIDKAIGI で講演するきっかけ2015/11 某日・・・
どうせ受からんやろうし応募してみたろー(ポチー
![Page 5: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/5.jpg)
時は過ぎ、 2015/12初頭・・・
![Page 6: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/6.jpg)
あり
がと
うご
ざい
ます
!!
!!
!!
!
![Page 7: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/7.jpg)
GRADLEGradle のコア機能とは・・・• 定型的に繰り返し行う作業を実行化するための仕組み• 自動化された処理を実行するための部品
ビルドが超得意だけど、ビルド以外でも使えるんですよ!!!
![Page 8: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/8.jpg)
ビルド方法
初期化スクリプトinit.gradle
設定スクリプトsetting.gradle
ビルドスクリプトbuild.gradle
スクリプトファイル
プロパティファイルgradle.property
環境変数 /コマンドライン引数 src
ビルドを実行
![Page 9: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/10.jpg)
とりあえずしておくと幸せになれる設定
![Page 11: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/11.jpg)
とりあえずしておくと幸せになれる設定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](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/12.jpg)
BUILDTYPE を使った署名signingConfigs { releaseConfig { keyAlias ’demo' keyPassword ’password' storeFile file(’demo.keystore') storePassword ’keystore' }}
buildTypes { release { signingConfig signingConfigs.releaseConfig }}
![Page 13: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/14.jpg)
PRODUCTFLAVORS を使った設定android {… productFlavors { free { applicationId 'com.example.app.free' } pro { applicationId 'com.example.app.pro' } }}
![Page 15: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/15.jpg)
BUILDTYPE と PRODUCTFLAVORS• buildType と productFlavors は同時に設定することが
できる・・・が同じ名前は設定できない
• 例えば・・・productFlavors debug statings release
free FreeDebug FreeStating FreeRelease
pro ProDebug ProStating ProRelease
![Page 16: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/16.jpg)
BUILDTYPE と PRODUCTFLAVORS• AndroidStudio では Build Variants メニューから選択
![Page 17: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/17.jpg)
BAZEL• Google が社内で使用していたビルドツールを
オープンソース版として開発をしている• 最近 Beta 版が公開され、 Android のビルドが可能に• 2016 年 12 月以降の Stable 版では Android Studio との統合という計画• gradle より構造的に記述することができ、高速らしい
12 月からよろしくね!!!!!(予定)
![Page 18: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/18.jpg)
ところで・・・
読みましたか?
![Page 19: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/19.jpg)
![Page 20: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/20.jpg)
(も
う喋
るこ
と)
ない
じゃ
ん・
・・
![Page 21: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/21.jpg)
みんなも読もう!
https://techbooster.booth.pm/items/178226
![Page 22: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/22.jpg)
おしまい!!!!
![Page 23: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/23.jpg)
BAZEL の構成
WORKSPACE• WORKSPACE ファイルが配置されたところが workspace
のトップディレクトリになる
• ライブラリの外部参照の依存関係の記述
BUILD• ソースコードの配置やプロジェクトの依存関係
• ライブラリの依存
![Page 24: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/24.jpg)
BAZEL の JAVA プロジェクトビルド
├── BUILD├── WORKSPACE└── src └── main └── java └── com └── example ├── Greeting.java └── ProjectRunner.java
![Page 25: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/27.jpg)
BAZEL の ANDROID プロジェクトビルド
公式のサンプルは非常に複雑なため、 @tomorrowkey さんのサンプルを使わせていただきます!!
https://github.com/tomorrowkey/HelloBazel
@tomorrowkey さんありがとうございます!!
![Page 28: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/28.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/29.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/31.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/32.jpg)
BAZEL の ANDROID プロジェクトビルド
• WORKSPACE 内に maven_jar を追加することで maven リポジトリを参照することも可能
• 自分で作った aar ライブラリを参照することも可能
• 思ったより早くなかった!!
![Page 33: 怖くないGradle設定とBazel](https://reader036.vdocuments.pub/reader036/viewer/2022070516/587286221a28abc7068b72b9/html5/thumbnails/33.jpg)
BAZEL の今後