どうもこんにちは!
サバ缶(@tech_begin)です。
とある業務で、ライブラリモジュール(.aar)を導入する機会がありました。
そういえばAndroidアプリ向けのライブラリを作成したことがないなぁ……と思い、
学ぶと同時に記事にすることにしました!
お役に立てれば幸いです。
Androidライブラリの構成
Androidライブラリは、構成上はAndroidアプリモジュールと全く同じです。
以下のようなファイルをすべて含めることができます。
- ソースコード
- リソースファイル
- Androidマニフェスト
ですので、レイアウトや画像(drawable)のような共有リソースを統合することが可能です。
ただし、AndroidライブラリをコンパイルするとJARではなくAARファイルとして出力されるためご注意ください。
Androidライブラリの使い所
以下のような場面でAndroidのライブラリを導入します。
いずれにしても、導入する手順は同じです。
それでは、実際にライブラリモジュールを作成する手順を解説していきます!
Androidライブラリの作成
Androidライブラリ(AAR)の作成方法は、大きく2つあります。
① ライブラリモジュールを新規作成する
② アプリモジュールをライブラリモジュールに変換する
それぞれの手順を確認しましょう。
① ライブラリモジュールを新規作成する
前提として、ライブラリ用のプロジェクトが必要になります。
通常の手順で、任意のプロジェクト名で新規作成しましょう。
すると、appモジュールを含んだプロジェクトが作成されます。
次に、Androidライブラリ(AAR)を作成していきます。
Fileメニュー > New > NewModule を選択します。
Module ダイアログで、Android Library を選択し、Next を押下します。
そしてライブラリ名、最小SDKバージョンを指定し、Finish を押下します。
Gradleの同期が完了したら、画面左側のProjectビューにモジュールが追加されます。
BuildVariant にも追加されますよ!
今回はとりあえず「testLibrary」という名称にして進めていきますね。
② アプリモジュールをライブラリモジュールへ変換する
再利用するファイルが含まれるモジュールは、
以下の手順でライブラリモジュールに変換することができます。
これで、モジュール構造は同じですが、Androidライブラリとして機能するようになります。
ビルドするとAPKではなく、AARファイルが出力されます。
Androidライブラリの出力(ビルド)
作成した手順の①と②で方法が異なるのでご注意ください。
上記の手順で出力を行うと、 app/src/debug/
配下に出力されます。
「debug」のところBuildVariantによるので、ご注意ください。
意外と分かりづらいディレクトリに出力されるのね。
注意しなきゃ!
Androidライブラリの導入
ここでは、ライブラリモジュールを依存関係としてインポートしていきます。
Androidライブラリを別のアプリモジュールとして使用する手順は、2つあります。
① コンパイル済みのライブラリを追加する
② ライブラリモジュールをプロジェクトにインポートする
ちなみに、同じプロジェクト内でライブラリモジュールを作成済みの場合は、
プロジェクト内に存在するため必要ありません。
① コンパイル済みのライブラリを追加する
ライブラリのソースコードの単独バージョンを維持(編集不可)にしたい場合に、実施する必要があります。
- File > New > New Module を選択
- Import .JAR/.AAR Package を選択し、Nextを押下
- AARまたはJARのファイル場所を選択し、Finishを押下
② ライブラリモジュールをプロジェクトにインポートする
こちらは、ライブラリモジュールがプロジェクトにコピーされ、ライブラリのソースコードを変更することができます。
- File > New > Import Module を選択
- ライブラリモジュールのディレクトリ場所を選択し、Finishを押下
①と②、それぞれの特徴を理解して使い分けましょう!
実際に試した方法
- 一旦、debugとreleaseを分けて配置しておく。
- ①の手順を試す
- setting.gradleの先頭にライブラリ名が記述されていることを確認する
- appモジュールの
build.gradle
を開き、dependencies
ブロックに追加する Sync Project with Gradle Files(画面右上の象さんマーク)
を押下
特定のビルドバリアントで必要な場合は、implementation
ではなく、[buildVariantName]Implementation
を使用します。