Commit 522d7fb
authored
Revert "[One .NET] $(AndroidEnablePreloadAssemblies)=False by default" (#5811)
Context: #5838
This reverts commit d13d0f9.
Commit d13d0f9 inadvertently broke the
[`DebuggingTest.ClassLibraryMainLauncherRuns()` unit test][0], when
using a test app which:
1. Uses .NET 6, which -- because of d13d0f9 -- sets
`$(AndroidEnablePreloadAssemblies)`=False by default -- with-
2. A "Debug" build (Fast Deployment enabled), with-
3. `$(AndroidLinkResources)`=False (the default; see also 9e6ce03),
and-
4. launching the app, which
5. Loads an `Activity` subclass located in an assembly which is
*not* the "main" App assembly
then the app crashes during process startup:
android.runtime.JavaProxyThrowable: System.NullReferenceException: Object reference not set to an instance of an object
at MyLibrary.MainActivity.OnCreate(Bundle bundle)
at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_(IntPtr jnienv, IntPtr native__this, IntPtr native_savedInstanceState)
at com.xamarin.classlibrarymainlauncherruns.MainActivity.n_onCreate(Native Method)
at com.xamarin.classlibrarymainlauncherruns.MainActivity.onCreate(MainActivity.java:29)
The cause of the crash is that, because not all assemblies are loaded
as part of process startup -- the whole *point* to d13d0f9 and
defaulting `$(AndroidEnablePreloadAssemblies)`=False -- then
[`ResourceIdManager.UpdateIdValues()`][1] isn't able to update all
fields in all `Resource` types to have the values from the app's
`Resource.designer.cs` file. Consequently, the values *may* be
invalid, and thus the `NullReferenceException`.
As an "immediate" fix is not quickly forthcoming -- though enabling
`$(AndroidLinkResources)`=False *by default* is an "interesting"
solution, with unknown inner dev loop performance implications --
we're reverting commit d13d0f9.
Issue #5838 will track the re-enabling of
`$(AndroidEnablePreloadAssemblies)`=False by default in .NET 6 apps.
~~~
Additionally, update `DebuggingTest.ClassLibraryMainLauncherRuns()`
so that `Resources\layout\foo.xml` contains *valid* layout XML.
It was originally:
<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
/>
which would crash with:
Java.Lang.RuntimeException: Unable to start activity ComponentInfo{com.xamarin.classlibrarymainlauncherruns/com.xamarin.classlibrarymainlauncherruns.MainActivity}:
android.view.InflateException: Binary XML file line #1 in com.xamarin.classlibrarymainlauncherruns:layout/foo: Binary XML file line #1: You must supply a layout_width attribute.
---> Android.Views.InflateException: Binary XML file line #1 in com.xamarin.classlibrarymainlauncherruns:layout/foo: Binary XML file line #1: You must supply a layout_width attribute.
---> Java.Lang.UnsupportedOperationException: Binary XML file line #1: You must supply a layout_width attribute.
--- End of managed Java.Lang.UnsupportedOperationException stack trace ---
java.lang.UnsupportedOperationException: Binary XML file line #1: You must supply a layout_width attribute.
because the layout XML was, in fact, invalid, as it wasn't providing
the required `android:layout_width` attribute.
Update `foo.xml` so that it has valid layout XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>"
This way we won't be chasing invalid XML going forward.
The above `UnsupportedOperationException` *hid* the
`NullReferenceException` in d13d0f9; the `NullReferenceException`
wasn't visible until after the invalid XML was fixed.
[0]: https://github.com/xamarin/xamarin-android/blob/bf4f4f42af26cdddb46087deed59aae8424f7942/tests/MSBuildDeviceIntegration/Tests/DebuggingTest.cs#L74-L124
[1]: https://github.com/xamarin/xamarin-android/blob/bf4f4f42af26cdddb46087deed59aae8424f7942/src/Mono.Android/Android.Runtime/ResourceIdManager.cs#L9-L311 parent 65bf398 commit 522d7fb
File tree
3 files changed
+9
-8
lines changed- src/Xamarin.Android.Build.Tasks
- Tests/Xamarin.Android.Build.Tests
- tests/MSBuildDeviceIntegration/Tests
3 files changed
+9
-8
lines changedLines changed: 1 addition & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3932 | 3932 | | |
3933 | 3933 | | |
3934 | 3934 | | |
3935 | | - | |
3936 | | - | |
3937 | | - | |
3938 | | - | |
3939 | | - | |
| 3935 | + | |
3940 | 3936 | | |
3941 | 3937 | | |
3942 | 3938 | | |
| |||
Lines changed: 1 addition & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
290 | 290 | | |
291 | 291 | | |
292 | 292 | | |
293 | | - | |
294 | | - | |
| 293 | + | |
295 | 294 | | |
296 | 295 | | |
297 | 296 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
102 | 102 | | |
103 | 103 | | |
104 | 104 | | |
105 | | - | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
106 | 112 | | |
107 | 113 | | |
108 | 114 | | |
| |||
0 commit comments