我已经完成了我的应用程序,现在我正在尝试构建.apk并在我的手机上进行测试(无需调试,在发布模式下).
将链接设置为“无”一切正常.
这里的问题是,应用程序太大了 – 它的20MB,那就是垃圾.
我读了一篇关于链接的文章:
Click Here
所以我尝试了“仅限Sdk Assemblies”和“Sdk和用户装配”.第二个选项(两个程序集)直接失败,我甚至无法看到我的应用程序的第一个屏幕(登录).
将链接设置为“仅限Sdk Assemblies”后,我可以进入第一个屏幕(Loginscreen).该应用程序也是6.73MB什么更好,更有资格.
我现在面临的问题是,当我点击第一个屏幕上的“登录”按钮时,没有任何反应(通常会将我重定向到下一个活动).
Button被绑定到命令:
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 Assemblies.
然后解决方法链接器失败的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; } }
不得不这样做很烦人……但它不需要很长时间 – 大多数应用程序实际上并没有绑定到许多不同的属性/事件.