Das neue Android Build System



Ähnliche Dokumente
Dominik Helleberg inovex GmbH. Auf Augenhöhe mit Android Studio und Gradle

Build Management Tool?

Build Management Tool?

Build Management Tool

Einführung in Maven und GWT

Kurzanleitung zu XML2DB

Maven 2 Softwareprojekte mit Kultur

Persönliche Build-Höllen für Jedermann Andreas Hartmann & Dr. Halil-Cem Gürsoy

SEW Übung EMFText. 1 Aufgabe. 2 Domänenbeschreibung. 3 Installation von Eclipse/EMFText. 4 Schritt-für-Schritt Anleitung. 4.

ECLIPSE PLUG-IN. Redwood Anwendertage 2015

Buildsystem. Maven & Scons. Controls Entwicklungsforum Januar 2012

Softwareprojekte mit Kultur

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Software-Engineering Grundlagen des Software-Engineering

Eclipse und Java Einheit 06: Building Eclipse Projete mit Ant

Enterprise java beans step-by-step

ANT. Kurzvortrag von Manuel Schulze.

Installation von NetBeans inkl. Glassfish Anwendungs-Server

Das Build Tool Ant. Sebastian Mancke,

Consultant & Geschäftsführer, enpit consulting OHG ugb@enpit.de

Kurzanleitung Installation der Zend Studio Sprachpakete

Das Build-Tool ANT ETIS SS05

Hex Datei mit Atmel Studio 6 erstellen

Software Engineering II

Wie konfiguiriert man Eclipse (mit oder ohne Plugin) Erich Ehses

Anzeige des Java Error Stack in Oracle Forms

Git in großen Projekten

Bauteilattribute als Sachdaten anzeigen

Task: Nmap Skripte ausführen

Diese Kurzanleitung beschreibt die nötigen Einstellungen, um mit pixafe Transfer Bilder auf einem Facebook Konto veröffentlichen zu können.

Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X

JCoverage. Uni Kassel Projektarbeit Software Engineering Markus Pilsl & Marko Medved

8. Bintec Router Redundancy Protocol (BRRP) 8.1 Einleitung

Version 0.3. Installation von MinGW und Eclipse CDT

Standard Daten-Backup-Script

Programmieren in Java

Nutzung von Log4J und Commons Logging

Zählen von Objekten einer bestimmten Klasse

Daten fu r Navigator Mobile (ipad)

Bau dir dein eigenes Eclipse

Ant in Eclipse Starthilfe

WebService in Java SE und EE

Übung: Verwendung von Java-Threads

Qt-Projekte mit Visual Studio 2005

Globale Scrum Retrospektive

Meldung Lokale Anwendung inkompatibel oder Microsoft Silverlight ist nicht aktuell bei Anmeldung an lokal gespeicherter RWE SmartHome Anwendung

Ein Überblick über KDevelop

Cross-Platform Mobile Development mit Xamarin Mark

Branching und Merging mit Visual Studio Team System

ProSafe VPN Client Software. FVL328 (FWAG114, FWG114P, FVS328) mit dynamischer WAN-IP-Adresse. 16. Beispielkonfiguration Übersicht.

Authentication Policy. Konfigurationsbeispiel ZyXEL ZyWALL USG-Serie. Juni 2010 / HAL

GeoShop BatchClient Benutzerhandbuch

Facebook I-Frame Tabs mit Papoo Plugin erstellen und verwalten

SSL-VPN unter Android mit Junos Pulse Stand: 10. Februar 2015

Präsentation Von Laura Baake und Janina Schwemer

From Agile Project Management to Continuous Integration Thomas Bergmüller

Lokale Installation von DotNetNuke 4 ohne IIS

Vorkurs Informatik WiSe 15/16

Installation einer C++ Entwicklungsumgebung unter Windows --- TDM-GCC und Eclipse installieren

Projekt Weblog :: Integration

Magento. Mehrsprachig. 30. Januar CMS: Magento / Deutsch

Artikel Test-Organisation in grösseren Magento(1)-Projekten

Installation des GeoShop Redirector für Apache (Stand ) ================================================================

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

RESTful Web. Representational State Transfer

Installations Guide für YAJSW und DTLDAP

LimeSurvey -Anbindung

ICT-Cloud.com XenApp 6.5 Configuration Teil 2

Anleitung. Integration von Kentix Geräten in den OpManager

Dynamic Ressource Management

Connecting Content. User Manual. Version: 1.2

Apps-Entwicklung mit Netbeans

Tess TeSign nutzen mit App's"! iphone und Bria Informationen zur Nutzung

Software-Update zum Buch 3D-Spieleprogrammierung mit DirectX 9 und C++

Internet Explorer Version 6

Windows Server 2008 für die RADIUS-Authentisierung einrichten

