読者です 読者をやめる 読者になる 読者になる

ほげほげ(仮)

仮死状態

UnityのAndroidでライブラリを使う

前回の続きになります。

概要

Unityの連携でaarを使うがGradleに設定した依存関係はそのままだと反映されないので、それをなんとかします。

今回は例としてAdMobを使う設定で。

この設定だとaarにした時にgoogle play servicesのライブラリはUnity側へ反映されません。ただしlibsフォルダ内のjarは自動でaarに含まれます。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.google.android.gms:play-services-ads:7.5.0'
}

対応方法

Gradleがダウンロードしてきたaarなりjarなりがどこかにあるので、それをコピーする感じです。ただ、それをイチイチ探してコピーするのも面倒なのでGrdaleタスクで解決します。

task copyLibs << {
    configurations.compile.each { lib ->
        if (lib.path.startsWith("${projectDir}/libs")) {
            // libs内のものはコピー対象外
            return
        }
        copy {
            from lib.path
            into '../../../Assets/Plugins/Android'
        }
    }
}

configurations.compileに依存関係の情報が設定されているので、そこからパスを取得してコピーします。libsフォルダ内のjarは作成するaarに含まれるので除外するようにしています。

このタスクを実行するとわかるのですが、ライブラリが依存しているライブラリもコピーしてくれます。なのでそのあたりを気にせず出来ます。

補足

Google Play Services

Google Play Servicesについては<AndroidSDK>/extras/google/google_play_services/libproject/google-play-services_libのライブラリプロジェクトをAssets/Plugins/Androidにそのままコピーしても動きます。

ただしこのやり方だとAndroidメソッド数の上限を超える可能性があるのでオススメしません。

なので、必要な物だけを個別にGradleに設定して上に書いたようにGradleタスクでコピーしたほうが良いと思います。

ドキュメントにも書いていますが、必要な物だけを設定しましょう。

その他ライブラリ

例ではGoogle Play Servicesでやりましたが、例えば square/okhttp なんかも普通に同じようにできます。

まとめ

前回も含めて最初は面倒ですが、個人的にこのやり方が一番しっくりきてます。