public void TestNdkUtil() { var log = new TaskLoggingHelper(engine, TestName); using (var builder = new Builder()) { var ndkDir = AndroidNdkPath; var sdkDir = AndroidSdkPath; MonoAndroidHelper.AndroidSdk = new AndroidSdkInfo((arg1, arg2) => { }, sdkDir, ndkDir, AndroidSdkResolver.GetJavaSdkPath()); NdkUtil.Init(log, ndkDir); var platforms = NdkUtil.GetSupportedPlatforms(log, ndkDir); Assert.AreNotEqual(0, platforms.Count(), "No platforms found"); var arch = AndroidTargetArch.X86; Assert.IsTrue(NdkUtil.ValidateNdkPlatform(log, ndkDir, arch, enableLLVM: false)); Assert.AreEqual(0, errors.Count, "NdkUtil.ValidateNdkPlatform should not have returned false."); int level = NdkUtil.GetMinimumApiLevelFor(arch, ndkDir); int expected = 16; Assert.AreEqual(expected, level, $"Min Api Level for {arch} should be {expected}."); var compilerNoQuotes = NdkUtil.GetNdkTool(ndkDir, arch, "gcc", level); Assert.AreEqual(0, errors.Count, "NdkUtil.GetNdkTool should not have errored."); Assert.NotNull(compilerNoQuotes, "NdkUtil.GetNdkTool returned null."); var gas = NdkUtil.GetNdkTool(ndkDir, arch, "as", level); Assert.AreEqual(0, errors.Count, "NdkUtil.GetNdkTool should not have errored."); Assert.NotNull(gas, "NdkUtil.GetNdkTool returned null."); var inc = NdkUtil.GetNdkPlatformIncludePath(ndkDir, arch, level); Assert.NotNull(inc, " NdkUtil.GetNdkPlatformIncludePath should not return null"); var libPath = NdkUtil.GetNdkPlatformLibPath(ndkDir, arch, level); Assert.NotNull(libPath, "NdkUtil.GetNdkPlatformLibPath should not return null"); string ld = NdkUtil.GetNdkTool(ndkDir, arch, "ld", level); Assert.AreEqual(0, errors.Count, "NdkUtil.GetNdkTool should not have errored."); Assert.NotNull(ld, "NdkUtil.GetNdkTool returned null."); } }
public bool RunTask() { MonoAndroidHelper.RefreshAndroidSdk(string.Empty, AndroidNdkDirectory, string.Empty, Log); if (!NdkUtil.Init(Log, AndroidNdkDirectory)) { return(false); } try { return(DoExecute()); } catch (XamarinAndroidException e) { Log.LogCodedError(string.Format("XA{0:0000}", e.Code), e.MessageWithoutCode); if (MonoAndroidHelper.LogInternalExceptions) { Log.LogMessage(e.ToString()); } } catch (Exception ex) { Log.LogErrorFromException(ex); return(false); } return(!Log.HasLoggedErrors); }
public static void AssertValidEnvironmentSharedLibrary(string outputDirectoryRoot, string sdkDirectory, string ndkDirectory, string supportedAbis) { NdkUtil.Init(ndkDirectory); MonoAndroidHelper.AndroidSdk = new AndroidSdkInfo((arg1, arg2) => {}, sdkDirectory, ndkDirectory); AndroidTargetArch arch; foreach (string abi in supportedAbis.Split(';')) { switch (abi) { case "armeabi-v7a": arch = AndroidTargetArch.Arm; break; case "arm64": case "arm64-v8a": case "aarch64": arch = AndroidTargetArch.Arm64; break; case "x86": arch = AndroidTargetArch.X86; break; case "x86_64": arch = AndroidTargetArch.X86_64; break; default: throw new Exception("Unsupported Android target architecture ABI: " + abi); } string envSharedLibrary = Path.Combine(outputDirectoryRoot, "app_shared_libraries", abi, "libxamarin-app.so"); Assert.IsTrue(File.Exists(envSharedLibrary), $"Application environment SharedLibrary '{envSharedLibrary}' must exist"); // API level doesn't matter in this case AssertSharedLibraryHasRequiredSymbols(envSharedLibrary, NdkUtil.GetNdkTool(ndkDirectory, arch, "readelf", 0)); } }