Xamarin.Android 当 "Link SDK Assemblies" 被选中时,TextView 不会引发更改事件

Xamarin.Android TextView doesn't raise change events when "Link SDK Assemblies" is selected

我正在使用 MvvmCross 在 Xamarin 中开发一个项目,尝试使用链接器缩小应用程序大小以便在 Android 和 iOS 上发布(无表单。)

在 Android 上,当我 select 编辑 "Link SDK Assemblies Only" 时,项目构建并运行,没有崩溃或错误消息。但是 EditText 控件的 none 在其文本更改时正确响应,它们的数据绑定不会更新,并且它们的 Changed 事件处理程序不会被调用。

当我select"Don't Link"时,一切正常。更新绑定并调用事件处理程序。

我查看了 Xamarin Linker documentation, and I'm aware of how to ensure various assemblies, types and methods are preserved. My problem is I simply don't know what needs to be preserved, nor do I have any idea how to find out. I've tried tools like bitdiffer 没有成功。

谁能帮我弄清楚我需要保留什么?

如果 LinkerPleaseInclude 文件缺少对 EditText 的引用,则经常会出现此行为。原因是链接器会删除您的应用中未引用/使用的所有内容。通过 LinkerPleaseInclude 文件中的引用,链接器将注意到用法并保留事件处理程序。

向您的 Android 项目添加一个 LinkerPleaseInclude.cs 文件,其中包含以下代码:

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 文件 here.