我在Monodroid中有一个混淆的应用程序,我的问题是apk中包含的mscorlib程序集没有实现System.String.Intern()方法,我的应用程序不起作用。
我的混淆器调用此方法来混淆字符串,我得到一个MissingMethodException。这个方法在apk中包含的程序集中不存在,但奇怪的是它确实存在于myproject / obj / release / assemblies / mscorlib.dll中
这些文件非常不同。如果我把文件myproject / obj / release / assemblies / mscorlib.dll放在apk中它可以工作,但这个解决方案是一个糟糕的解决方案,因为应用程序在其他点失败导致TypeLoadException,因为更改了dll。
有谁能告诉我为什么monodroid使用mscorlib减少的文件和替代解决方案?
感谢。
答案 0 :(得分:1)
有谁能告诉我为什么monodroid使用mscorlib减少的文件和替代解决方案?
较小的文件用于将应用程序大小减少linking the assemblies。链接可能很脆弱,因为链接器不跟踪运行时行为。例如,使用Type.GetType("Foo")
将不会保留类型Foo
,因此如果未以其他方式引用,链接器可能会将其删除。
obj\Release\assemblies\mscorlib.dll
是源程序集。 obj\Release\android/assets/mscorlib.dll
是链接(较小)的程序集,它包含在.apk
。
如果您的混淆器直接使用String.Intern()
,这可能表示链接器中存在错误。但是,如果您的混淆器使用反射(例如Type.GetMethod()
),那么这将是预期的行为。要解决此问题,请明确使用String.Intern()
within a falseflag block,以便保留该方法。