外部ライブラリのすゝめ

きっかけ

GoogleAppEngineとAndroidの開発をしていて、共通に使用するコードを外部ライブラリ化したかったんだけど
プロジェクトのプロパティから他のプロジェクトの参照という方法では
簡単にはjarファイルを任意の場所に置けない事が分かって*1
いろいろ試行錯誤してこれに落ち着きそうな感じです。

ant

antを使えばjavaコンパイルや、jarファイル作成などマクロみたいに組むことができるんで
antのbuild.xmlを書きました。

ディレクトリ構成
root
 src
 bin
 build.xml
 xxx.jar

Eclipseで作成する普通のJavaプロジェクトで、build.xmlはプロジェクトの直下に置きます。
jarファイルはプロジェクト直下にできます。

ソース
<?xml version="1.0" encoding="utf-8" ?>
<project name="xxx" default="deploy">

  <property name="jarname" location="./xxx.jar" />
  <property name="src" location="./src" />
  <property name="bin" location="./bin" />

  <target name="compile">
    <delete dir="${bin}/*" />
    <javac srcdir="${src}" destdir="${bin}" />
  </target>

  <target name="build">
    <delete file="${jarname}" />
    <jar jarfile="${jarname}">
      <fileset dir="${src}" />
      <fileset dir="${bin}" />
    </jar>
  </target>

  <target name="deploy" depends="build">
    <copy file="${jarname}" todir="./../gae_project/war/WEB-INF/lib" />
    <copy file="${jarname}" todir="./../android_project/assets" />
  </target>
</project>
使い方

主に変更する点

  • projectエレメントのname属性
    • 別に必須じゃないから変更しなくてもいいんだけど、プロジェクト名を指定
  • property:jarnameのlocation
    • ./の後に、作成するjarファイルの名前に変更する
  • target:deployのcopyエレメント
    • todir属性の値を、jarファイルを配置するディレクトリパスに変更する。

当初はコンパイルも書いてたんですけど、eclipseさんが自動的にコンパイルしてくれるので
target:compileは使ってません。消しても構いません。

さらに

まだ手を抜くために、antの実行もショートカットで簡単にしてしまいます*2

  • プロジェクトで右クリック
  • Properties
  • Builders
  • Import...
  • Build.xmlを選択*3

これをやっておくとCommand+Bで(WindowsならCtrl+B?)勝手にコンパイルされて配置されます。
クリーンしたときも勝手にコンパイルされて配置されます。
プロジェクトを実行しようとしてもコンパイルされて配置されるかも。

androidの外部ライブラリを作る

androidSDKのAPIを使う外部ライブラリを作りたいなと思ったので、それも調べました。
ようはandroid.jarを参照ライブラリに追加すればいいですね。
とりあえずユーザライブラリにAndroid.jarを追加する

これはandroid 1.5からそれぞれのバージョンしておくといいかもしれませんね。
あとはライブラリプロジェクトの参照ライブラリに追加します。

  • プロジェクトで右クリック
  • Build Path
  • Add Libraries
  • User Library
  • Android 2.2」を選択

これでAndroidSDKのAPIを使ったライブラリを作ることができます。

最後に

ほぼ自己流でやってるんで、こういうところを改善した方がいいよ!ってあったら教えてください!
特にant歴は3時間くらいなんで、すげー怪しいです。
twitterでも!コメントででも!

*1:簡単な方法がありましたら教えてください。私のがんばりが消えてなくなります…

*2:毎回のビルド時間が長くなり、一長一短だったりするんで、導入はそれぞれで判断してください

*3:一度Antを手動で実行しないと表示されないかもしれません

*4:環境によって異なります