Pascal-Compiler für den Attiny

Anleitung zur Webservice Entwicklung unter Eclipse

Internet und WWW Übungen

Virtueller Campus. Virtueller Campus Horw mit interaktiver Steuerung. HowTo: Externe Bibliotheken

Support-Tipp Mai Release Management in Altium Designer

Dokumentation: Erstellung einer Content App für Windows 8

NODELOCKED LIZENZ generieren (ab ST4)

Build-Pipeline mit Jenkins

Software Engineering II

SCHNELLEINSTIEG ZUM TOOL NODEBUILDER

Ein Projekt mit JavaFX erstellen

Apollo Überblick. Klaus Kurz. Manager Business Development Adobe Systems Incorporated. All Rights Reserved.

Java-Tutorium WS 09/10

INHALT 1. INSTALLATION DES V-MODELL XT UNTER WINDOWS 7 2. INSTALLATION DES V-MODELL XT UNTER WINDOWS VISTA

Agile Software Verteilung

Inhaltsverzeichnis. 1 Einleitung. Literatur. 1.1 CVS (Concurrent Version System) [Pru03, Zee02, Ced05]

Transkript:

Das neue Android Build System Besser Builden mit Gradle JUGS Event, 18. Juni 2015 Kaspar von Gunten, Ergon Informatik AG

whois( kvg ) Software-Engineering seit 2002 Entwicklung in Java (Client/Server, Desktop, Android) Nebenberuflicher Dozent (Android, GUI-Programming, OOP, ) Angestellt bei Ergon Informatik AG, Zürich (Aktuell Cloud-Projekt im Bereich «Internet of Things») 17.06.2015 New Android Build System 2

Inhaltsübersicht Was ist ein Build? Bekannte Buildsysteme für Java Gradle Gradle Basics Android Plugins für Gradle Android Build Files (build.gradle) Konfiguration Build Variants Build Types, Product Flavors Demo 17.06.2015 New Android Build System 3

Build? 1. Check out code 2. Resolve dependencies 3. Compile 4. Static code analysis 5. Run tests 6. Check coverage 7. Obfuscate 8. Generate documentation 9. Create Artifacts 10. Deploy 17.06.2015 New Android Build System 5

Buildsysteme für Java Ant Deklarativ (XML) Ant Tasks Kein Projektmodell Keine Konvention Kein Lifecycle Kein Dep.-Mgmt Kein Skripting Maven Deklarativ (XML ) Projektmodell (POM) Konventionen - Projektstruktur - Lifecycle-Phasen Dependency-Mgmt Plugins Kein Skripting Gradle Deklarativ (DSL) Projektmodell Scriptable Tasks + Lifecycle Konventionen - Projektstruktur Dependency-Mgmt Plugins Skripting 17.06.2015 New Android Build System 7

Ant > ant clean dist

Maven > mvn clean package

Gradle > gradlew build

Gradle Buildskripts Gradle Buildskripts enthalten Task-Definitionen Konfigurationen von Modellobjekten und Tasks Ausführbaren Code Objektnotation ähnlich JSON Ein Gradle-Build läuft in 2 Phasen ab 1. Konfiguration des Builds (Erstellung DAG) 2. Ausführung des Builds (d.h. eines spezifischen Tasks) 17.06.2015 New Android Build System 11

1 > gradlew build 1 Pass 1: Configure Model build.gradle

1 > gradlew build 2 1 Pass 1: Configure Model 2 Pass 2: Execute Task «build» «build» build.gradle

