我正在使用MvvmCross在Xamarin中开发一个项目,尝试使用链接器减小应用程序大小,以便在Android和iOS上发布(无表单)。
在 Android 上,当我选择"仅链接 SDK 程序集"时,项目构建和运行时没有崩溃或错误消息。但是,当EditText
控件的文本更改、数据绑定未更新且Changed
事件处理程序未被调用时,这些控件都不会正确响应。
当我选择"不链接"时,一切正常。更新绑定并调用事件处理程序。
我查看了 Xamarin Linker 文档,并且知道如何确保保留各种程序集、类型和方法。我的问题是我根本不知道需要保存什么,也不知道如何找出答案。我尝试过像bitdiff这样的工具,但没有成功。
如果有的话,谁能帮我弄清楚我需要保留什么?
将 LinkerPleaseInclude.cs 文件添加到您的 Android 项目中,其中包含以下代码:
public class LinkerPleaseInclude
{
public void Include(TextView text)
{
text.AfterTextChanged += (sender, args) => text.Text = "" + text.Text;
text.Hint = "" + text.Hint;
}
}
EditText
继承自TextView
因此,这将使链接器认为您引用了TextView.AfterTextChanged
事件,从而解决了您的问题。你可以在这里找到一个参考Android LinkerPleaseInclude.cs文件。
如果 LinkerPleaseInclude 文件缺少对 EditText 的引用,则经常会出现此行为。原因是链接器会去除应用中未引用/使用的所有内容。通过 LinkerPleaseInclude 文件中的引用,链接器将注意到用法并保留事件处理程序。