2017年12月19日火曜日

Xamarin+Visualstudio2017 NuGetでハマる

自作音楽プレイヤーの演奏用ライブラリを最新のExoPlayerV2に変えてみようかと、NuGetで探してみると、Xamarinで簡単に使えるようにするプラグインがありました。
Xam.Plugins.Android.ExoPlayer
ExoPlayerはJerryBean(4.1)以降で使えるJavaライブラリなので、うちのXperiaZL2のKitKat(Android4.4)でも使えるはずなので、本体ライブラリをダウンロードしてみました。
ところがライブラリが依存しているXam.Plugins.Android.ExoPlayer.Dashが、Xamarin.Android.Support.Core.Utilsの少し高いバージョンを要求しており、プロジェクトの追加がエラーに。
そしてこれを機にXamarin.Android.Support.Core.Utilsがプロジェクトから削除され、コンパイルエラーでビルド不能な状態になってしまいました。
再インストールすればいいやーと、NuGetでインストールを指示したらなんとエラー。バージョンがダメだと。慌てずにバックアップを戻してコンパイルするとこれもエラー。設定はブロジェクトごとのはずなのに何故?
VS2017を再インストールしてもダメ。数時間格闘して結局
アプリで参照しているSupport.V4ライブラリのインストール時に、どのバージョンを入れるにしてもXamarinのライブラリは最新のandroid(現在だとv8.0のOreo)になっていないとインストールできないようにNuGet用の設定ファイル(template.nuspec)に書いてあるのです。こんな感じで。

<file src="support-v4/nuget/Xamarin.Android.Support.v4.targets" target="build/MonoAndroid80" />



で、これがXamarinの指定とあっていないダメってことですが、リストにOreo8.0がない。ここに出すには、VS2017のツール→Android→Android SDK Manager..でツールを起動し、8.0をインストールしてやる必要があります。


そうすると、やっと8.0が選べます。



この状態でXamarin.Android.Support.Core.Utilsの再インストールができると思いきや、まだ落とし穴が。VS2017が変更を認識してくれない。
仕方がないので一旦VS0217を終了。プロジェクトフォルダ内の以下のフォルダを全て削除して再起動。
.vs
Packages
obj
bin
これでやっと再インストールができるようになりました。複雑過ぎる。ここに書いとかないと絶対また忘れる。
で、KitKat4.4に戻さずにコンパイルすると、
obj\Debug\android\bin\packaged_resourcesが無いというエラーが出ます。
なんでかわからん。
Xamarin.Android.Support.V4を使うために入れているのですが、v25.1.0にしています。このバージョンはandroid70が必要と書いてあるのですが、v4.4でも警告が出るものの使えます。XperiaZL2の実機でも動くので気にしませんけど、そろそろ真面目にAndroidバージョンを意識して開発しないと…。