放浪軍師のXamarin.Formsアプリ開発局

Xamarin.Forms+Prism+ReactivePropertyで素人がAndroidやUWPのアプリを右往左往しながら開発している様を発信していきます。性質上間違いも多いのでご注意ください。

突然大量の文字化けエラーが発生。原因は何だ!?

放浪軍師のXamarin.Formsによるアプリ開発
突然発生した謎の大量文字化けエラーについて調査します。
まず、初めて訪問された方は以下をお読みください。

www.gunshi.info

唐突に謎の文字化けエラーが発生

いつものように乱ちゃんのプロジェクトを開いてAndroidの実機でデバッグしようとビルドしたところ、このような大量エラーが発生して実行できませんでした。

f:id:roamschemer:20180512003212j:plain
↑大量のエラー。原因は何だろうか…

エラー内容が文字化けしてる時点でどうもしようがない。
ちなみにUWPはちゃんと動いているので、コードがどうのとかではない模様。
とりあえずこういう時は助けてグーグル先生!きっと前例が見つかるはずだ!

ありました

田淵さんの記事にありました。いつもありがとーぅ!
ytabuchi.hatenablog.com

Android プロジェクトをビルドするとめっちゃ文字化けするんだけど!
f:id:ytabuchi:20160911232003p:plain:w450

Xamarin の開発では、Android SDK は最新版を使用することを推奨します。が、Xamarin が対応するまでは、Android SDK Build Tools を最新にしてしまうと対応していないためエラーが出ます。Xamarin が Stable で対応したら、最新の Build Tools をインストールするようにしてください。

要するにバージョン的に問題があるって事みたいですね。
でもAndroid SDK Build Toolsってのを更新した記憶が無いんだけどな…勝手にされちゃうんだろうか?
とりあえずAndroid SDK マネージャーを開いてみます。
f:id:roamschemer:20180512004852j:plain

んー、今インストールしてあるのは25.0.3が最新みたいだが、もっと新しいバージョンもあるね。
しかも謎なのが逆に古いバージョンもポツポツインストール済みになっているのは何なんだろう?
…で、現在のXamarinが対応しているバージョンはというと、どこで調べるんだ…???わからん。
まぁとりあえず5個の更新プログラムが利用可能と出てるのでチェックを変更せずにやってみます。
f:id:roamschemer:20180512010117j:plain
なんか予期しない動作が発生する可能性がありますとか脅されるけどいったれ!



…が、ダメ!
なにも変わらなかったです。相変わらずの文字化けエラー。
次は現在インストールしているAndroid SDK Build Toolsの中で最新の25.0.3を外してみます。
バージョンが新しいからダメらしいからね。



…が、ダメ!
なにも変わらなかったです。やっぱり相変わらずの文字化けエラー。
とりあえず元に戻して、可能性は低そうだが最新の28.0.0.2を入れてみました。



…が、ダメ!
なにも変わらなかったです。やっぱりやっぱり相変わらずの文字化けエラー。
とりあえず元に戻しておきます。
しかし参ったな。もしかして原因は他にあるのか???

で、もう一度エラー一覧を確認したときに気が付いたんですが、エラーは文字化けでわけわからんが、警告は英語で表示されていました。当然俺には読めませんが、こいつを翻訳すればなにかわかるかも!
教えてエキサイト先生!
f:id:roamschemer:20180512012005j:plain

【警告の内容】

The $(TargetFrameworkVersion) for Xamarin.Forms.Platform.Android.dll (vv8.0) is greater than the $(TargetFrameworkVersion) for your project (v7.1). You need to increase the $(TargetFrameworkVersion) for your project.

The $(TargetFrameworkVersion) for ReactiveProperty.Android.dll (vv8.0) is greater than the $(TargetFrameworkVersion) for your project (v7.1). You need to increase the $(TargetFrameworkVersion) for your project.

The $(TargetFrameworkVersion) for FormsViewGroup.dll (vv8.0) is greater than the $(TargetFrameworkVersion) for your project (v7.1). You need to increase the $(TargetFrameworkVersion) for your project.

The $(TargetFrameworkVersion) for Xamarin.Forms.Platform.dll (vv8.0) is greater than the $(TargetFrameworkVersion) for your project (v7.1). You need to increase the $(TargetFrameworkVersion) for your project.

【エキサイト先生による和訳】

Xamarin.Forms.Platform.Android.dll(vv8.0)のための$(TargetFrameworkVersion)は$より大きい あなたのプロジェクト(v7.1)のための(TargetFrameworkVersion) 。あなたは$を増大させる必要がある あなたのプロジェクトのための(TargetFrameworkVersion) 。

