C# Android应用程序太大,链接会禁用功能

C# Android应用程序太大,链接会禁用功能,c#,xamarin.android,release,mvvmcross,C#,Xamarin.android,Release,Mvvmcross,我已经完成了我的应用程序,现在我正在尝试构建.apk并在我的手机上测试它(没有调试,处于发布模式) 将链接设置为“None”一切正常。 这里的问题是,应用程序太大了——它的20MB,这是垃圾 我读了那篇关于链接的文章: 因此我尝试了“仅Sdk程序集””和“Sdk和用户程序集””。第二个选项(两个程序集)直接失败,我甚至无法看到我的应用程序的第一个屏幕(登录) 通过将链接设置为“仅Sdk程序集”,我可以进入第一个屏幕(Loginscreen)。该应用程序也是6.73MB更好、更符合条件的应用程

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

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


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

因此我尝试了“仅Sdk程序集””和“Sdk和用户程序集””。第二个选项(两个程序集)直接失败,我甚至无法看到我的应用程序的第一个屏幕(登录)

通过将链接设置为“仅Sdk程序集”,我可以进入第一个屏幕(Loginscreen)。该应用程序也是6.73MB更好、更符合条件的应用程序

我现在面临的问题是,当我点击第一个屏幕上的“登录”按钮时,什么都没有发生(通常它会将我重定向到下一个活动)

按钮绑定到命令:

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>

pdbonly
真的
bin\Release\
痕迹
促使
4.
假的
斯德科尼
真的

对于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;
    }
}
发件人:


不得不这样做很烦人。。。但这并不需要很长时间——大多数应用程序实际上并没有绑定到许多不同的属性/事件。

我将progressBar的include方法更改为

    public void Include(ProgressBar progressBar)
    {
        progressBar.Visibility = progressBar.Visibility;
    }
它成功了。我把其他的都拿走了,他们都开始工作了。我假设它在测试ProgressBar可见性属性的getter和setter时起作用

如果这不是进行此项工作的正确原因,是否有人可以添加评论,以便我们都能了解将来如何解决这些问题

另请参见和