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")不会保留 type Foo,因此如果没有以其他方式引用它,链接器可能会删除它。

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 回答