android-gradle

Gradle: Build-Automatisierung mit Android Studio

Von am 12.10.2014

Mit der Entwicklung von Android Studio wurde von Google auf die Build-Automatisierung mittels Gradle gesetzt. Zu diesem Zweck ist das Android-Plugin für Gradle entstanden. Gradle ist in Android Studio vollständig integriert, sodass jedes neue Projekt automatisch mit den entsprechenden Build-Dateien für Gradle versehen wird. Gradle kann jedoch auch unabhängig von Android Studio eingesetzt werden. Mittlerweile gibt es für zahlreiche IDE’s ein entsprechendes Plugin, aber auch der Einsatz mittels Konsole ist möglich.

Was ist Gradle?

Gradle ist ein Tool zur Build-Automatisierung und zum Build-Management. Es dient der Automatsierng von Builds, Tests, Publishing Deployment. Gradle nutzt dazu eine auf Groovy basierte domainspezifische Sprache (DSL)

Welche Ziele werden mit Gradle verfolgt?

  • Einfache Wiederverwendbarkeit von Code und Ressourcen
  • Unterstützung von mehreren Build-Varianten einer Applikation
  • Konfigurieren, erweitern und anpassen des Build-Prozesses
  • Gute IDE-Integration

Build-Dateien

Gradle nutzt für einen einfachen Build hauptsächlich drei Dateien:

  • build.gradle – die auf der Gradle-DSL beruhende Definition des Builds mit allen Tasks und Abhängigkeiten eines Projekts (ein Multiprojekt hat pro Projekt eine solche Build-Datei, die durch Vererbung der Eigenschaften von ihrem „Vater“-Buildskript kurz gehalten werden können).
  • settings.gradle (optional) – bei einem Multiprojekt werden hier die teilnehmenden Unterprojekte festgelegt.
  • gradle.properties (optional) – eine Liste von Properties, die für die projektspezifische Gradle-Initialisierung eines Builds gültig sind.

Gradle-Skripte können unmittelbar Groovy-Code enthalten oder durch eine Groovy-Klasse implementiert werden. Alternativ lassen sie sich als Build-Abhängigkeit aus einem Maven-Repository laden

Build-Konfiguration

Die Build-Konfiguration wird in den Gradle Build-Dateien mit der Syntax und den Optionen von Gradle und dem Android Gradle Plugin definiert. Folgende Aspekte sind konfigurierbar:

  • Build variants. Es können mehrerer APKs mit unterschiedlicher Konfiguration aus einem Projekt erzeugt werden
  • Dependencies. Die Abhängigkeiten werden von Gradle gehandhabt. Es unterstützt Projektabhängigkeiten, lokale Ahängigkeiten als auch Remote repositiories (z.B.: Maven, Ivy)
  • Manifest entries.  Bestimmte Werte der Manifest-Datei können hiermit überschrieben werden (z.B.: “package name”, “minimum SDK version” und “target SDK verison”)
  • Signing. Die erzeugten APK’s können automatisch signiert werden
  • ProGuard. Dient dem automatischen verschleiern des Quellcodes (= Obfuscator)
  • Testing. Es wird eine eigene Test-APK von den Test-Quelldateien im Projekt erzeugt. Die Tests können während des Build-Prozesses ausgeführt werden
  • NEU: APK split. Splits verfeinern die Möglichkeiten der “Build variants” bei Multi-APKs. Es gibt folgende Splits: Density split, ABI split.

Gradle Wrapper

Der Gradle Wrapper ermöglicht es Gradle ohne lokale Installation zu nutzen. Stattdessen wird die entsprechende Version von Gradle beim ersten Build des Projekts heruntergeladen. Dadurch ist es auf einfache Art und Weise möglich unterschiedliche Gradle Versionen für unterschiedliche Projekte zu nutzen.

Der Gradle Wrapper besteht aus einer Batch-Datei für Windows, eines Shell-Skript für andere Betriebssysteme, einer JAR-Datei und einer Properties-Datei.

Musterbeispiel: “build.gradle”

apply plugin: 'com.android.application'

android {
 compileSdkVersion 20
 buildToolsVersion "20.0.0"

 defaultConfig {
  applicationId "at.itcenter.demoapp"
  minSdkVersion 15
  targetSdkVersion 20
  versionCode 1
  versionName "1.0"
 }
 signingConfigs {
  release {
   storeFile file("myreleasekey.keystore")
   storePassword "password"
   keyAlias "MyReleaseKey"
   keyPassword "password"
  }
 }
 buildTypes {
  release {
   runProguard true
   proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
   signingConfig signingConfigs.release
  }
 }
}

dependencies {
 compile fileTree(dir: 'libs', include: ['*.jar'])
 compile 'com.android.support:support-v4:20.0.0'
}

Quellen:

http://developer.android.com/sdk/installing/studio-build.html
http://tools.android.com/tech-docs/new-build-system/user-guide
http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
http://www.gradleware.com/android/gradle-the-new-android-build-system/
http://www.gradle.org/docs/current/userguide/userguide_single.html
http://www.gradle.org/docs/current/dsl/index.html
http://de.wikipedia.org/wiki/Gradle

The comments are closed.