0

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

在 Android 上,当我选择“仅链接 SDK 程序集”时,项目构建并运行,没有崩溃或错误消息。但是,EditText当它们的文本更改、它们的数据绑定没有得到更新以及它们的Changed事件处理程序没有被调用时,没有一个控件能够正确响应。

当我选择“不链接”时,一切正常。更新绑定并调用事件处理程序。

我查看了Xamarin Linker 文档,并且知道如何确保保留各种程序集、类型和方法。我的问题是我根本不知道需要保留什么,也不知道如何找出。我已经尝试过像bitdiff这样的工具,但没有成功。

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

4

2 回答 2

1

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

于 2017-12-06T19:48:16.427 回答
1

将 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 文件。

于 2017-12-06T20:03:56.603 回答