Build Script (build.gradle) Output println 'Begin...' String getuptime = "7:00h" int coffeecount = 2 def worktodo = [ "Fix bugs" ] println 'Initialized properties' task getup { println "Set alarm clock to $getuptime" dofirst { println "Ring! Ring! Ring!" dolast { println "Getting out of bed at $getuptime" task drinkcoffee(dependson: getup) { dolast { println "Drinking $coffeecount coffees" task dowork(dependson: drinkcoffee ) { dolast { worktodo.each { worktask -> println worktask task preparedayswork { dofirst { println "Setting up enough work for 1 day" worktodo << "Implement Feature" > gradlew dowork Begin... Initialized properties Set alarm clock to 7:00h :getup Ring! Ring! Ring! Getting out of bed at 7:00h :drinkcoffee Drinking 2 coffees :dowork Fix bugs > Gradlew workallday Begin... Initialized properties Set alarm clock to 7:00h :preparedayswork Setting up enough work for 1 day :getup Ring! Ring! Ring! Getting out of bed at 7:00h :drinkcoffee Drinking 2 coffees :dowork Fix bugs Implement Feature Review code Do other stuff :workallday Config Phase Execution Phase Configuration during Execution task workallday(dependson:[ preparedayswork, dowork ]) { dowork.shouldrunafter preparedayswork

Gradle Plugins Ein Gradle-Skript kann Plugins anwenden Plugin als Abhängigkeit hinzufügen (im buildscript-block) Plugin mit apply aktivieren Plugins Definieren neue Modellobjekte Fügen einem Projekt weitere Tasks hinzu Konfigurieren Buildparameter gemäss Konventionen 17.06.2015 New Android Build System 15

Java Plugin Definiert u.a. die folgenden Tasks Definiert: sourcesets (main, test), compile + runtime classpath Diverse Properties (dirs, compatibiltiy, etc.) 17.06.2015 New Android Build System 16

Android Plugin Definiert u.a. die folgenden Tasks assemble compile, copy res check lint test build assemble, check install clean Definiert das Modellobjekt android > Gradlew tasks Konventionen? 18.06.2015 New Android Build System 17

buildscript { repositories { jcenter() dependencies { classpath 'com.android.tools.build:gradle:1.2.2' 1 apply plugin: 'com.android.application' android { compilesdkversion 21 buildtoolsversion "22.0.1" defaultconfig { applicationid "ch.example.hsludemo" minsdkversion 16 targetsdkversion 21 versioncode 1 versionname "1.0" dependencies { compile filetree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.1.1' 2 3

Module- und Project-Buildfile Android-Applikationen können grundsätzlich aus mehreren Modulen bestehen Im einfachsten Fall gibt es ein einzelnes «app» Modul mit einem eigenen Build-File Auf Projekt-Ebene gibt es noch ein «root» Build-File, welches die gemeinsame Build- Konfiguration definiert und die Subprojekt- Builds aufruft 17.06.2015 New Android Build System 19

Build Konfiguration Default Configuration applicationid, minsdkversion, targetsdkversion, versioncode, versionname Dependencies für tasks compile testcompile applicationid vs. package (in Manifest) ID für Store und App Kann auch dynamisch durch Skripting berechnet werden! Base-Package für Javaklassen (und R-Klasse) 17.06.2015 New Android Build System 20

Build Variants Der Android Build kann von derselben Applikation mehrere Varianten erstellen Build Types: Debug, Release Product Flavors: Free, Paid, Company1, Company2 Ergibt Task Matrix für Build + Priorität Auswahl in Studio Debug Release Free buildfreedebug buildfreerelease Paid buildpaiddebug buildpaidrelease 1.Build Type 2.Flavor 3.Default Config 18.06.2015 New Android Build System 21

Build Types Default Build Typen: debug, release Unterschiedliche Signing-Konfigurationen (Keys) ProGuard (Obfuscator/Shrinker) für Release Setzen des «debuggable»-flags Unterschiedliche applicationid und versionname (Parallel-Installation möglich) Subconfig im Build-File: android.buildtypes Pro Build-Typ gibt ein neues src/<buildtype> Directory im Modul Definition von alternativen Ressourcen und Klassen 17.06.2015 New Android Build System 22

Demo: Build Types

Product Flavors Erlaubt mehrere Varianten derselben App Branding: <Firma 1>, <Firma 2> Funktionalitätsunterschied: <free>, <paid> Subconfig im Build-File: android.productflavors Pro Build-Typ gibt ein neues src/<buildtype> Directory im Modul Hier können alternative Ressourcen und Klassen definiert werden 17.06.2015 New Android Build System 24

Demo: Product Flavors

Tipp: Gradle Daemon Gradle kann mit einem Daemon laufen Modell wird In-Memory gecached Muss nicht immer wieder alles von neuem Parsen Speed-Up für Build! Wie aktivieren? Im File <project_root>/gradle.properties die Zeile org.gradle.daemon=true eintragen 17.06.2015 New Android Build System 26

Tipp: App von Konsole starten Root build.gradle ergänzen: buildscript { repositories { jcenter() dependencies { classpath 'com.android.tools.build:gradle:1.2.2' classpath 'com.novoda:gradle-android-command-plugin:1.4.0' App build.gradle ergänzen (oder allprojects in Root): apply plugin: 'com.android.application' apply plugin: 'android-command' > gradlew rundebug > gradlew runfreerelease 17.06.2015 New Android Build System 27

Referenzen Gradle Home http://gradle.org Android Developer: Build System Overview https://developer.android.com/sdk/installing/studio-build.html Android Developer: Building and Running https://developer.android.com/tools/building/index.html Android Plugin Documentation http://tools.android.com/tech-docs/new-build-system/user-guide Android Command Plugin https://github.com/novoda/gradle-android-command-plugin 17.06.2015 New Android Build System 29

Schlussfolie Kaspar von Gunten kaspar.vongunten@ergon.ch Ergon Informatik AG www.ergon.ch twitter.com/ergonag Copyright 2015, Kaspar von Gunten