c# - Android 应用程序太大,链接禁用功能

标签 c# xamarin.android release mvvmcross

我已经完成了我的应用程序,现在我正在尝试构建 .apk 并在我的手机上测试它(没有调试,处于 Release模式)。

将链接设置为“”一切正常。 这里的问题是,该应用程序太大 - 20MB,那是垃圾。


我读了那篇关于链接的文章: Click Here

所以我尝试了“Sdk Assemblies Only”和“Sdk and User Assemblies”。第二个选项(两个程序集)直接失败,我什至无法看到我的应用程序的第一个屏幕(登录)。

将链接设置为“仅限 Sdk 程序集”后,我能够进入第一个屏幕(登录屏幕)。该应用程序还6.73MB更好,更符合条件。

我现在面临的问题是,当我在第一个屏幕上单击“登录”按钮时,没有任何反应(通常它会将我重定向到下一个事件)。

按钮绑定(bind)到命令:

public IMvxCommand LoginCommand
{
    get
    {
         return new MvxRelayCommand(DoLogin);
    }
}

private void DoLogin()
{
     //Do Stuff
}

在 DoLogin() 中放置一个断点 - 表明它永远不会进入。

那么,我该如何解决这个问题呢?似乎 mvvmcross 的功能因任何原因被禁用?

我的主要目标是减小应用程序的大小。


如果重要,这里是 .csproj 的必要部分

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AndroidUseSharedRuntime>False</AndroidUseSharedRuntime>
<AndroidLinkMode>SdkOnly</AndroidLinkMode>
<AndroidLinkSkip />
<EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>

最佳答案

对于 MvvmCross,我通常只使用 SDK 程序集

为了解决 MvvmCross 链接器失败(以及一般的 MonoTouch/MonoDroid 问题),我添加了 LinkerPleaseInclude 类型的文件来欺骗链接器。

示例文件是:

public class LinkerIncludePlease
{
    private void IncludeClick(View view)
    {
        view.Click += (s, e) => { };
    }

    private void IncludeVisibility(View view)
    {
        view.Visibility = view.Visibility + 1;
    }

    private void IncludeRelativeLayout(RelativeLayout relative)
    {
        relative.Visibility = ViewStates.Visible;
    }
}

来自:https://github.com/slodge/MvvmCross/blob/vnext/Sample%20-%20TwitterSearch/TwitterSearch.UI.Droid/LinkerIncludePlease.cs

不得不这样做很烦人......但不会花很长时间 - 大多数应用程序实际上并没有绑定(bind)到许多不同的属性/事件。

关于c# - Android 应用程序太大,链接禁用功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15613694/

相关文章:

c# - 对象如何检测它何时被处理?

c# - .NET 4.5(或 4.5.1)是否能够与安全协议(protocol)无关?

android - 如何在 Xamarin.Android 中以编程方式禁用 textview 的自动链接

c# - 如何在单击时获取图像控件上的坐标

c# - 如何从 Process.GetCurrentProcess().Threads 获取托管线程

dependency-injection - Dynamo IoC 是否适用于 MonoTouch 和 MonoDroid?

android - 如何使用 Azure SQL 数据库制作 Xamarin Android 应用程序

cocoa - 我如何归档我的 cocoa 框架

c# - web.release.config 更改动态 Web 服务 url

android - 使用 vs-android 构建发布 Android APK