41
Dominik Helleberg | inovex GmbH Moderne Android Builds mit Gradle

Moderne Android Builds mit Gradle

Embed Size (px)

DESCRIPTION

Das neue Android Build System ist angetreten, um viele Probleme der Vergangenheit zu lösen. Mit Gradle als Basis, einem komplexen Plug-in speziell für Android und einer tiefen Integration in Android Studio kann man schon von einem "Next Generation" Build-System sprechen. Doch was bringt die neue Technologie in der Praxis, und wie kann ich die neuen Features in meinem Entwicklungsprozess nutzen? Wir zeigen praktische Beispiele vom Projekt-Setup über den Build-Prozess und Konfigurationsmanagement bis hin zur CI-Integration sowie Erfahrungen mit der Migration existierender Projekte. Source Code: https://github.com/dhelleberg/androidgradlesample

Citation preview

Page 1: Moderne Android Builds mit Gradle

Dominik Helleberg | inovex GmbH

Moderne Android Builds mit Gradle

Page 2: Moderne Android Builds mit Gradle

„Gradle is the most advanced, next generation build system“ Hans Dockter

„You should really give it a try (not only for android)“ Dominik Helleberg

Page 3: Moderne Android Builds mit Gradle

Dominik Helleberg

Mobile Development

Android / Embedded

Tools

http://dominik-helleberg.de/+

Page 4: Moderne Android Builds mit Gradle

Android Studio !!!

Gradle + !Android Plugin!

or !„The new build system“

The new Dream Team !

Page 5: Moderne Android Builds mit Gradle

new? !Oktober !2012

Mai !2013

https://plus.google.com/u/0/+XavierDucrohet/posts/XnW7t9XJCMJ !

Page 6: Moderne Android Builds mit Gradle

ready? !Version !0.10.+

Version !0.5.8

Page 7: Moderne Android Builds mit Gradle

Android PlugIn

Android Designer

Android PlugIn

Android DDMS

Android Builder .properties

build.xml

Page 8: Moderne Android Builds mit Gradle

Android PlugIn

Android Designer

Android PlugIn

Android Gradle Adapter .properties

build.gradle

Page 9: Moderne Android Builds mit Gradle
Page 10: Moderne Android Builds mit Gradle

Best of ANT / Maven / GANT / Ivy !Based on Groovy Scripts !Expressive DSL !(Flexible) Convention over Configuration!Easy to extend!!„Make the impossible possible, make the possible easy and make the easy elegant.” !!!!

Page 11: Moderne Android Builds mit Gradle

„hello groovy & gradle“ !!

Code !

Page 12: Moderne Android Builds mit Gradle

dist compile

compileTest test

3 Phasen: !Initialization!Configuration!Execution!

!

Page 13: Moderne Android Builds mit Gradle
Page 14: Moderne Android Builds mit Gradle

