Repository navigation
App Crashes when using bundle.config with abi splits set to negate. #8979
Description
Activity
- addedArea: App RuntimeIssues in `libmonodroid.so`.Issues in `libmonodroid.so`.needs-triageIssues that need to be assigned.Issues that need to be assigned.
on May 23, 2024 - removedneeds-triageIssues that need to be assigned.Issues that need to be assigned.
on May 23, 2024 So I think I know what is causing the issue
This is the contents of the apks file which google will generate for a specific device.
This is with negate set to false
extracting: foo/toc.pb extracting: foo/asset-slices/assetpack1-astc.apk extracting: foo/asset-slices/assetpack1-dxt1.apk extracting: foo/asset-slices/assetpack1-etc1_rgb8.apk extracting: foo/asset-slices/assetpack1-master.apk extracting: foo/asset-slices/assetpack1-paletted.apk extracting: foo/splits/base-arm64_v8a.apk extracting: foo/splits/base-arm64_v8a_2.apk extracting: foo/splits/base-armeabi_v7a.apk extracting: foo/splits/base-armeabi_v7a_2.apk extracting: foo/splits/base-master.apk extracting: foo/splits/base-master_2.apk extracting: foo/splits/base-master_3.apk extracting: foo/splits/base-x86.apk extracting: foo/splits/base-x86_2.apk extracting: foo/splits/base-x86_64.apk extracting: foo/splits/base-x86_64_2.apkThis is with it set to true
extracting: foo/toc.pb extracting: foo/asset-slices/assetpack1-astc.apk extracting: foo/asset-slices/assetpack1-dxt1.apk extracting: foo/asset-slices/assetpack1-etc1_rgb8.apk extracting: foo/asset-slices/assetpack1-master.apk extracting: foo/asset-slices/assetpack1-paletted.apk extracting: foo/splits/base-master.apk extracting: foo/splits/base-master_2.apk extracting: foo/splits/base-master_3.apkIf we look at the contents of "base-master.apk" in the latter, we see that it contains ALL .so files for all abis not just the resources. On the former , those .so files are split into a seperate base-XXX.apk .
So I tried this patch https://gist.github.com/dellis1972/2a3f62c4b7728dd33c621d823640fba7
This adds an additional fallback to
if (Util::ends_with (apk, SharedConstants::split_config_abi_apk_name)) {if (Util::ends_with (apk, SharedConstants::split_config_abi_apk_name) || Util::ends_with (apk, SharedConstants::base_apk_name)) {Now I get an error
Abort message: '/Users/dean/Documents/Sandbox/Xamarin/xamarin-android/src/native/monodroid/embedded-assemblies.hh:180 (ensure_valid_assembly_stores): Invalid or incomplete assembly store dataSo something about the assembly stores gets messed up by this.
The problem is here https://github.com/xamarin/xamarin-android/blob/main/src/native/runtime-base/android-system.cc#L740-L747
Previously, whenever split configs were present, the shared libraries always lived in a file named
split_config.ARCH.apk(withARCHreplaced by e.g.arm64) and so, for performance reasons, we skip scanning anything that's not a file named like that if we detect thatsplit_config.*files exist.In this case the split files do exist, but shared libraries are all in
base.apkand the architecture-specific split config doesn't exist at all:$ adb shell run-as com.xamarin.runapplicationwithassetpacktextureformats ls -l /data/app/~~SiaOe7UQLju6w_cxUf4LsA==/com.xamarin.runapplicationwithassetpacktextureformats-Z7cymJN9yrWULwTPJncm_Q==/ total 28479 -rw-r--r-- 1 system system 29080982 2024-05-24 18:07 base.apk drwxr-xr-x 3 system system 3452 2024-05-24 18:07 lib -rw-r--r-- 1 system system 8478 2024-05-24 18:07 split_assetpack1.apk -rw-r--r-- 1 system system 8559 2024-05-24 18:07 split_assetpack1.config.astc.apk -rw-r--r-- 1 system system 16808 2024-05-24 18:07 split_config.xxxhdpi.apk
I need to think about it a bit, so that we don't hurt startup performance with the fix.
- added a commit that references this issue
on Jun 17, 2024 - locked and limited conversation to collaborators
on Jul 19, 2024
Android application type
.NET Android (net7.0-android, net8.0-android, etc.)
Affected platform version
.net8.0-android, .net9.0-android
Description
When using a bundle.config with the following contents
{ "compression": { }, "optimizations": { "splitsConfig": { "splitDimension": [ { "value": "ABI", "negate": true } ], } } }the app crashes at runtime with the following error.
Steps to Reproduce
Did you find any workaround?
Changing
"negate": trueto"negate": falsefixes the issue.Relevant log output
No response