Help us understand the problem. What is going on with this article?

[Unity] Eclipseライブラリ形式でAndroidネイティブプラグインを作る

More than 3 years have passed since last update.

UnityでAndroidのネイティブプラグインを作る際、大きく分けて以下の3つの構成があるかと思います。

1. aar形式で作成

aarで作成すると、リソースファイル(resディレクトリ)やマニフェストを含めてライブラリを作成できますが、
aar内のマニフェストを確認したり、変更したりすることが簡単にできません。

2. jarのみ作成して、Assets/Plugins/Android直下にリソース、マニフェストを置く

こんな感じの構成です。

image

マニフェストファイルはAssets/Plugins/Android直下に置いているので、
ライブラリが複数ある場合は、手動でのマージが必要になることが多いです。
間違って上書きしたりすると最悪です。

3. jarのみ作成して、Eclipseライブラリ形式にする

aarと同様、ライブラリ毎にresディレクトリやマニフェストファイルを配置することができます。
その上、ただのディレクトリなので、直接マニフェストを書き換えたり、ファイルを編集したりすることが簡単にできます。
Unityではこの形式が一番便利かと思います。

こんな感じの構成になります。

image

project.propertiesの内容はこんな感じ。

project.properties
target=android-16
android.library=true

この形式で作成する場合のポイントは以下の3点です。

  • Assets/Plugins/Android直下にライブラリ用のディレクトリを作成する
  • ディレクトリ内に、project.propertiesを配置する(libsやresは必要に応じて配置)
  • 他の階層に、同名のディレクトリが存在しないようにする

3つ目はどういうことかというと、例えばAssets直下にXXXPluginというディレクトリが存在する状態で、
Assets/Plugins/Android配下に同名のXXXPluginというライブラリディレクトリを作成した場合、
うまく認識されない場合があります。

このEclipseライブラリ形式で作成したサンプルを以下に置いておきます。
(Crittercismというクラッシュレポートのプラグインです)
Crittercism-UnityPlugin

C#のスクリプトやiOS用のファイルを含めて、最終的に以下の構成となっています。

image

(補足1)AndroidManifest.xmlの確認

UnityでAndroidのビルドをすると、以下のようにマニフェストが作成されるようです。

  • Assets/Plugins/Android/AndroidManifest.xml があればベースにする
  • 無ければUnityが自動で作成する
  • aarがあれば、aar内のAndroidManifest.xmlをマージする
  • Eclipseライブラリがあれば、Eclipseライブラリ内のAndroidManifest.xmlをマージする

マージした結果のファイルは、ビルド時にUnityプロジェクト配下のTemp/StagingArea/AndroidManifest.xmlに出力されます。

(補足2)AndroidStudioでjarファイルの出力

Androidのネイティブライブラリを作る場合、私は以下のような手順でjarを出力しています。

  1. AndroidStudioで新規プロジェクトを作る

  2. File -> New -> New Module -> Android Library でモジュールを追加

  3. 追加したモジュールのbuild.gradleに、以下のタスクを追加

build.gradle
task makeJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('../libs/')
    include('classes.jar')
    rename('classes.jar', project.name + '.jar')
}

あとはビルド後に上記のmakeJarタスクを実行して、jarファイルを取り出します。

tkyaji
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away