Skip to content

Commit 8d62e3a

Browse files
committed
Fix DSO count when building
Also, runtime config blob will no longer be packaged in the APK, stop checking whether it was found.
1 parent 955170e commit 8d62e3a

File tree

3 files changed

+38
-13
lines changed

3 files changed

+38
-13
lines changed

src/Xamarin.Android.Build.Tasks/Tasks/GeneratePackageManagerJava.cs

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -285,10 +285,34 @@ void AddEnvironment ()
285285
// pkgmgr.WriteLine ("\t\t\"" + Path.GetFileName (assembly) + "\",");
286286
//}
287287

288-
pkgmgr.WriteLine ("\t};");
288+
var uniqueNativeLibraries = new List<ITaskItem> ();
289+
290+
// Number of DSOs that will be packaged, it may be different to the number of items in the above
291+
// `uniqueNativeLibraries` list.
292+
uint packagedNativeLibrariesCount = 0;
293+
var seenNativeLibraryNames = new HashSet<string> (StringComparer.OrdinalIgnoreCase);
294+
if (NativeLibraries != null) {
295+
foreach (ITaskItem item in NativeLibraries) {
296+
// We don't care about different ABIs here, just the file name
297+
string name = Path.GetFileName (item.ItemSpec);
298+
if (seenNativeLibraryNames.Contains (name)) {
299+
continue;
300+
}
289301

290-
pkgmgr.WriteLine ("}");
291-
pkgmgr.Flush ();
302+
if (!ELFHelper.IsEmptyAOTLibrary (Log, item.ItemSpec)) {
303+
packagedNativeLibrariesCount++;
304+
}
305+
306+
seenNativeLibraryNames.Add (name);
307+
uniqueNativeLibraries.Add (item);
308+
}
309+
310+
// libxamarin-app.so is not in NativeLibraries, but we must count it
311+
if (!seenNativeLibraryNames.Contains ("libxamarin-app.so")) {
312+
uniqueNativeLibraries.Add (new TaskItem ("libxamarin-app.so"));
313+
packagedNativeLibrariesCount++;
314+
}
315+
}
292316

293317
// Only copy to the real location if the contents actually changed
294318
var dest = Path.GetFullPath (Path.Combine (OutputDirectory, "MonoPackageManager_Resources.java"));
@@ -326,6 +350,7 @@ void AddEnvironment ()
326350
BundledAssemblyNameWidth = assemblyNameWidth,
327351
MonoComponents = (MonoComponent)monoComponents,
328352
NativeLibraries = uniqueNativeLibraries,
353+
PackagedNativeLibrariesCount = packagedNativeLibrariesCount,
329354
HaveAssemblyStore = UseAssemblyStore,
330355
AndroidRuntimeJNIEnvToken = android_runtime_jnienv_class_token,
331356
JNIEnvInitializeToken = jnienv_initialize_method_token,

src/Xamarin.Android.Build.Tasks/Utilities/ApplicationConfigNativeAssemblyGenerator.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ sealed class XamarinAndroidBundledAssembly
194194
public MonoComponent MonoComponents { get; set; }
195195
public PackageNamingPolicy PackageNamingPolicy { get; set; }
196196
public List<ITaskItem> NativeLibraries { get; set; }
197+
public uint PackagedNativeLibrariesCount { get; set; }
197198
public bool MarshalMethodsEnabled { get; set; }
198199
public bool ManagedMarshalMethodsLookupEnabled { get; set; }
199200
public bool IgnoreSplitConfigs { get; set; }
@@ -248,7 +249,7 @@ protected override void Construct (LlvmIrModule module)
248249
environment_variable_count = (uint)(environmentVariables == null ? 0 : environmentVariables.Count * 2),
249250
system_property_count = (uint)(systemProperties == null ? 0 : systemProperties.Count * 2),
250251
number_of_assemblies_in_apk = (uint)NumberOfAssembliesInApk,
251-
number_of_shared_libraries = (uint)NativeLibraries.Count,
252+
number_of_shared_libraries = PackagedNativeLibrariesCount,
252253
bundled_assembly_name_width = (uint)BundledAssemblyNameWidth,
253254
number_of_dso_cache_entries = (uint)dsoCache.Count,
254255
number_of_aot_cache_entries = (uint)aotDsoCache.Count,

src/native/mono/monodroid/embedded-assemblies.hh

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -351,8 +351,7 @@ namespace xamarin::android::internal {
351351
static bool all_required_zip_entries_found () noexcept
352352
{
353353
return
354-
number_of_mapped_assembly_stores == number_of_assembly_store_files && number_of_zip_dso_entries >= application_config.number_of_shared_libraries
355-
&& ((application_config.have_runtime_config_blob && runtime_config_blob_found) || !application_config.have_runtime_config_blob);
354+
number_of_mapped_assembly_stores == number_of_assembly_store_files && number_of_zip_dso_entries >= application_config.number_of_shared_libraries;
356355
}
357356

358357
[[gnu::always_inline]] static c_unique_ptr<char> to_utf8 (const MonoString *s) noexcept
@@ -461,13 +460,13 @@ namespace xamarin::android::internal {
461460
#endif // DEBUG
462461
static inline const char *assemblies_prefix_override = nullptr;
463462

464-
static inline md_mmap_info runtime_config_blob_mmap{};
465-
static inline void *runtime_config_data = nullptr;
466-
static inline size_t runtime_config_data_size = 0uz;
467-
static inline bool runtime_config_blob_found = false;
468-
static inline uint32_t number_of_mapped_assembly_stores = 0u;
469-
static inline uint32_t number_of_zip_dso_entries = 0u;
470-
static inline bool need_to_scan_more_apks = true;
463+
md_mmap_info runtime_config_blob_mmap{};
464+
void *runtime_config_data = nullptr;
465+
size_t runtime_config_data_size = 0uz;
466+
bool runtime_config_blob_found = embedded_runtime_config_size > 0u;
467+
uint32_t number_of_mapped_assembly_stores = 0u;
468+
uint32_t number_of_zip_dso_entries = 0u;
469+
bool need_to_scan_more_apks = true;
471470

472471
static inline AssemblyStoreIndexEntry *assembly_store_hashes = nullptr;
473472
static inline xamarin::android::mutex assembly_decompress_mutex {};

0 commit comments

Comments
 (0)