0

Monodroid で難読化されたアプリケーションを使用していますが、問題は、apk に含まれる mscorlib アセンブリがメソッド System.String.Intern() を実装しておらず、アプリケーションが機能しないことです。

難読化ツールがこのメソッドを呼び出して文字列を難読化すると、MissingMethodException が発生します。このメソッドはapkに含まれるアセンブリには存在しませんが、奇妙なことにmyproject/obj/release/assemblies/mscorlib.dllには存在します

これらのファイルはまったく異なります。ファイル myproject/obj/release/assemblies/mscorlib.dll を apk に配置すると機能しますが、dll の変更により TypeLoadException を引き起こす他の点でアプリが失敗するため、このソリューションは悪いソリューションです。

monodroid が mscorlib 縮小ファイルと代替ソリューションを使用する理由を誰か教えてもらえますか?

ありがとう。

4

1 に答える 1

1

monodroid が mscorlib 縮小ファイルと代替ソリューションを使用する理由を誰か教えてもらえますか?

小さい方のファイルは、アセンブリをリンクしてアプリケーションのサイズを縮小するために使用されます。リンカは実行時の動作を追跡しないため、リンクは不安定になる可能性があります。たとえば、 usingType.GetType("Foo")は typeFooを保持しないため、別の方法で参照されていない場合、リンカはそれを削除できます。

obj\Release\assemblies\mscorlib.dllソース アセンブリです。obj\Release\android/assets/mscorlib.dllはリンクされた (小さい) アセンブリで、 に含まれてい.apkます。

難読化ツールが を直接使用してString.Intern()いる場合、リンカーにバグがある可能性があります。ただし、難読化ツールがリフレクションを使用している場合 (例: Type.GetMethod())、これは予期される動作です。これを修正するにはString.Intern() 、 falseflag ブロック内で明示的に を使用して、メソッドが保持されるようにします。

于 2012-07-26T18:56:34.357 に答える