Android-Entwicklung mit Groovy

Seite 4: Groovy unter Android

Inhaltsverzeichnis

Dynamische Mechanismen haben einen gewissen Overhead und verringern dadurch die Leistungsfähigkeit unter Android merkbar. Manche dynamischen Features erfordern gar die Kompilierung von Quellcode zur Laufzeit.

Das ist möglich, aber durch das konvertierte Bytecodeformat (DEX) unter Android ist die Klasse erst in normalen Java-Bytecode zu kompilieren, dann in eine .jar-Datei zu speichern und im Anschluss mit einem speziellen Class Loader wieder einzulesen.

Der Vorgang dauert relativ lang. Danach ist die Ausführung allerdings wieder so schnell wie für jede andere Klasse. Zu den Groovy-Features, die zu vermeiden sind, gehören Builder (außer sie sind für CompileStatic vorgesehen), GroovyShell, GroovyClassLoader, GroovyTemplateEngine und die dynamische Erweiterung von Klassen (Metaprogramming).

Android-Apps lassen sich mit Groovy ab Version 2.4.0 entwickeln. Dazu sind zudem ein aktuelles Android SDK und Gradle als Buildsystem nötig. Der vorliegende Artikel geht von Android Studio als Entwicklungsumgebung aus.

Das Projekt wird, wie in Android Studio üblich, über den Wizard angelegt. Anschließend ist noch die Datei build.gradle anzupassen. Zuerst muss man dafür das Groovy-Android-Plug-in für Gradle in den Classpath des Build-Skripts einbinden. Dafür ist in der Datei build.gradle des Projekts die folgende Zeile in den dependencies-Block einzufügen:

classpath 'org.codehaus.groovy:gradle-groovy-android-plugin:0.3.5'

Nun muss man es noch in der build.gradle des Moduls verwenden:

apply plugin: 'groovyx.grooid.groovy-android'

Zu guter Letzt ist nun Groovy als Abhängigkeit hinzuzufügen. Dafür sollten Entwickler im build.gradle des Moduls im Block dependencies die folgende Zeile einfügen:

compile 'org.codehaus.groovy:groovy:2.4.0:grooid'

Komplett könnte das so aussehen:

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0'
classpath 'org.codehaus.groovy:gradle-groovy-android-
plugin:0.3.5'
}
}
allprojects {
repositories {
jcenter()
}
}

build.gradle (Module)

apply plugin: 'com.android.application'
apply plugin: 'groovyx.grooid.groovy-android'
android {
compileSdkVersion 21
buildToolsVersion "19.1.0"
defaultConfig {
applicationId "de.codecentric.android.helloworld"
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'org.codehaus.groovy:groovy:2.4.0:grooid'
}

Jetzt kann losgelegt werden. Groovy-Dateien sucht die Software im Quellpfad src/main/groovy. Dorthin lässt sich die Activity nun verschieben und von .java in .groovy umbenennen, damit man die Groovy-Syntax einsetzen kann.