デ部宴会で @vvakame さんや @hidecheck さんとandroid プロジェクトの mavenize に挑戦したのでまとめです。
http://code.google.com/p/maven-android-plugin/wiki/GettingStarted
http://code.google.com/a/eclipselabs.org/p/m2eclipse-android-integration/wiki/GettingStarted
11/1追記「settings.xml に署名のための設定を追加する」を書き忘れていたので追加しました。
Mac 上での開発を想定しています。Windows や Linux でも同じようにできると思いますが、やり方はそれぞれの環境で違うので適宜読み替えてください。
すでに eclipse を用いて android の開発が行えていることを前提とします。開発環境を構築する部分は記述しないので、 http://developer.android.com/sdk/index.html を見るなりググるなりして環境を作ってください。
とりあえず省略。こんな感じで使えてればOK。 maven-3.0 でもたぶんいけます。
$ mvn -version Apache Maven 2.2.1 (r801777; 2009-08-07 04:16:01+0900) Java version: 1.6.0_22 Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home Default locale: en_US, platform encoding: UTF-8 OS name: "mac os x" version: "10.6.4" arch: "x86_64" Family: "mac"
例: ~/.bash_profile に export ANDROID_HOME=/Applications/android-sdk-mac_x86
補足: この環境変数は、 pom.xml から Android SDK のパスを取得するために参照します。コマンドラインから mvn コマンドを実行する場合はshell の環境変数に含まれていること。また、後ほど eclipse を使う場合は eclipse の環境変数に ANDROID_HOME がセットされている必要があります。よくわからない場合は一度ログアウトしてみましょう。
後で作成する pom.xml の署名を行う部分が参照する、キーストアの場所やパスワードなどの情報を設定します。
~/.m2/settings.xml の /settings/profiles の下に、プロファイルとして追加します。署名用の設定なので、 sign プロファイルがアクティブになったときに有効になるようにしておきます。
追加するプロファイルでは、以下のプロパティを定義します。
settings.xml の例
<settings> : : <profiles> : : <profile> <id>sign</id> <properties> <keystore>/Users/zaki/android/dev.keystore</keystore> <storepass>hogehoge</storepass> <alias>dev</alias> <keypass>hogehoge</keypass> </properties> </profile> <profiles> </settings>
例: ~/.bash_profile に export PATH="${ANDROID_HOME}/tools:${PATH}"
android コマンドのヘルプが見えるはずです。
$ android -h Usage: android [global options] action [action options] (以下略)
以下の2つのプラグインをインストールします。
UpdateSite: http://m2eclipse.sonatype.org/sites/m2e
UpdateSite: http://m2eclipse-android-integration.googlecode.com/svn/trunk/com.byluroid.eclipse.maven.android.update/
$ android create project --target 4 --name FirstMavenAndroid --path FirstMavenAndroid --activity FirstMavenAndroidActivity --package org.zakky.firstmaven Created project directory: FirstMavenAndroid Created directory /Users/zaki/fromsvn/zaki_on_issofty1/android/FirstMavenAndroid/src/org/zakky/firstmaven Added file FirstMavenAndroid/src/org/zakky/firstmaven/FirstMavenAndroidActivity.java Created directory /Users/zaki/fromsvn/zaki_on_issofty1/android/FirstMavenAndroid/res Created directory /Users/zaki/fromsvn/zaki_on_issofty1/android/FirstMavenAndroid/bin Created directory /Users/zaki/fromsvn/zaki_on_issofty1/android/FirstMavenAndroid/libs Created directory /Users/zaki/fromsvn/zaki_on_issofty1/android/FirstMavenAndroid/res/values Added file FirstMavenAndroid/res/values/strings.xml Created directory /Users/zaki/fromsvn/zaki_on_issofty1/android/FirstMavenAndroid/res/layout Added file FirstMavenAndroid/res/layout/main.xml Added file FirstMavenAndroid/AndroidManifest.xml Added file FirstMavenAndroid/build.xml
作成されたディレクトリ(上の例だと FirstMavenAndroid)の中にある不要なものを削除します。
$ cd FirstMavenANdroid $ rm -rf bin libs build.xml build.properties
以下の部分を修正した pom.xml を置きます。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.zakky.firstmaven</groupId> <artifactId>firstmaven</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>apk</packaging> <repositories> <repository> <id>local</id> <name>Local Repository</name> <url>file://${basedir}/m2repo</url> </repository> </repositories> <dependencies> <dependency> <groupId>com.google.android</groupId> <artifactId>android</artifactId> <version>1.6_r2</version> <!-- <version>1.5_r3</version> <version>1.5_r4</version> <version>2.1_r1</version> <version>2.1.2</version> <version>2.2.1</version> --> <scope>provided</scope> </dependency> </dependencies> <build> <sourceDirectory>src</sourceDirectory> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>maven-android-plugin</artifactId> <configuration> <sdk> <path>${env.ANDROID_HOME}</path> <platform>1.6</platform> </sdk> <deleteConflictingFiles>true</deleteConflictingFiles> </configuration> <extensions>true</extensions> </plugin> </plugins> </build> <profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> <property> <name>env</name> <value>dev</value> </property> </activation> <properties> <maven.test.skip>true</maven.test.skip> <distribution.file>distribution.xml</distribution.file> </properties> </profile> <profile> <id>sign</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jarsigner-plugin</artifactId> <version>1.2</version> <executions> <execution> <id>signing</id> <goals> <goal>sign</goal> </goals> <phase>package</phase> <inherited>true</inherited> <configuration> <archiveDirectory></archiveDirectory> <includes> <include>target/*.apk</include> </includes> <keystore>${keystore}</keystore> <storepass>${storepass}</storepass> <keypass>${keypass}</keypass> <alias>${alias}</alias> </configuration> </execution> </executions> </plugin> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>maven-android-plugin</artifactId> <inherited>true</inherited> <configuration> <sign> <debug>false</debug> </sign> </configuration> </plugin> </plugins> </build> </profile> </profiles> </project>
普通の maven の場合と同じです。
$ mvn clean package install
sign プロファイルをアクティブにすると署名をします。
$ mvn clean package install -Psign
apk 作成が成功したら、以下のコマンドでインストール出来ます。インストールは target ディレクトリの下にあるファイルが対象です。
$ mvn com.jayway.maven.plugins.android.generation2:maven-android-plugin:deploy
署名無しのものが device にインストールされている時に署名有りを入れようとするとエラーになるようなので、その場合は一旦 device から手動で削除します。
File メニュー -> Import... を選択して、開いたダイアログから Maven -> Existing Maven Projects を選択し、pom.xml を置いたディレクトリを指定してインポート実行。しばらくするとインポート完了します。 もしエラーが出るようなら、 プロジェクトを右クリックして Maven -> Update Project Configuration とかプロジェクトの clean とかを試してください。