読者です 読者をやめる 読者になる 読者になる
スポンサーリンク

Androidでライブラリ・プロジェクトを作成し,Eclipse上でコードを共有しよう

Android Eclipse


Androidアプリ開発において,共通部分のJavaコードをあちこちで流用したいケースはよくある。


こういった共通コードや便利クラス類は,ライブラリプロジェクトにまとめる。

そして複数のプロジェクトから参照可能にするのがよい。

ライブラリ自体の改良やデバッグ・新機能を,ワークスペース内の全プロジェクトで楽に共有できるからだ。


下記はその方法と手順。

サンプルコードと手順


新規Android Applicationプロジェクト作成。

プロジェクト名は
AndroidLibTest
とする。

  • minimum required SDK,
  • Target SDK,
  • Compile With

は,それぞれ自由に決めてよいが,手元に控えておく。

次へ。

Create Custom Launcher Iconにはチェックしない。
Create Activityにもチェックしない。

Mark this project as a libraryにチェック。


src内にLibHogeクラスを作成:

package com.hoge;

public class LibHoge {

    public static String hello(String s)
    {
        return "Hello," + s;
    }

}

これが,ライブラリプリプロジェクトとなる。


次に,利用側のPJを作成。

PJ名は
AndroidUseLibTest
とする。

各種APIレベルは,とりあえずライブラリ側のPJとあわせる。

次へを連打。


プロジェクトが作成されたら,
プロジェクト→プロパティ→Android→ライブラリに,AndroidLibTestを追加。


このライブラリを呼び出してみよう。

メインのアクティビティに,初回でトーストが表示されるようにコードを1行だけ追加。

onCreateメソッド内に,下記を追記する。

        Toast.makeText(this, LibHoge.hello("fuga"), Toast.LENGTH_LONG).show();

LibHogeにカーソルをあてて,必要なクラスを普通にインポート可能。


PJを実行してみる。

画面に「Hello, fuga」とToast表示される。

ライブラリとして参照しているプロジェクト内のコードを,無事に呼び出せている。



では,ライブラリに変更を加えてみよう。

LibHogeに下記のメソッドを追加。

    public static String hello2(String s)
    {
        return "Hello," + s + "!";
    }


ライブラリ利用側のコードも,「LibHoge.hello2("fuga")」に書き換える。


すると,メソッドの未定義エラーになる。

これは,ライブラリ側のプロジェクト内で,jarファイルが更新されていないためだ。


ライブラリのプロジェクトで プロジェクト→クリーン すれば,jarファイルが自動的にビルドし直される。

ライブラリを利用する側のコードもエラーが出なくなる。



このようにして,ライブラリ・プロジェクトの資産を,複数の外部プロジェクトから共有することができる。


なお,リソースも共有できる。

ライブラリ側にlayoutとしてxmlを作成した場合,すぐにライブラリ使用側のプロジェクト用のR.javaが再生成され,レイアウトを呼び出すことが可能。


参考リンク

Androidでライブラリプロジェクトを作成する - iPhone/iPad/Androidアプリ開発ブログ
http://d.hatena.ne.jp/waochi/20101108...

  • 手順の略述。プロジェクトのプロパティで「Is Library」にチェックを入れ,プロジェクトの右クリックで手動でJARをエクスポートする。
  • 2010年の情報。


ADTによるLibrary Projects - Kazzzの日記
http://d.hatena.ne.jp/Kazzz/20100522/p1

  • "is Library"をチェックする方法のおかげで,Javaのビルド・パスの設定変更が不要になった。
  • 2010年の情報。


Android Tips #13 ライブラリプロジェクトを活用する | クラスメソッド開発ブログ
http://dev.classmethod.jp/smartphone/...

  • ライブラリプロジェクトを追加する実例。2012年の情報。


穀風: Android プロジェクトを jarライブラリ化する
http://kokufu.blogspot.jp/2011/06/and...

  • res以下をjarに含められず困っていた頃の情報。2011年。


Androidでライブラリプロジェクトを作成する際の考慮事項 - Develop with pleasure!
http://d.hatena.ne.jp/techmedia-think...

  • 共通のリソースIDの定義による競合を防止せよ
  • GoogleMapを使いたい場合は,両プロジェクトのマニフェストXML内でuses-libraryで参照せよ
  • 互換性。ライブラリプロジェクトで使用するAPIは、アプリケーションプロジェクトのAPIと同じバージョンか、それより低いバージョンであるべき
  • 2011年の情報。


