Xamarin Forms - Iniciando mais rápido no Android (Startup Tracing)


  Neste artigo veremos como iniciar aplicações Xamarin Forms mais rapidamente no Android.

A inicialização das aplicações Xamarin Forms no Android já foi muito frustrante e melhorou bastante mas ainda deixava a desejar.

Durante os anos, a equipe do Xamarin tentou muito melhorar isso, às vezes com melhorias muito pequenas e outras vezes com melhorias um pouco melhores, mas agora usando versões do Visual Studio superior a 16.5, eles fizeram algo incrível, algo chamado Startup Tracing com custom Profiles.

De acordo com Xamarin (veja a postagem completa aqui), estes são os resultados da habilitação dessas opções:

Tipo Velocidade de Inicialização Tamanho do apk
Normal 2s914ms 16MB
AOT 1s18ms 34MB
Startup Tracing 1s518ms 20MB

Isso significa que AOT é incrível e você deve habilitá-lo, mas se você se preocupa com o tamanho do apk, você definitivamente deve habilitar o rastreamento de inicialização também, assim você obterá uma incrível melhoria na velocidade de inicialização sem afetar muito o tamanho do apk.

Então vejamos cada um destes conceitos.

Startup Tracing (Rastreamento de inicialização)

Eu não vou entrar nos detalhes envolvendo o recurso Startup Tracing vou dar apenas a definição e como  habilitá-lo.

O runtime do Mono fornece um recurso antecipado (AOT) que o Mono usar para pré-compilar assemblies para minimizar o tempo JIT e reduzir o uso de memória.

Com isso o Mono introduziu um recurso que permite usar um criador de perfil AOT integrado em um aplicativo para gerar um perfil AOT. O criador de perfil conduz perfis de memória, perfis de tempo de execução e até mesmo uma amostragem baseada em estatísticas para perfis. Isso gera um perfil AOT que pode ser usado para otimizar seu aplicativo ao usar o recurso AOT do Mono com um perfil.

Para habilitar este recurso podemos abrir a janela de propriedades do projeto Android e selecionar Android Options;

A seguir em - Code Generation and Runtime - basta marcar a opção :  Enable Startup Tracing

Outra forma seria editar o arquivo de projeto(.csproj) Android e e adicionando a seguinte propriedade dentro do seu Release <PropertyGroup>:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <AndroidEnableProfiledAot>true</AndroidEnableProfiledAot>
</PropertyGroup>

Ao habilitar esta opção, o criador de perfil fará sua mágica (memória, tempo de execução e algumas estatísticas) para criar um perfil para seu aplicativo para aumentar o desempenho sem afetar muito o tamanho do apk.

Custom Profiles (Perfil Personalizado)

O que é um Custom Profile ou perfil personalizado ?

Um perfil customizado é um perfil gerado com base na execução de um criador de perfil integrado em seu aplicativo para descobrir quais métodos são compilados por JIT durante a inicialização. O perfil personalizado pode então ser usado em seu aplicativo para que seus usuários acessem seu aplicativo ainda mais rápido.

Atualmente (março/2020)  você pode começar a usar perfis personalizados com rastreamento de inicialização por meio da linha da comando e do MSBuild. Em uma versão futura do Visual Studio, você poderá gravar perfis personalizados dentro do IDE! (Palavra da Microsoft).

Então vamos criar um perfil personalizado via linha de comando:

- Abra um prompt de comando ou terminal no diretório do seu projeto Android que contém o .csproj;

- Certifique-se de que apenas um dispositivo Android esteja conectado;

- No arquivo Manifest do Android em Required Permissions , na página de propriedades do projeto do Visual Studio, certifique-se de que a permissão INTERNET esteja habilitada;

- digite o comando: msbuild / t: BuildAndStartAotProfiling

- Deixe seu aplicativo ser executado até que seja carregado.

- digite o comando : msbuild / t: FinishAotProfiling

- Isso adicionará um arquivo custom.aprof ao seu projeto, que você deseja alterar a propriedade Build to action para AndroidAotProfile. Para fazer isso adicione o seguinte <ItemGroup> ao seu .csproj:

   <ItemGroup> <AndroidAotProfile Include = "$ (MSBuildThisFileDirectory) custom.aprof" /> </ItemGroup>

- Por fim, você precisará incluir duas propriedades do MSBuild em sua configuração de versão para habilitar o recurso e usar o perfil personalizado :

<PropertyGroup>
   <AndroidEnableProfiledAot> true </AndroidEnableProfiledAot>
    <AndroidUseDefaultAotProfile> false </AndroidUseDefaultAotProfile>
</PropertyGroup>

Pronto !

Agora você pode gravar e usar perfis personalizados ao usar o rastreamento de inicialização no Android. Isso fornece o melhor tempo de inicialização do aplicativo com um ligeiro aumento no tamanho do APK.

No futuro, você poderá gravar perfis no Visual Studio e Visual Studio para Mac.

"Por isso não desfalecemos; mas, ainda que o nosso homem exterior se corrompa, o interior, contudo, se renova de dia em dia."
2 Coríntios 4:16

Referências:


José Carlos Macoratti