Skip to content

Commit 004c2d3

Browse files
committed
Stop using __Internal in our p/invoke calls
The .NET5 version of the Mono runtime "hijacked" `__Internal` for its own purposes and the change causes us trouble when trying to resolve p/invokes from our managed code to our runtime. Instead we now use `monodroid` to specify the p/invoke library name.
1 parent f52e89f commit 004c2d3

9 files changed

Lines changed: 53 additions & 29 deletions

File tree

build-tools/installers/create-installers.targets

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@
287287
<_MSBuildFilesWin Include="$(MSBuildSrcDir)\ndk\x86_64-linux-android-ld.exe" />
288288
<_MSBuildFilesWin Include="$(MSBuildSrcDir)\ndk\x86_64-linux-android-strip.exe" />
289289
<_MSBuildFilesWin Include="$(MSBuildSrcDir)\ndk\libwinpthread-1.dll" />
290-
<_MSBuildLibHostFilesWin Include="$(MSBuildSrcDir)\lib\host-mxe-Win64\libmono-android.debug.dll" Condition=" '$(HostOS)' != 'Windows' " />
290+
<_MSBuildLibHostFilesWin Include="$(MSBuildSrcDir)\lib\host-mxe-Win64\monodroid.dll" Condition=" '$(HostOS)' != 'Windows' " />
291291
<_MSBuildLibHostFilesWin Include="$(MSBuildSrcDir)\lib\host-mxe-Win64\libmono-android.release.dll" Condition=" '$(HostOS)' != 'Windows' " />
292292
<_MSBuildLibHostFilesWin Include="$(MSBuildSrcDir)\lib\host-mxe-Win64\libMonoPosixHelper.dll" />
293293
<_MSBuildLibHostFilesWin Include="$(MSBuildSrcDir)\lib\host-mxe-Win64\libmonosgen-2.0.dll" />
@@ -323,7 +323,7 @@
323323
<_MSBuildFilesUnix Include="$(MSBuildSrcDir)\$(HostOS)\mono.config" />
324324
<_MSBuildFilesUnix Include="$(MSBuildSrcDir)\$(HostOS)\mono-symbolicate" />
325325
<_MSBuildFilesUnixSignAndHarden Include="$(MSBuildSrcDir)\$(HostOS)\aapt2" />
326-
<_MSBuildFilesUnixSign Include="$(MSBuildSrcDir)\lib\host-$(HostOS)\libmono-android.debug.$(LibExtension)" Condition=" '$(PackageId)' != 'Microsoft.Android.Sdk' " />
326+
<_MSBuildFilesUnixSign Include="$(MSBuildSrcDir)\lib\host-$(HostOS)\libmonodroid.$(LibExtension)" Condition=" '$(PackageId)' != 'Microsoft.Android.Sdk' " />
327327
<_MSBuildFilesUnixSign Include="$(MSBuildSrcDir)\lib\host-$(HostOS)\libmono-android.release.$(LibExtension)" Condition=" '$(PackageId)' != 'Microsoft.Android.Sdk' " />
328328
<_MSBuildFilesUnixSign Include="$(MSBuildSrcDir)\lib\host-$(HostOS)\libmono-native.$(LibExtension)" Condition=" '$(PackageId)' != 'Microsoft.Android.Sdk' " />
329329
<_MSBuildFilesUnixSign Include="$(MSBuildSrcDir)\lib\host-$(HostOS)\libmono-profiler-aot.$(LibExtension)" Condition=" '$(PackageId)' != 'Microsoft.Android.Sdk' " />

src/Mono.Android/Android.Runtime/AndroidEnvironment.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ static string GetDefaultTimeZone ()
283283
}
284284
}
285285

286-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
286+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
287287
static extern IntPtr _monodroid_timezone_get_default_id ();
288288

289289
// This is invoked by
@@ -304,7 +304,7 @@ static string GetDefaultTimeZone ()
304304
// These are invoked by
305305
// System.dll!System.AndroidPlatform.getifaddrs
306306
// DO NOT REMOVE
307-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
307+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
308308
static extern int _monodroid_getifaddrs (out IntPtr ifap);
309309

310310
static int GetInterfaceAddresses (out IntPtr ifap)
@@ -315,15 +315,15 @@ static int GetInterfaceAddresses (out IntPtr ifap)
315315
// These are invoked by
316316
// System.dll!System.AndroidPlatform.freeifaddrs
317317
// DO NOT REMOVE
318-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
318+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
319319
static extern void _monodroid_freeifaddrs (IntPtr ifap);
320320

321321
static void FreeInterfaceAddresses (IntPtr ifap)
322322
{
323323
_monodroid_freeifaddrs (ifap);
324324
}
325325

