Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

20150425 DroidKaigi つかえるGradleプロジェクトの作り方

21 628 vues

Publié le

Publié dans : Technologie
  • Soyez le premier à commenter

20150425 DroidKaigi つかえるGradleプロジェクトの作り方

  1. 1. つかえるGradleプロジェクトの作り方 2015/4/25 DroidKaigi 山 誠 (@zaki50)
  2. 2. 自己紹介 • YAMAZAKI Makoto (@zaki50) • 株式会社 uPhyca 所属
  3. 3. Gradleとは • Antのようなあらゆる目的に使用できる汎用ビルドツール • Mavenのような規約によるビルドフレームワーク • マルチプロジェクトをサポート • Ivyベースの強力な依存管理 • Maven/Ivyリポジトリのサポート • Antタスクが使用可能 • Groovyベースのビルドスクリプト http://gradle.monochromeroad.com/docs/userguide/introduction.html
  4. 4. プロジェクト構成
  5. 5. モジュールを追加
  6. 6. build.grade buildscript {
 repositories {
 jcenter()
 }
 dependencies {
 classpath 'com.android.tools.build:gradle:1.1.0'
 }
 }
 
 allprojects {
 repositories {
 jcenter()
 }
 }
  7. 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. 8. ポイント • build.gradleのあるディレクトリがプロジェクト • build.grade は Groovyスクリプト • {} はクロージャー • 項目の設定はメソッド呼び出し
  9. 9. 最初からできること • デバッグビルド • リリースビルド(署名なし)
  10. 10. 設定するとできること • buildToolsVersion等の一元管理 • デバッグビルド用の証明書をプロジェクトに含めて共有 • リリース用apkへの署名 • リリース署名設定の外出し • バージョンコード設定の自動化 • git hashをプログラムに埋め込む • アプリプロジェクトとライブラリプロジェクトのdebug連動 • ビルドサーバーでのビルドの高速化
  11. 11. プロジェクト作成 ∼プロジェクトの作成とモジュールの追加∼
  12. 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. 13. デバッグビルド用の証明書を共有 apply plugin: 'com.android.application'
 
 android { …
 signingConfigs {
 debug {
 storeFile rootProject.file(‘./debug.keystore’)
 }
 }
 buildTypes { …
 } …
 } /app/build.gradle
  14. 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. 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. 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. 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. 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. 19. プロジェクトのdebug連動(1) apply plugin: 'com.android.library'
 
 android { …
 
 defaultPublishConfig 'libRelease'
 publishNonDefault true
 …
 productFlavors {
 lib
 }
 }
 
 … /mylibrary/build.gradle
  20. 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. 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. 22. まとめ • build.grade はスクリプトなので可能性 は無限大 • 楽をするための苦労を惜しまない • let’s hack!
  23. 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

×