2017-09-04 4 views
0

これは多少の最近の問題だと思われますが、正にどの問題が本当の問題か分かりません。先週、VS2017とAndroidサポートライブラリを更新した後、「java.exeがコード2で終了しました」というエラーが表示され始めました。検索した後、MultiDexを有効にすることがコンセンサスのように思えました。だから私はそれをやった、それは新しい携帯電話でうまくいった。しかし、私はKitKatの携帯電話でコンパイルしようとしたときに、私はクラスの例外を逃した(ただし、私はAndroidモニターでログに記録したときだけ、VSに例外はありません)。Xamarin.Android <21デバイスでMultiDexが動作しない

カスタムアプリケーションクラスについては、this linkが続きました。正しいバットファイルと正しいカスタムクラスを使用しています。 21以上でもすべてが正常に見えますが、古いデバイスはまだmono.MonoPackageManagerが見つからないと報告します。 デバッグフォルダーにmultidex.keepが生成されているのを見ると、mono/MonoPackageManager.classは確実にそのファイルにあります。だから私は本当に手掛かりがありません。

私はclassysharkで検査するためにAPKを生成しました。面白いことがいくつか見つかりました。私のメソッドの総数は約30Kです。なぜ制限が65Kであれば、multidexも必要なのですか?また、multidex.keepファイルにもかかわらず、mono/MonoPackageManagerclasses2.dexにあることがわかりました。

私は何かが明白でないか、最近Xamarin.Androidに大きなバグがありますか?

編集:進行の種類は作られましたか?私のプロジェクトがマルチディックスを必要とすべきではないという事実を無視して、私は生成されたmultidex.keepファイルがスペースや何もない単一の行に過ぎないことに気付きました。このファイルを変更して各クラスを新しい行に配置した後、そのファイルにビルドアクションMainDexMainDexListを追加すると、すべて正常に動作します。以前は不平を言っていたクラスを再追加する必要はありませんでした。私はアンドロイドビルドツール(特に25.0.2と26.0.1)の複数のバージョンを同じ結果で試しました。新しい行を追加すると問題が解決されるというのは非常に奇妙だと思いますが、生成されたファイルには改行がありません。

+1

改行の回帰については、https://bugzilla.xamarin.com/show_bug.cgi?id=59036を参照してください。なぜ30kが65kの限界に近くないのかについては、https://bugzilla.xamarin.com/show_bug.cgi?id=55117を参照してください。 (ProguardはXamarinではデフォルトでは使用されていません) –

答えて

1

私は正確に同じ問題を持っていたし、私のプロジェクトのルートフォルダにカスタムmultidex.keepファイルを作成し、そこに次を追加して、それを解決:

mono/MonoPackageManager.class 
mono/MonoRuntimeProvider.class 
mono/MonoPackageManager_Resources.class 
mono/android/app/NotifyTimeZoneChanges.class 
mono/android/app/ApplicationRegistration.class 

これは私の実際のアプリケーションクラスのいずれかに加えて、それであります実行時に見つからないと不平を言っていました。これは私の< 21の問題を解決しました(特にKitKat(19)の場合)。

ビルドシステムはまだmultidex.keepファイルを作成しますが、それは私のカスタムファイルに加えてありますので、私にとってはうまくいくようです。

関連する問題