326-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
326+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
327327
static extern void _monodroid_detect_cpu_and_architecture (ref ushort built_for_cpu, ref ushort running_on_cpu, ref byte is64bit);
328328

329329
static void DetectCPUAndArchitecture (out ushort builtForCPU, out ushort runningOnCPU, out bool is64bit)

src/Mono.Android/Android.Runtime/AndroidRuntime.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public AndroidRuntimeOptions (IntPtr jnienv,
100100

101101
class AndroidObjectReferenceManager : JniRuntime.JniObjectReferenceManager {
102102

103-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
103+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
104104
static extern int _monodroid_gref_get ();
105105

106106
public override int GlobalReferenceCount {

src/Mono.Android/Android.Runtime/JNIEnv.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -66,16 +66,16 @@ public static partial class JNIEnv {
6666

6767
internal static AndroidValueManager? AndroidValueManager;
6868

69-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
69+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
7070
extern static void monodroid_log (LogLevel level, LogCategories category, string message);
7171

72-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
72+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
7373
internal extern static IntPtr monodroid_timing_start (string? message);
7474

75-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
75+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
7676
internal extern static void monodroid_timing_stop (IntPtr sequence, string? message);
7777

78-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
78+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
7979
internal extern static void monodroid_free (IntPtr ptr);
8080

8181
public static IntPtr Handle {
@@ -292,7 +292,7 @@ internal static void PropagateUncaughtException (IntPtr env, IntPtr javaThreadPt
292292
}
293293
}
294294

295-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
295+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
296296
extern static void _monodroid_gc_wait_for_bridge_processing ();
297297

298298
#pragma warning disable CS0649 // Field is never assigned to. This field is assigned from monodroid-glue.cc.
@@ -306,7 +306,7 @@ public static void WaitForBridgeProcessing ()
306306
_monodroid_gc_wait_for_bridge_processing ();
307307
}
308308

309-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
309+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
310310
extern static IntPtr _monodroid_get_identity_hash_code (IntPtr env, IntPtr value);
311311

312312
internal static Func<IntPtr, IntPtr>? IdentityHash;
@@ -593,25 +593,25 @@ internal static void DeleteRef (IntPtr handle, JniHandleOwnership transfer)
593593
}
594594
}
595595

596-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
596+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
597597
internal static extern int _monodroid_gref_log (string message);
598598

599-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
599+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
600600
internal static extern int _monodroid_gref_log_new (IntPtr curHandle, byte curType, IntPtr newHandle, byte newType, string? threadName, int threadId, [In] StringBuilder? from, int from_writable);
601601

602-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
602+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
603603
internal static extern void _monodroid_gref_log_delete (IntPtr handle, byte type, string? threadName, int threadId, [In] StringBuilder? from, int from_writable);
604604

605-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
605+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
606606
internal static extern void _monodroid_weak_gref_new (IntPtr curHandle, byte curType, IntPtr newHandle, byte newType, string? threadName, int threadId, [In] StringBuilder? from, int from_writable);
607607

608-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
608+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
609609
internal static extern void _monodroid_weak_gref_delete (IntPtr handle, byte type, string? threadName, int threadId, [In] StringBuilder? from, int from_writable);
610610

611-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
611+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
612612
internal static extern int _monodroid_lref_log_new (int lrefc, IntPtr handle, byte type, string? threadName, int threadId, [In] StringBuilder from, int from_writable);
613613

614-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
614+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
615615
internal static extern void _monodroid_lref_log_delete (int lrefc, IntPtr handle, byte type, string? threadName, int threadId, [In] StringBuilder from, int from_writable);
616616

617617
public static IntPtr NewGlobalRef (IntPtr jobject)

src/Mono.Android/Android.Runtime/Logger.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public static void Log (LogLevel level, string appname, string? log) {
6060
}
6161
}
6262

63-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
63+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
6464
extern static uint monodroid_get_log_categories ();
6565

6666
static Logger ()

src/Mono.Android/Java.Interop/Runtime.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@ public static List<WeakReference> GetSurfacedObjects ()
2020
return r;
2121
}
2222

23-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
23+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
2424
static extern int _monodroid_max_gref_get ();
2525

2626
public static int MaxGlobalReferenceCount {
2727
get {return _monodroid_max_gref_get ();}
2828
}
2929

30-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
30+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
3131
static extern int _monodroid_gref_get ();
3232

