I’m making an attempt to load MyCLib.so on Android and use __Internal on iOS. However it throws “DllNotFoundException” on Android and crashes straight away on iOS. After many makes an attempt, I added DllImportResolver which brought about no change in any respect. This code can load libSkiaSharp.so however it might probably’t load my native library which is current in right abi folder in apk. Even, it’s subsequent to the skiasharp library.
public partial class App : Software
{
non-public static IntPtr DllImportResolver(string libraryName, Meeting meeting, DllImportSearchPath? searchPath)
{
if (libraryName == "MyCLib")
{
if (OperatingSystem.IsAndroid())
{
return NativeLibrary.Load("libMyCLib.so", meeting, searchPath);
}
if (OperatingSystem.IsIOS())
{
return NativeLibrary.Load(@"__Internal", meeting, searchPath);
}
}
// In any other case, fallback to default import resolver.
return IntPtr.Zero;
}
public App()
{
NativeLibrary.SetDllImportResolver(Meeting.GetAssembly(typeof(MyCLibWrapper.MyCLib)), DllImportResolver);
InitializeComponent();
MyCLibWrapper.MyCLib a = new();
int b = a.CallMain();
MainPage = new AppShell();
}
}
Right here is my CMake Presets
{
"identify": "android-arm64",
"inherits": "default",
"description": "Configuration for Android ARM64",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/android-arm64",
"toolchainFile": "${sourceDir}/cmake/android-arm64.cmake",
"cacheVariables": {
"CMAKE_SYSTEM_NAME": "Android",
"CMAKE_ANDROID_ARCH_ABI": "arm64-v8a",
"CMAKE_ANDROID_NDK": "~/Android/Sdk/ndk/26.1.10909125",
"CMAKE_ANDROID_STL_TYPE": "c++_shared",
"CMAKE_BUILD_TYPE": "Launch"
}
},
{
"identify": "ios-arm64",
"inherits": "default",
"description": "Configuration for iOS ARM64",
"generator": "Xcode",
"binaryDir": "${sourceDir}/out/ios-arm64",
"toolchainFile": "${sourceDir}/cmake/ios-arm64.cmake",
"cacheVariables": {
"CMAKE_SYSTEM_NAME": "iOS",
"CMAKE_OSX_ARCHITECTURES": "arm64",
"CMAKE_BUILD_TYPE": "Launch",
"BUILD_SHARED_LIBS": "off"
}
}
And toolchain for
Android:
set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_ANDROID_ARCH_ABI arm64-v8a)
set(CMAKE_SYSTEM_VERSION 21)
set(CMAKE_ANDROID_NDK "C:Program Recordsdata (x86)Androidandroid-sdkndk26.1.10909125")
set(CMAKE_TOOLCHAIN_FILE "C:Program Recordsdata (x86)Androidandroid-sdkndk26.1.10909125construct/cmake/android.toolchain.cmake")