【Unity】Android Native連携Pluginを開発してたら has been replaced with 'variant.getPackageLibraryProvider()'.
Androidのネイティブ連携開発
UnityでAndroidのNative連携Pluginの開発をしていたらこんなエラーに出くわした。
WARNING: API 'variantOutput.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'. It will be removed at the end of 2019. For more information, see https://d.android.com/r/tools/task-configuration-avoidance. To determine what is calling variantOutput.getPackageLibrary(), use -Pandroid.debug.obsoleteApi=true on the command line to display a stack trace. Affected Modules: helloplugin
エラー内容を見れば、
「variantOutput.getPackageLibrary()は2019年には消えるから、variant.getPackageLibraryProvider()に
置き換えて下さい」
といった具合なのですが、ちょっと対応に戸惑ったのでメモしておこう。
発生した状況
Android Studio 3.3を利用して素直にプロジェクトを作るとデフォルトで
com.android.tools.build:gradle:3.3.0
を利用することになり、そしたら遭遇した。
前提として
AndroidでNative連携Pluginを作る時、AndroidからUnityの機能を呼びたい事がよくある。
そういった機能を使う時に、Unityが用意しているAndroid用クラスライブラリをPlugin側に
組み込む必要がある。
例えば、Unity HubでUnity2018.3.2f1を利用している場合はここにある。
C:\Program Files\Unity\Hub\Editor\2018.3.2f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
Macとかならこの辺りを参考に
docs.unity3d.com
原因
build.gradleに記載してあるこれが原因。
android.libraryVariants.all { variant -> variant.outputs.each { output -> output.packageLibrary.exclude('libs/classes.jar') } }
これは、AndroidでUnityの機能を使うためにlibs/classes.jarに配置して使用するが、
Unity側に含めると重複エラーになってしまうので、aarに固める時には省きたい。
その省く処理を行っている。
間違った対応メモ
android.variants.all{ variant -> variant.packageLibararyProvider.each { output -> output.configure{ exclude “libs/classes.jar” } } }
ストレートに直すとこうだ。
エラーは出なくなるが、これでは上手くいかず、classses.jarがPluginに入ってしまった。
そもそもPackageLibraryProviderに代わっているため、流れてくる内容が違う。
中身はTaskProviderでDebug , Releaseになってるような感じだった(ちょっと詳しくはわからないけど)
なので、そこでexcludeとかやっても特に効果が無い。
解決について
ただやりたいことは、
ビルド時にlibs/classes.jarを省きたい
これだけなんだ。
つまりこうすればいい
dependencies{ compileOnly fileTree(dir:”libs” , file: “classes.jar”) ..... }
(もちろんpackageLibrary~の部分は全部消していい)
前まではprovidedだったが、これも無くなって今はcompileOnlyになった。
これで固める時にclasses.jarを省くことが出来る。