3333
public static int GlobalReferenceCount {

src/Mono.Android/Java.Interop/TypeManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public static Dictionary<Type, string> ManagedToJni {
3838
}
3939

4040
public static partial class TypeManager {
41-
[DllImport ("__Internal", CallingConvention = CallingConvention.Cdecl)]
41+
[DllImport ("monodroid", CallingConvention = CallingConvention.Cdecl)]
4242
extern static IntPtr monodroid_TypeManager_get_java_class_name (IntPtr klass);
4343

4444
internal static string GetClassName (IntPtr class_ptr)

src/monodroid/CMakeLists.txt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,8 +334,25 @@ if(NOT WIN32 AND NOT MINGW AND CMAKE_BUILD_TYPE STREQUAL Debug)
334334
endif()
335335

336336
string(TOLOWER ${CMAKE_BUILD_TYPE} MONO_ANDROID_SUFFIX)
337-
set(MONO_ANDROID_LIB "mono-android.${MONO_ANDROID_SUFFIX}")
337+
if(ENABLE_NDK OR CMAKE_BUILD_TYPE STREQUAL Release)
338+
set(MONO_ANDROID_LIB "mono-android.${MONO_ANDROID_SUFFIX}")
339+
else()
340+
if(WIN32 OR MINGW)
341+
set(CMAKE_SHARED_LIBRARY_PREFIX "")
342+
endif()
343+
set(MONO_ANDROID_LIB "monodroid")
344+
endif()
345+
338346
add_library(${MONO_ANDROID_LIB} SHARED ${MONODROID_SOURCES})
347+
348+
if(WIN32 OR MINGW)
349+
message(STATUS "Setting output name to ${MONO_ANDROID_LIB}")
350+
set_target_properties(${MONO_ANDROID_LIB}
351+
PROPERTIES
352+
LIBRARY_OUTPUT_NAME ${MONO_ANDROID_LIB}
353+
)
354+
endif()
355+
339356
if(APPLE)
340357
add_custom_command(
341358
TARGET ${MONO_ANDROID_LIB}

src/monodroid/monodroid.targets

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,17 @@
9999
/>
100100
</Target>
101101

102+
<Target Name="_PrepareMonodroidDSO">
103+
<PropertyGroup>
104+
<_MonodroidBaseName Condition=" '$(HostOS)' == 'Windows' ">monodroid</_MonodroidBaseName>
105+
<_MonodroidBaseName Condition=" '$(HostOS)' != 'Windows' ">libmonodroid</_MonodroidBaseName>
106+
</PropertyGroup>
107+
</Target>
108+
102109
<Target Name="_BuildHostRuntimes"
103-
DependsOnTargets="_CreateJavaInteropDllConfigs"
110+
DependsOnTargets="_CreateJavaInteropDllConfigs;_PrepareMonodroidDSO"
104111
Inputs="@(_HostRuntime->'$(IntermediatePath)%(OutputDirectory)-Debug\CMakeCache.txt');@(_HostRuntime->'$(IntermediatePath)%(OutputDirectory)-Release\CMakeCache.txt');jni\*.cc;jni\*.h;jni\*.hh;jni\**\*.c;"
105-
Outputs="@(_HostRuntime->'$(OutputPath)%(OutputDirectory)\libmono-android.debug.%(NativeLibraryExtension)');@(_HostRuntime->'$(OutputPath)%(OutputDirectory)\libmono-android.release.%(NativeLibraryExtension)');@(_HostRuntime->'$(OutputPath)%(OutputDirectory)\libxamarin-app.%(NativeLibraryExtension)')">
112+
Outputs="@(_HostRuntime->'$(OutputPath)%(OutputDirectory)\$(_MonodroidBaseName).%(NativeLibraryExtension)');@(_HostRuntime->'$(OutputPath)%(OutputDirectory)\libmono-android.release.%(NativeLibraryExtension)');@(_HostRuntime->'$(OutputPath)%(OutputDirectory)\libxamarin-app.%(NativeLibraryExtension)')">
106113
<Message Text="Building host runtime %(_HostRuntime.Identity) in $(OutputPath)%(_HostRuntime.OutputDirectory)"/>
107114
<MakeDir Directories="$(OutputPath)%(_HostRuntime.OutputDirectory)" />
108115

@@ -111,8 +118,8 @@
111118
WorkingDirectory="$(IntermediateOutputPath)%(_HostRuntime.OutputDirectory)-Debug"
112119
/>
113120
<Copy
114-
SourceFiles="@(_HostRuntime->'$(OutputPath)%(OutputDirectory)\libmono-android.debug.%(NativeLibraryExtension)')"
115-
DestinationFiles="@(_HostRuntime->'$(OutputPath)%(OutputDirectory)\libmono-android.debug.d.%(NativeLibraryExtension)')"
121+
SourceFiles="@(_HostRuntime->'$(OutputPath)%(OutputDirectory)\$(_MonodroidBaseName).%(NativeLibraryExtension)')"
122+
DestinationFiles="@(_HostRuntime->'$(OutputPath)%(OutputDirectory)\$(_MonodroidBaseName).d.%(NativeLibraryExtension)')"
116123
/>
117124

118125
<Exec

0 commit comments

Comments
 (0)