moderne android builds mit gradle

41
Dominik Helleberg | inovex GmbH Moderne Android Builds mit Gradle

Upload: inovex-gmbh

Post on 02-Jul-2015

216 views

Category:

Software


3 download

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

TRANSCRIPT

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