Moderne Android Builds mit Gradle
-
Upload
inovex-gmbh -
Category
Software
-
view
215 -
download
3
description
Transcript of Moderne Android Builds mit Gradle
![Page 1: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/1.jpg)
Dominik Helleberg | inovex GmbH
Moderne Android Builds mit Gradle
![Page 2: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/2.jpg)
„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](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/3.jpg)
Dominik Helleberg
Mobile Development
Android / Embedded
Tools
http://dominik-helleberg.de/+
![Page 4: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/4.jpg)
Android Studio !!!
Gradle + !Android Plugin!
or !„The new build system“
The new Dream Team !
![Page 5: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/5.jpg)
new? !Oktober !2012
Mai !2013
https://plus.google.com/u/0/+XavierDucrohet/posts/XnW7t9XJCMJ !
![Page 6: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/6.jpg)
ready? !Version !0.10.+
Version !0.5.8
![Page 7: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/7.jpg)
Android PlugIn
Android Designer
Android PlugIn
Android DDMS
Android Builder .properties
build.xml
![Page 8: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/8.jpg)
Android PlugIn
Android Designer
Android PlugIn
Android Gradle Adapter .properties
build.gradle
![Page 9: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/9.jpg)
![Page 10: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/10.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/11.jpg)
„hello groovy & gradle“ !!
Code !
![Page 12: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/12.jpg)
dist compile
compileTest test
3 Phasen: !Initialization!Configuration!Execution!
!
![Page 13: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/13.jpg)
![Page 14: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/14.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/15.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/16.jpg)
Demo PlugIn!
Build targets!Variants!
!Code !
Android PlugIn 0.10.+ !
![Page 17: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/17.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/18.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/19.jpg)
Automatische Versions-Verwaltung !
Schritt 2: !!Konfiguration von !!
" "Version Code !"!
über eine Property-Datei !
Android PlugIn 0.10.+ !
![Page 20: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/20.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/21.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/22.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/23.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/24.jpg)
![Page 25: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/25.jpg)
Key Features !!• Build!• runTests (emulator / device / cloud) !• Code Coverage!• Lint!• Monkey!• ... !
![Page 26: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/26.jpg)
![Page 27: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/27.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/28.jpg)
Key Features !Build Variants!
Demo Android Studio !
![Page 29: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/29.jpg)
Key Features !The „old“ World !
![Page 30: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/30.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/31.jpg)
Key Features !
• Layout Editor !
• IntelliJ Features !
• Improved Checks !
• Improved UI !
• ... !!!!
![Page 32: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/32.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/33.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/34.jpg)
Tipps + Tricks !
http://www.manning.com/muschko/
![Page 35: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/35.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/36.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/37.jpg)
Tipps + Tricks !Gradle Wrapper
./gradlew Instead of gradle Initialize with: task wrapper (type: Wrapper) {
gradleVersion = “1.11” }
![Page 38: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/38.jpg)
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](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/39.jpg)
$> gradle assembleDebug -‐-‐profile
![Page 40: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/40.jpg)
DANKE!
![Page 41: Moderne Android Builds mit Gradle](https://reader033.fdocuments.us/reader033/viewer/2022052907/55943d101a28abde5b8b4594/html5/thumbnails/41.jpg)
„Gradle is the most advanced, next generation build system“ Hans Dockter
„You should really give it a try (not only for android)“ Dominik Helleberg