Android App太大,Linking禁用function
我已经完成了我的应用程序,现在我正在尝试构建.apk并在我的手机上进行测试(无需调试,在发布模式下)。
将链接设置为“ 无 ”一切正常。 这里的问题是,应用程序太大了 – 它的20MB ,那就是垃圾。
我读过关于链接的文章: 点击这里
所以我尝试了“ 仅限Sdk Assemblies ”和“ Sdk和用户assembly ”。 第二个选项(两个程序集)直接失败,我甚至无法看到我的应用程序的第一个屏幕(登录)。
将链接设置为“ 仅限Sdk Assemblies ”后,我可以进入第一个屏幕(Loginscreen)。 该应用程序也是6.73MB什么更好,更有资格。
我现在面临的问题是,当我点击第一个屏幕上的“登录”按钮时, 没有任何反应 (通常会将我重定向到下一个活动)。
Button被绑定到命令:
public IMvxCommand LoginCommand { get { return new MvxRelayCommand(DoLogin); } } private void DoLogin() { //Do Stuff }
在DoLogin()中放置一个断点 – 表明它永远不会进入。
那么,我怎么能解决这个问题呢? 似乎mvvmcross的function因任何原因被禁用?
我的主要目标是减少应用程序的大小。
这里重要的是.csproj中必要的部分
pdbonly true bin\Release\ TRACE prompt 4 False SdkOnly True
使用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; } }
来自: https : //github.com/slodge/MvvmCross/blob/vnext/Sample%20-%20TwitterSearch/TwitterSearch.UI.Droid/LinkerIncludePlease.cs
不得不这样做很烦人…但它不需要很长时间 – 大多数应用程序实际上并没有绑定到许多不同的属性/事件。
我将progressBar包含方法更改为
public void Include(ProgressBar progressBar) { progressBar.Visibility = progressBar.Visibility; }
它工作。 我删除了所有其他人,他们都开始工作了。 我假设这是有效的,因为它正在测试ProgressBar Visibility属性的getter和setter。
如果这不是正确的工作原因可能有人添加评论,所以我们都可以解释如何在将来解决这些问题