2011/06/03

Android プロジェクトを jarライブラリ化する

Android に関わらず、プログラムを書いていると、作った成果物をライブラリ化したいと思うことは多々あります。
Eclipse の Android 開発環境(ADT) には Is Library という設定があって、ソースコードのままライブラリとして利用出来ます。
ただ、この方法だと、再配布がしにくいです。
というわけで、Eclipse の Javaプロジェクトを jarライブラリ化する機能を使って、Android プロジェクトを jarライブラリ化する方法を紹介したいと思います。

2011/6/5 追記
この方法はres以下を使用するAndroidプロジェクトには使用できないようです。(いろいろ実験してみましたが無理でした。うまい方法をご存知の方は是非教えてください。)
res以下を使用したい場合は、上記の Is Library を使用することでライブラリ化することが可能です。
Is Libary の詳しい使い方は ADTによるLibrary Projects という Kazzz さんのエントリがわかりやすいです。

2011/8/12 追記
本件、Googleが公式に出来ないと発表していることがわかりました。
res を使っている場合、jarライブラリ化するのは諦めた方が良さそうです。
その辺については、Android Project で Is Library を使う場合、res の管理に注意 というエントリにまとめたので、参考にしてみてください。
res を使用しない場合は、以下の要領でjarライブラリ化可能ですが、Google が公式に認めていない以上、お勧めは出来ません。あしからず。

  1. 普通にライブラリ化したいAndroidプロジェクトを作ります
  2. プロジェクトを右クリック → エクスポート

  3. JAR ファイルを選択します

  4. 次は注意が必要です。
    エクスポートするリソースに AndroidManifest.xml を入れてはいけません。
    あと、res は外しておいた方が良いでしょう。
    resディレクトリも実質入れられません。(コメント参照)
    src, gen は必ず入れてください。(つまり、一回はビルドしないといけない)

出来上がったjarファイルは、適当なディレクトリに置いてビルド・パスに追加してやればオッケーです。

2 件のコメント:

じょう さんのコメント...

図入りでよくわかりました。
文字列などをresのxmlに書いておきたいのですが、res入りでexportしても問題ないですか?

Yusuke Miura さんのコメント...

昨日はうろ覚えだったんで誤魔化して書いたのですが、res以下を使う場合はダメみたいです。
使う先のresディレクトリ以下に同じ名前のファイルがあると怒られますね。
resディレクトリはパッケージ管理されていないので、そうなるのでしょう。

あと、res以下を使用するにはContextが必要。ContextはAndroidManifest.xml に書いておく必要あり。しかし、AndroidManifest.xml も一つしか許可されないのでjarファイルに含めてはいけない。
という制限があるので、名前を特殊なもの(パッケージ名を含めるとか)にして入れておく、みたいな技も使えなさそうです。

res以下を使う場合は、Is Library を使うのがよさそうです。
というより、そのためにこのオプション出来たんでしょうね。


的確な質問ありがとうございます。
本文も変更しました。