native/android/build.cake (67 lines of code) (raw):

DirectoryPath ROOT_PATH = MakeAbsolute(Directory("../..")); DirectoryPath OUTPUT_PATH = MakeAbsolute(ROOT_PATH.Combine("output/native/android")); #load "../../scripts/cake/native-shared.cake" DirectoryPath ANDROID_NDK_HOME = Argument("ndk", EnvironmentVariable("ANDROID_NDK_HOME") ?? EnvironmentVariable("ANDROID_NDK_ROOT") ?? PROFILE_PATH.Combine("android-ndk").FullPath); string SUPPORT_VULKAN_VAR = Argument ("supportVulkan", EnvironmentVariable ("SUPPORT_VULKAN") ?? "true"); bool SUPPORT_VULKAN = SUPPORT_VULKAN_VAR == "1" || SUPPORT_VULKAN_VAR.ToLower () == "true"; Task("libSkiaSharp") .IsDependentOn("git-sync-deps") .WithCriteria(IsRunningOnMacOs() || IsRunningOnWindows()) .Does(() => { Build("x86", "x86"); Build("x86_64", "x64"); Build("armeabi-v7a", "arm"); Build("arm64-v8a", "arm64"); void Build(string arch, string skiaArch) { if (Skip(arch)) return; GnNinja($"android/{arch}", "SkiaSharp", $"target_cpu='{skiaArch}' " + $"target_os='android' " + $"skia_use_harfbuzz=false " + $"skia_use_icu=false " + $"skia_use_piex=true " + $"skia_use_sfntly=false " + $"skia_use_system_expat=false " + $"skia_use_system_freetype2=false " + $"skia_use_system_libjpeg_turbo=false " + $"skia_use_system_libpng=false " + $"skia_use_system_libwebp=false " + $"skia_use_system_zlib=false " + $"skia_use_vulkan={SUPPORT_VULKAN} ".ToLower () + $"skia_enable_skottie=true " + $"extra_cflags=[ '-DSKIA_C_DLL', '-DHAVE_SYSCALL_GETRANDOM', '-DXML_DEV_URANDOM' ] " + $"ndk='{ANDROID_NDK_HOME}' " + $"ndk_api=21"); var outDir = OUTPUT_PATH.Combine(arch); EnsureDirectoryExists(outDir); CopyFileToDirectory(SKIA_PATH.CombineWithFilePath($"out/android/{arch}/libSkiaSharp.so"), outDir); } }); Task("libHarfBuzzSharp") .WithCriteria(IsRunningOnMacOs() || IsRunningOnWindows()) .Does(() => { var cmd = IsRunningOnWindows() ? ".cmd" : ""; var ndkbuild = ANDROID_NDK_HOME.CombineWithFilePath($"ndk-build{cmd}").FullPath; Build("x86"); Build("x86_64"); Build("armeabi-v7a"); Build("arm64-v8a"); void Build(string arch) { if (Skip(arch)) return; RunProcess(ndkbuild, new ProcessSettings { Arguments = $"APP_ABI={arch}", WorkingDirectory = "libHarfBuzzSharp", }); var outDir = OUTPUT_PATH.Combine(arch); EnsureDirectoryExists(outDir); CopyFileToDirectory($"libHarfBuzzSharp/libs/{arch}/libHarfBuzzSharp.so", outDir); } }); Task("Default") .IsDependentOn("libSkiaSharp") .IsDependentOn("libHarfBuzzSharp"); RunTarget(TARGET);