7

アプリが完成し、.apkをビルドして、電話でテストしようとしています(デバッグなし、リリースモード)。

リンクを「なし」に設定すると、すべて正常に機能します。ここでの問題は、アプリが大きすぎることです-20MBで、それはごみです。


リンクに関する記事を読みました: ここをクリックしてください

そこで、「Sdkアセンブリのみ」と「Sdkとユーザーアセンブリ」を試してみました。2番目のオプション(両方のアセンブリ)が直接失敗し、アプリの最初の画面(ログイン)も表示されませんでした。

Linkingを" SdkAssemblies Only "に設定すると、最初の画面(ログイン画面)にたどり着くことができました。このアプリは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>

4

2 に答える 2

6

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

これをしなければならないのは面倒です...しかし、それほど時間はかかりません-ほとんどのアプリは実際には多くの異なるプロパティ/イベントにバインドしていません。

于 2013-03-25T11:57:22.593 に答える
0

progressBarincludeメソッドを次のように変更します

    public void Include(ProgressBar progressBar)
    {
        progressBar.Visibility = progressBar.Visibility;
    }

そしてそれはうまくいった。私は他のすべてを削除し、それらはすべて動作し始めました。ProgressBar Visibilityプロパティのゲッターとセッターの両方をテストしているので、これは機能していると思います。

これがこの作業の正しい理由ではない場合、誰かがコメントを追加する可能性があるため、将来これらの問題を修正する方法を理解することができます

于 2014-12-03T09:17:12.783 に答える