Приложение для Android слишком велико, а привязка отключает функциональность.

Я закончил свое приложение и теперь пытаюсь собрать .apk и протестировать его на своем телефоне (без отладки, в режиме выпуска).

Установив ссылку на «Нет», все работает нормально. Проблема здесь в том, что приложение слишком большое - его 20 МБ и это мусор.


Я прочитал эту статью о связывании: Нажмите здесь

Поэтому я попробовал «Только сборки Sdk» и «Сборки Sdk и пользовательские сборки». Второй вариант (обе сборки) не удался напрямую, я даже не смог увидеть первый экран (логин) моего приложения.

Когда для параметра «Связывание» установлено значение «Только сборки Sdk», я смог перейти на первый экран (экран входа в систему). Приложение также 6,73 МБ, что намного лучше и более приемлемо.

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что когда я нажимаю кнопку «Войти» на первом экране, ничего не происходит (обычно это перенаправляет меня к следующему действию).

Кнопка привязана к команде:

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>


person eMi    schedule 25.03.2013    source источник
comment
см. также stackoverflow.com/questions/14291696/   -  person Stuart    schedule 25.03.2013
comment
и stackoverflow.com/questions/14275499/ и stackoverflow.com/questions/11349864/   -  person Stuart    schedule 25.03.2013


Ответы (2)


С 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

Это раздражает... но это не займет много времени - большинство приложений на самом деле не привязываются ко многим различным свойствам/событиям.

person Stuart    schedule 25.03.2013

Я меняю метод включения progressBar на

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

и это сработало. Я удалил все остальные, и все они начали работать. Я предполагаю, что это работает, поскольку он проверяет как геттер, так и сеттер свойства ProgressBar Visibility.

Если это неправильная причина для этой работы, может ли кто-нибудь добавить комментарий, чтобы мы все могли понять, как исправить эти проблемы в будущем.

person rideintothesun    schedule 03.12.2014