Libraryプロジェクトのテスト - hidecheckの日記
http://d.hatena.ne.jp/hidecheck/20120...

  • ライブラリを利用したアプリケーションのテストではなく,ライブラリのプロジェクトを単体でテストするための方法。
  • 2012年の情報。

補足

プロジェクト作成時に,APIレベル(Android SDKのバージョン)を3つ指定する。

これらの項目の意味をメモ。

  • Minimum Required SDK:アプリの最低サポートレベル。
    • →ユーザ層をどれぐらい広げるか,という問題。
  • Target SDK:アプリのいわば公式・推奨サポートレベル。
    • →どのユーザ層に最も焦点をあてたアプリか,という問題。
  • Compile With:コンパイルするレベル。
    • →プログラマが利用する開発ツールに関する問題。言うまでもなく,最新のツールが良い。
    • ※Google Mapsを使いたい場合,ここでGoogle APIsを選択しておく必要がある。

最初のAndroidアプリ プロジェクトの作成
http://techfun.cc/android/firstandroi...

  • Minimum Required SDK: 動作するために必要な最低限のレベル
  • Target SDK: 対象のレベル
  • Compile With: コンパイルするレベル


[Android] 公式チュートリアルをなぞる
http://www.technosketch.com/ja/resour...

  • Minimum Required SDK:
    • Choose the lowest version of Android that your application will support.Lower API levels target more devices, but means ferwer features are available. By targeting API 8 and later, you reach approximately 95% of the market.
    • アプリがサポートする最低のレベル。APIレベルを下げるとサポートデバイスが増える。しかし使える機能が少なくなる。
  • Target SDK
    • Choose the highest API level that the application is known to work with. This attribute informs the system that you have tested against the target version and the system should not enable any compatibility behaviours to maintain.
    • アプリが動作することがわかっている最も高いAPIレベル。このターゲットバージョンでテストが行われたことをシステムに知らせる。おかげで,システムは互換性保持の処理をしなくて済む。
  • Compile With
    • Choose a target API to compile your code against, from your installed SDKs. This is typically the most recent version, or the first version that supports all the APIs you want to directly access without reflection.
    • コードをコンパイルするAPIレベル。通常は最新バージョン。


Your First Android Hello World Java Program
http://tekeye.biz/2012/your-first-and...

  • 3つのAPIレベルの組み合わせ方の例。API 8: Android 2.2 (Froyo),API 6: Android 4.1 (Jelly Bean),API 17: Android 4.2 を使う。


My First Android Project
http://androidrstar.blogspot.jp/2013/...

  • Minimum Required SDK: Choose the lowest version of android that your application will support. Always prefer API level 8 to reach approximately 95% of the market.
  • Target SDK: Choose the Target Version, against which you want to test your application. You can prefer to latest version.
  • Compile With: Choose a target API to compile your code against, from your installed SDK. Always choose the highest API level.


http://webcache.googleusercontent.com...

  • Minimum Required SDKは、最小 SDK バージョン
  • Target SDK は,ビルドターゲット
  • Compile With では,特に問題なければ、デフォルトのままでも良い。ビルドターゲットに合わせることもできる


わざわざ最低バージョンを指定する目的は,互換性のため。


例えば,1.6系のスマホでもFragmentを使用したいのでandroid-support-v4.jarを組み込む場合など。

このような場合,メインのターゲットとなるバージョン層とは違い,もっと古いバージョンをどこまでサポートするかが問題になる。

Android 2.xでAndroid Compatibility Packageを使ってFragmentを動かしてみた
http://www.swingingblue.net/mt/archiv...

  • タブレットではないHoneycomb以前のバージョンでもFragmentを使えるようにするライブラリが提供された


Android Tips #28 Android 1.6 から Fragment を使う
http://dev.classmethod.jp/smartphone/...

  • Fragment は Android 3.0 (APIレベル11) から導入されたコンポーネントで,Support Package でサポートされているので Android 1.6 (APIレベル4) から使用することができる


Android Compatibility packageで2.x系でもマルチサイズ対応
http://www.atmarkit.co.jp/fsmart/arti...

  • アプリの根幹にかかわる機能をCompatibility packageで提供すると、「せっかく互換性を持たせたのに、実際にはエラーが発生しなくなっただけで結局使えない」という事態を招く恐れが