To get your environment running, please check this post by Janne.
Ok, let's get to the interesting part. Combining Scala, Maven and Android SDK with a working development environment.
Properties
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>5</maven.compiler.source> <maven.compiler.target>5</maven.compiler.target> </properties>
New dependencies
- Android
- Andengine (2d engine)
<dependencies> <dependency> <groupId>com.google.android</groupId> <artifactId>android</artifactId> <version>2.3.3</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.andengine</groupId> <artifactId>andengine</artifactId> <version>1.0</version> </dependency> </dependencies>
Since the Andengine package is not included in any Maven repository, you'll need to add the file by hand:
mvn install:install-file -Dfile=path-to-andengine.jar/andengine.jar -DgroupId=org.andengine -DartifactId=andengine -Dversion=1.0 -Dpackaging=jar
You can download the Andengine file here.
Remember to set packaging to apk!
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId> <artifactId>first-application</artifactId> <version>1.0</version> <packaging>apk</packaging> <name>first-application</name>
Plugins
The Android plugin that handles the apk generation.
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>maven-android-plugin</artifactId> <version>2.8.4</version> <configuration> <sdk> <!-- Don't forget to set your ANDROID_HOME environment variable to your SDK directory! --> <path>${env.ANDROID_HOME}</path> <!-- Platform 10 is Android 2.3.3 --> <platform>10</platform> </sdk> <jvmArguments> <jvmArgument>-Xmx1024m</jvmArgument> </jvmArguments> <!-- All of these go into the /src/main/android/ directory, we don't want to polute the project root directory. --> <androidManifestFile>${project.basedir}/src/main/android/AndroidManifest.xml</androidManifestFile> <resourceDirectory>${project.basedir}/src/main/android/res</resourceDirectory> <assetsDirectory>${project.basedir}/src/main/android/assets</assetsDirectory> <nativeLibrariesDirectory>${project.basedir}/src/main/android/native</nativeLibrariesDirectory> <resourceOverlayDirectory>${project.basedir}/src/main/android/overlay</resourceOverlayDirectory> <deleteConflictingFiles>true</deleteConflictingFiles> <undeployBeforeDeploy>true</undeployBeforeDeploy> </configuration> <extensions>true</extensions> </plugin>
Last we need the most important plugin of them all, ProGuard. Without this plugin the apk generation will fail since the Scala dependency will generate too many files.
<plugin><groupId>com.pyx4me</groupId> <artifactId>proguard-maven-plugin</artifactId> <version>2.0.4</version> <executions> <execution> <phase>process-classes</phase> <goals> <goal>proguard</goal> </goals> </execution> </executions> <configuration> <injar>android-classes</injar> <libs> <lib>${java.home}/lib/rt.jar</lib> </libs> <obfuscate>false</obfuscate> <options> <option>-keep public class * extends android.app.Activity</option> <option>-keep public class * extends android.app.Application</option> <option>-keep public class * extends android.app.Service</option> <option>-keep public class * extends android.content.BroadcastReceiver</option> <option>-keep public class * extends android.content.ContentProvider</option> <option>-dontskipnonpubliclibraryclasses</option> <option>-dontoptimize</option> <option>-printmapping map.txt</option> <option>-printseeds seed.txt</option> <option>-ignorewarnings</option> </options> </configuration> </plugin>With these settings you should be able to create a working development environment for Android development with Scala. Make a test run by running the following command: mvn package to see if the environment compiles.
Congrats! You have an Android application that does nothing.
Also, if you can't get things working with the tutorial, here's the pom.xml you can use to get your application to compile.
From my point of view getting Android, Scala and Maven working together is a real pain in the ass and I couldn't have done the configuration without the following tutorials:
http://www.scala-lang.org/node/345 (Scala with Maven) Thanks to the Scala community.
Building Android applications with Maven and IntelliJ 11/26/2010 Thanks to Christian Bauer for an exellent tutorial.
Also some more information from Proguard:
http://code.google.com/p/maven-android-plugin/wiki/ProGuard?spec=svn331
No comments:
Post a Comment