ReactiveProperty.Android.dll(vv8.0)のための$(TargetFrameworkVersion)は$より大きい あなたのプロジェクト(v7.1)のための(TargetFrameworkVersion) 。あなたは$を増大させる必要がある あなたのプロジェクトのための(TargetFrameworkVersion) 。

FormsViewGroup.dll(vv8.0)のための$(TargetFrameworkVersion)は$より大きい あなたのプロジェクト(v7.1)のための(TargetFrameworkVersion) 。あなたは$を増大させる必要がある あなたのプロジェクトのための(TargetFrameworkVersion) 。

Xamarin.Forms.Platform.dll(vv8.0)のための$(TargetFrameworkVersion)は$より大きい あなたのプロジェクト(v7.1)のための(TargetFrameworkVersion) 。あなたは$を増大させる必要がある あなたのプロジェクトのための(TargetFrameworkVersion) 。


日本語でおk

でもまぁ何となくわかりますね。博多弁で意訳すると…

.dllのバージョンが8.0とに、お前のバージョンが7.1やけんダメばい!
TargetFrameworkのバージョンば上げな!

って事ですね。なんだやっぱりバージョンか。
でもAndroid SDK Build ToolsではなくてTargetFrameworkのバージョンみたいですね。
TargetFrameworkって確か…あった!
f:id:roamschemer:20180512014406p:plain
が、バージョン2.0って…
この警告文によると、7.1または8.0じゃないとおかしいな。コレジャナイ…。

…いや、7.1に8.0…?Android…まさか…これか!
f:id:roamschemer:20180512015016j:plain
7.1に8.0。間違いないこれだわ。Androidバージョンですね。
8.0の中にあるAndroid SDK Platform 26 にチェックを入れてインストールします。
これでいけるんじゃね???いけるんじゃね!!!???



…が、ダメ!orz
嘘だろおい…動きません。
ただエラーの内容が変わりました。また英語だよ…助けてエキサイト先生!
f:id:roamschemer:20180512015436p:plain

【エラーの内容】

Your project is not referencing the "MonoAndroid,Version=v8.0" framework. Add a reference to "MonoAndroid,Version=v8.0" in the "frameworks" section of your project.json, and then re-run NuGet restore.

【エキサイト先生による和訳】

あなたのプロジェクトは「単アンドロイド、Version=v8.0」枠組を参照していない。あなたのproject.jsonの「枠組」セクションで参照を「単アンドロイド、Version=v8.0」に追加しなさい。それからre-run NuGet復元。


いやほんと助けてエキサイト先生…
ちょっとわかんねーよどういう事だよ。まぁ多分8.0はダメよんって言ってるんだろうね。
でも原因はこの辺なのは間違いないことがわかりました。
多分どっかでAndroid8.0をターゲットにしちゃってるんだけど、7.1までしかAndroid SDK が入ってなかったから大量のエラーが出ていた。
だからAndroid SDK 8.0を入れてみたけど、そいつはまだ未対応だぜって事。
じゃあターゲットが8.0にしてある設定がどっかにあるはずだ!そいつを7.1に変更すれば解決か?探せ!

f:id:roamschemer:20180512020336j:plain
見つけました。.Androidのプロパティですね。ここを弄った記憶は無いんだけどなんで変わったんだろうね?
まぁここの設定を変更して7.1にしてみます。
ちなみにAndroid SDK 8.0はアンインストールしておきました。




f:id:roamschemer:20180512020922p:plain:w150
うおおおおおおおおおお!お帰り乱ちゃん!!!!会いたかったぜ!



…とまぁ、こんな感じで謎の文字化けエラーは解決しました。
解決してしまえばなんてことはない。単純にSDKとターゲットが一致してなかっただけです。
あと、8.0にはまだ未対応っぽいって事ですね。
しっかし苦戦しました…。上の記事を書きながらだったとはいえ2時間ぐらいかけちゃったよ。
エラー文字化けの原因はここだ!って記事が本当に見つからなかったので、ほぼ自力と言う形になりましたが解決できてよかったです。

あれ?でもそれって、今後同じ目にあった人が「Xamarin 文字化け エラー」とかでググったら、この記事見つけて救われたってパターンが出てくるかもしれないって事だよな!

もしかして、やっとXamarinFormsにちゃんと貢献できる記事が書けたのかもしれんね!!
だとしたらすごく嬉しいです。