外部
アプリケーションをコンパイルする時、minSdkVersionの大小関係の問題につ いては警告してくれません。このため「ライブラリーモジュール」が指定しているminS dkVersionよりも低いバージョンの端末にも、そのアプリケーションをインストールして 実行できてしまいます。もしそのアプリケーションが、その端末のAndroidバージョン には存在しないAPIを利用してれば、アプリケーションはクラッシュしてしまいます。
「ライブラリーモジュール」にActivityを追加してみましょう。追加そのものは通常 のAndroidアプリケーションと同じ手順でできますが、「ライブラリーモジュール」内 のActivityを利用する際に注意しなければならないことがあります。
LibraryActivityをMyLibraryに追加する
「MyLibrary」に「LibraryActivity」という名前のActivityを追加します。
通常のクラスの追加と同様、「mylibrary」モジュールの「src」→「main」→
「java」→「自分のパッケージ名」の上で右ボタンクリックして、「New」サブメ ニューから「Activity」→「Blank Activity」を選びましょう。
プロジェクトを新規に作成する場合と同様、アクティビティ名やレイアウトのXML ファイルの名前を指定して追加します。ここではアクティビティ名は「LibraryActivi ty」に設定します。それによりレイアウト名は自動的に「activity̲library」になりま す。追加したアクティビティはリスト25のように編集します。
図37:ライブラリーモジュールとminSdkVersionの関係
Activity をライブラリーに含める
15 - 3 -3
外部 ライ ブラ リー の利 と用 作成 15第 章
LibraryActivityを起動する処理を実装する
メインのレイアウト(activity̲main.xml)に「button」というidのボタンを1つ追加 してから、「MainActivity.java」をリスト26のように編集し、ボタンをクリックすると
「LibrayActivity」を起動するようにします。
問題がなければコンパイルが通り、アプリケーションを実行できるはずです。ボタン をクリックすると、アクティビティが切り替わり「LibrayActivity」の画面が表示され るはずです。この場合には、同じプロジェクト内のアクティビティの切り替えなので、こ れで問題ありません。しかし、外部ライブラリーに組み込まれたアクティビティを起動し
リスト25:LibraryActivity.java(クラスファイルごと追加)
public class LibraryActivity extends ActionBarActivity { public static Intent createIntent(Context context) { return new Intent(context, LibraryActivity.class);
}
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_library);
} }
リスト26:MainActivity.java(MainActivityからLibraryActivityを起動する)
package jp.techinstitute.t051.myapplication;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import jp.techinstitute.t051.mylibrary.LibraryActivity;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
Intent intent = LibraryActivity.createIntent(MainActivity.this);
startActivity(intent);
} });
} }
ようとすると、クラッシュしてしまうでしょう。
AndroidManifest.xmlにactivityを追加する
アプリケーションがクラッシュしてしまう理由は、呼び出し側の「AndroidManife st.xml」に、呼び出される側のアクティビティが定義されていないからです。
通常のActivityと同ように、ライブラリーモジュールのActivityを利用する場合 も次のように「AndroidManifest.xml」を定義しておく必要があります(リスト
27)。
Activityだけでなく、ServiceやBroadcastReceiverなど、「AndroidManif est.xml」に定義が必要なコンポーネントを利用する場合は、アプリケーション側の
「AndroidManifest.xml」に定義しなければなりません。こちらもアプリケーションを コンパイルした時点ではエラーとならないので、minSdkVersionと同様に気をつけ なければならない点です。
今まで作ったプログラムをライブラリー化してみましょう。
例えば10章の第1節で作成したペイントViewなど、今まで作ったプログラムを再 利用できるようにしてみましょう。
本節では「ライブラリーモジュール」の作り方と、minSdkVersionやActivityを ライブラリーモジュールに含める場合の注意点について学びました。「ライブラリーモ ジュール」にアプリケーションで共通に利用できる機能を実装していくことで、効率的 に開発が行えるようになります。アプリケーションを開発する際、共通で利用できそう なクラスができた場合は「ライブラリーモジュール」に含めることを検討しましょう。
リスト27:AndroidManifest.xml(使用するアクティビティを追加)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.techinstitute.usemylibrary">
<application>
<!-- 省略 -->
<activity android:name="com.techinstitute.mylibrary.LibraryActivity"/>
</application>
</manifest>