Use the new Xamarin.Android features and open up an issue with your results
-
Ensure you're on at least a 16.2/8.2 version of Visual Studio 2019 or Visual Studio for Mac respectfully.
-
Enable Diagnostic MSBuild Output or use MSBuild BinLog.
-
Open up the Android Device Log by going to
Tools > Android > Device Log
-
Familiarize yourself with the Android Project Options Screen
You're ready to begin the challenge! Pick your challenge below, or do all three!
Within a .csproj, add the following properties to your current configuration:
<PropertyGroup>
<AndroidUseAapt2>true</AndroidUseAapt2>
<AndroidDexTool>d8</AndroidDexTool>
<DebugType>portable</DebugType>
<ProduceReferenceAssembly>True</ProduceReferenceAssembly>
</PropertyGroup>
Build Times should be measured with a Debug
configuration. To measure the performance, enable Diagnostic MSBuild Output or use MSBuild BinLog to provide the time elapsed.
Bonus: If you can include a full MSBuild Output or MSBuild BinLog, this will help us understand where time is allocated to each target and task while building your app! This will help us understand bottlenecks and where to improve in the future.
Before Cold Build Times Changes:
Time Elapsed 00:00:15.77
After Cold Build Times Changes:
Time Elapsed 00:00:14.85
Note: To do a cold build, Clean
your project prior to building.
Before Incremental Build Times Changes:
Time Elapsed 00:00:02.67
After Incremental Build Times Changes:
Time Elapsed 00:00:02.43
Note: To do an incremental build, change a single piece of code (XAML / C# / etc) and deploy your project.
Within a .csproj, add the following property to your release configuration:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<AndroidEnableProfiledAot>true</AndroidEnableProfiledAot>
</PropertyGroup>
Startup Times should be measured with a Release
configuration. To measure the performance, with the Android Device Log, add a filter to search for ActivityManager: Displayed
to which you will be provided a timing of your application such as:
Before Startup Tracing:
2019-08-19 09:35:43.374 1870-1892/? I/ActivityManager: Displayed com.companyname.startuptiming/md5984e4549386b302a2fd47914e0849f36.MainActivity: +2s995ms
After Startup Tracing:
2019-08-19 09:37:40.504 1870-1892/? I/ActivityManager: Displayed com.companyname.startuptiming/md5984e4549386b302a2fd47914e0849f36.MainActivity: +1s760ms
Note: The checkbox for Startup Tracing is included in Visual Studio 2019 16.3 Preview 2 and Visual Studio 2019 8.3 Preview 2.
Within a .csproj, add the following properties to your release configuration:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<AndroidPackageFormat>aab</AndroidPackageFormat>
<AndroidDexTool>d8</AndroidDexTool>
<AndroidLinkTool>r8</AndroidLinkTool>
</PropertyGroup>
Now create an Android App Bundle via the command line:
msbuild -restore AndroidApp.csproj
-t:SignAndroidPackage
-p:Configuration=Release
-p:AndroidKeyStore=True
-p:AndroidSigningKeyStore=com.contoso.keystore
-p:AndroidSigningStorePass=password
-p:AndroidSigningKeyAlias=keyAlias
-p:AndroidSigningKeyPass=password
Application size should be measured with a Release
configuration and signed package. To measure the perceived app download size, you can use Android Studio's APK Analyzer or with the following command in your Android SDK/tools/bin
location:
apkanalyzer -h apk download-size myapk.apk
or
apkanalyzer -h apk download-size myaab.aab
Note: apkanalyzer may not work on Windows.
Before Application Size Changes:
App download size: 23.6MB
After Application Size Changes:
App download size: 4.82MB