apply plugin: 'android' !!android { ! compileSdkVersion 19 ! buildToolsVersion "19.0.3" !! defaultConfig { ! minSdkVersion 7 ! targetSdkVersion 19 ! versionCode 1 ! versionName "1.0" ! } ! buildTypes { ! release { ! runProguard false! proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' ! } ! } !} !!dependencies { ! compile 'com.android.support:appcompat-v7:+' ! compile fileTree(dir: 'libs', include: ['*.jar', '*.aar']) !} !!!!!

Page 15: Moderne Android Builds mit Gradle

Android PlugIn 0.10.+ !

Core Features !!•  Konfigurierbare Manifest Attribute !•  Build Varianten !•  Tests integriert !•  BuildConfig konfigurierbar !•  Signierung konfigurierbar !•  Tools versioniert!•  Multiproject-Support !•  Dependency Management !•  Binary Lib Format (AAR) !•  Lint integration!•  Dex + AAPT Options !

apply plugin: 'android' !!android { ! compileSdkVersion 19 ! buildToolsVersion "19.0.3" !! defaultConfig { ! minSdkVersion 7 ! targetSdkVersion 19 ! versionCode 1 ! versionName "1.0" ! } ! buildTypes { ! release { ! runProguard false! proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' ! } ! } !} !!dependencies { ! compile 'com.android.support:appcompat-v7:+' ! compile fileTree(dir: 'libs', include: ['*.jar', '*.aar']) !} !!!!!

Page 16: Moderne Android Builds mit Gradle

Demo PlugIn!

Build targets!Variants!

!Code !

Android PlugIn 0.10.+ !

Page 17: Moderne Android Builds mit Gradle

Extension: !Automatische Versions-Verwaltung !

Ziel: !"Version Code !"Version Name !"- einfach konfigurierbar halten !"- aus git-tags extrahieren und in gradle setzen !"!"Build-Informationen in der App verfügbar machen: !" "- Build-HOST !" "- Build-TIME !

!!

Android PlugIn 0.10.+ !

Page 18: Moderne Android Builds mit Gradle

Automatische Versions-Verwaltung !

Schritt 1: !!Build-Informationen in App anzeigen !!

" "Build-Time !" "Build-Host !"!

über BuildConfig!

Android PlugIn 0.10.+ !

Page 19: Moderne Android Builds mit Gradle

Automatische Versions-Verwaltung !

Schritt 2: !!Konfiguration von !!

" "Version Code !"!

über eine Property-Datei !

Android PlugIn 0.10.+ !

Page 20: Moderne Android Builds mit Gradle

Automatische Versions-Verwaltung !

Schritt 3: !!Berechnung von versionCode und versionName!!

"version=2.1.3 !!

"versionCode=2130 !"VersionName=2.1.3 !

Android PlugIn 0.10.+ !

Page 21: Moderne Android Builds mit Gradle

Automatische Versions-Verwaltung !

Schritt 4: !!Versionsnummer aus git Tag auslesen !!

" "git-Tag „2.1.3“ !!

Android PlugIn 0.10.+ !

Page 22: Moderne Android Builds mit Gradle

Automatische Versions-Verwaltung !

Schritt 5: !!Versionsnummer + App Name dem APK hinzufügen !!<name>-<sub-name>-<buildType>-<version>.apk!

Android PlugIn 0.10.+ !

Page 23: Moderne Android Builds mit Gradle

Automatische Versions-Verwaltung !

Modularisieren: !!inside build-scripts!!buildSrc/ !!external build-scripts (local file or http) !apply from:'https://raw.github.com/../all-jars.gradle‘ !apply from:'~/.gradle/RobertFischer/gradle-scripts/all-jars.gradle‘ !!via dependencies / Repository !

Android PlugIn 0.10.+ !

Page 24: Moderne Android Builds mit Gradle
Page 25: Moderne Android Builds mit Gradle

Key Features !!•  Build!•  runTests (emulator / device / cloud) !•  Code Coverage!•  Lint!•  Monkey!•  ... !

Page 26: Moderne Android Builds mit Gradle
Page 27: Moderne Android Builds mit Gradle

Key Features !Build Variants!

BuildTypes!ProductFlavour!

debug!

UAT !

release!

int!

ext !

Builds!int-debug!ext-debug!

int-UAT !ext-UAT !

int-release !ext-release !

Page 28: Moderne Android Builds mit Gradle

Key Features !Build Variants!

Demo Android Studio !

Page 29: Moderne Android Builds mit Gradle

Key Features !The „old“ World !

Page 30: Moderne Android Builds mit Gradle

Key Features !Build Variants Directory structure!  

 src/  

 int/      java/      res/    ext/      java/      res/    main/      java/      res/  

   androidTest/                java/      

Page 31: Moderne Android Builds mit Gradle

Key Features !

•  Layout Editor !

•  IntelliJ Features !

•  Improved Checks !

•  Improved UI !

•  ... !!!!

Page 32: Moderne Android Builds mit Gradle

Status Quo !

•  Mostly stable but expect breaking changes!

•  Documentation poor!

•  Many examples might not work (old versions) !

•  Features are worth considering it

•  Mostly stable!

•  Unpredictable updates!

•  Tools & Features missing!

•  IntelliJ EAP Release

Page 33: Moderne Android Builds mit Gradle

Empfehlung !

•  „I‘m feeling lucky“ !

•  Multiproject-Builds!

•  Safe side: stay with eclipse (but maybe use gradle) !

•  Gradle will be mandatory / Android Studio is optional !

!!

Page 34: Moderne Android Builds mit Gradle

Tipps + Tricks !

http://www.manning.com/muschko/

Page 35: Moderne Android Builds mit Gradle

Tipps + Tricks !Gradle daemon

$>  cat  .gradle/gradle.properties  

     org.gradle.daemon=true  

     org.gradle.jvmargs=-­‐Xmx2048m    

                                           -­‐XX:MaxPermSize=512m  

       -­‐Dfile.encoding=UTF-­‐8  

Show dependencies

$>  gradle  dependencies  

 

Page 36: Moderne Android Builds mit Gradle

Tipps + Tricks !Gradle Init Scripts $>  cat  .gradle/init.gradle  initscript  {          allprojects  {  

               apply  plugin:  'maven’                  repositories  {                          maven  {                                  url  =  "http://archiva.inovex.de:8080/archiva/repository/snapshots/"                          }                  }          }  }  

Page 37: Moderne Android Builds mit Gradle

Tipps + Tricks !Gradle Wrapper

   ./gradlew    Instead of    gradle      Initialize with: task  wrapper  (type:  Wrapper)  {  

 gradleVersion  =  “1.11”  }        

Page 38: Moderne Android Builds mit Gradle

Tipps + Tricks !Android-SDK-PlugIn - Like the wrapper but for the SDK

   dependencies  {            classpath  'com.android.tools.build:gradle:0.10.+'            classpath  'com.jakewharton.sdkmanager:gradle-­‐plugin:0.9.1‘    }      apply  plugin:  'android-­‐sdk-­‐manager’    apply  plugin:  'android'    

Page 39: Moderne Android Builds mit Gradle

$>  gradle  assembleDebug  -­‐-­‐profile  

Page 40: Moderne Android Builds mit Gradle

DANKE!

Page 41: Moderne Android Builds mit Gradle

„Gradle is the most advanced, next generation build system“ Hans Dockter

„You should really give it a try (not only for android)“ Dominik Helleberg