Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Xamarin.Android.Build.Tasks] !Embed Assemblies == Debug Runtime (#654)
Fixes: https://bugzilla.xamarin.com/show_bug.cgi?id=56485 Scenario: Create an app, then change `$(Optimize)` in the Debug configuration to be True, with `$(EmbedAssembliesIntoApk)`=False (default for Debug configuration). Build, deploy, run the app. Expected results: it works! Actual results: Not so much: F/monodroid: No assemblies found in '(null)' or '<unavailable>'. Assuming this is part of Fast Deployment. Exiting.. What went wrong is Commit 1e0e083: making `$(Optimize)` *the* switch to control whether the Debug or Release runtime is used means that a "Debug" configuration with `$(Optimize)`=True is treated as requiring a *Release runtime*, which means the external assembly directory isn't used and doesn't exist. Attempt to address this by bringing `$(EmbedAssembliesIntoApk)` into the picture: if it's False -- i.e. fast deployment -- then it "overrides" the `$(Optimize)` value when it comes to the `$(AndroidIncludeDebugSymbols)` property. (The `$(AndroidIncludeDebugSymbols)` property controls whether the Debug or Release runtime is used. Yes, this name doesn't make sense.) This means for greater sanity we now need a truth table: Input Property: || Output Property DebugSymbols | DebugType | EmbedAssembliesIntoApk | Optimize || AndroidIncludeDebugSymbols ================+============+==========================+============++=========================== True *any* True True False (Release runtime) True *any* True False True (Debug runtime) True *any* False True True (Debug runtime) True *any* False False True (Debug runtime) True *empty* True True True (Debug runtime) True *empty* True False True (Debug runtime) True *empty* False True True (Debug runtime) True *empty* False False True (Debug runtime) False - - - False (Release runtime) Question: Should `$(DebugSymbols)` *truly* be the controlling factor, i.e. when `$(DebugSymbols)`=False the Release runtime is always used. Additionally, update `$(AndroidUseDebugRuntime)` so that it also takaes `$(EmbedAssembliesIntoApk)` into consideration.
- Loading branch information