public static void SaveToKeyChain(string keyName, string mValue) { #if UNITY_IPHONE if (Application.platform == RuntimePlatform.IPhonePlayer) { KeyChainBindings.SetStringForKey(keyName, mValue); } #endif #if UNITY_ANDROID if (Application.platform == RuntimePlatform.Android) { AndroidTools.SharedPreferencesSet(keyName, mValue); } #endif #if UNITY_EDITOR string filePath = Path.Combine(Application.persistentDataPath, LOCAL_KEYCHAIN_FILE); JSONObject data; if (File.Exists(filePath)) { string readText = File.ReadAllText(filePath); data = JSONObject.Parse(readText); data.Add(keyName, mValue); File.WriteAllText(filePath, data.ToString()); } else { data = new JSONObject(); data.Add(keyName, mValue); File.WriteAllText(filePath, data.ToString()); } #endif }
private void CanResolveStacktraces(string abi) { if (!AndroidLogcatTestsSetup.AndroidSDKAndNDKAvailable()) { System.Console.WriteLine("Test ignored"); return; } var tools = new AndroidTools(); const string symbolName = "JNI_OnLoad"; var playerPackage = BuildPipeline.GetPlaybackEngineDirectory(BuildTarget.Android, BuildOptions.None); var expectedOutput = symbolName + " at ??:?"; var symbolPath = Path.GetFullPath(Path.Combine(playerPackage, "Variations/il2cpp/Development/Symbols/" + abi + "/libmain.sym.so")); #if UNITY_2019_3_OR_NEWER var targetAddress = GetSymbolAddressUsingNM(tools, symbolPath, symbolName); #else var targetAddress = GetSymbolAddressUsingReadElf(tools, symbolPath, symbolName); #endif Assert.IsNotEmpty(targetAddress, "Failed to find address for " + symbolName); var resolvedSymbols = tools.RunAddr2Line(symbolPath, new[] { targetAddress }); Assert.IsTrue(resolvedSymbols.Length == 1, "Expected to resolve one symbol"); Assert.AreEqual(expectedOutput, resolvedSymbols[0], string.Format("Failed to resolve symbol '{0}' for address '{1}'", symbolName, targetAddress)); }
public void Click_GetWIFIState() { string state = AndroidTools.GetWIFIState(); LogText.text = state; AndroidTools.AndroidLog(state, "GetWIFIState", LogLevel.w); }
private void CanResolveStacktraces(string abi) { if (!AndroidBridge.AndroidExtensionsInstalled) { System.Console.WriteLine("Test ignored, because Android Support is not installed"); return; } if (!AndroidLogcatTestsSetup.AndroidSDKAndNDKAvailable()) { System.Console.WriteLine("Test ignored"); return; } var tools = new AndroidTools(); const string symbolName = "JNI_OnLoad"; var expectedOutput = symbolName + " at ??:?"; var symbolPath = GetSymbolPath(abi, "libmain.so"); var targetAddress = GetSymbolAddress(tools, symbolPath, symbolName); Assert.IsNotEmpty(targetAddress, "Failed to find address for " + symbolName); var resolvedSymbols = tools.RunAddr2Line(symbolPath, new[] { targetAddress }); Assert.IsTrue(resolvedSymbols.Length == 1, "Expected to resolve one symbol"); Assert.AreEqual(expectedOutput, resolvedSymbols[0], string.Format("Failed to resolve symbol '{0}' for address '{1}'", symbolName, targetAddress)); }
public static string GetFromKeyChain(string keyName) { #if UNITY_IPHONE if (Application.platform == RuntimePlatform.IPhonePlayer) { string val = KeyChainBindings.GetStringForKey(keyName); if (val == "undefined") { val = string.Empty; } return(val); } #endif #if UNITY_ANDROID if (Application.platform == RuntimePlatform.Android) { return(AndroidTools.SharedPreferencesGetString(keyName)); } #endif #if UNITY_EDITOR string filePath = Path.Combine(Application.persistentDataPath, LOCAL_KEYCHAIN_FILE); JSONObject data; if (File.Exists(filePath)) { string readText = File.ReadAllText(filePath); data = JSONObject.Parse(readText); return(data.GetString(keyName)); } else { return(string.Empty); } #endif return(string.Empty); }
public void Click_AndroidLog(string msg) { AndroidTools.AndroidLog(msg, "my tag I", LogLevel.i); AndroidTools.AndroidLog(msg, "my tag v", LogLevel.v); AndroidTools.AndroidLog(msg, "my tag d", LogLevel.d); AndroidTools.AndroidLog(msg, "my tag w", LogLevel.w); AndroidTools.AndroidLog(msg, "my tag E", LogLevel.e); }
private static string GetSymbolAddress(AndroidTools tools, string symbolPath, string symbolName) { #if UNITY_2019_3_OR_NEWER var targetAddress = GetSymbolAddressUsingNM(tools, symbolPath, symbolName); #else var targetAddress = GetSymbolAddressUsingReadElf(tools, symbolPath, symbolName); #endif return(targetAddress); }
/// <summary> /// Sets the mac address depending on the platform. /// </summary> private void LoadMacAddress() { if (Application.platform == RuntimePlatform.WindowsEditor) { macAddress = GetWindowsMac(); if (macAddress.Equals("")) { macAddress = "00000000000000E0"; } } else if (Application.platform == RuntimePlatform.Android) { macAddress = AndroidTools.ReturnMacAddress(); //Debug.Log("here is the Android mac:" + macAddress); } }
string GetSymbolAddressUsingNM(AndroidTools tools, string symbolFilePath, string symbolName) { // With NDK 16, calling nm.exe shows an error // System.Exception : L:\UnityInstalls\2019.1.7f1\Editor\Data\PlaybackEngines\AndroidPlayer\NDK\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-nm.exe -extern-only "L:\UnityInstalls\2019.1.7f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Development\Symbols\arm64-v8a\libmain.sym.so" // returned with exit code 1 // L:\UnityInstalls\2019.1.7f1\Editor\Data\PlaybackEngines\AndroidPlayer\NDK\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-nm.exe: invalid option -- x var symbols = tools.RunNM(symbolFilePath); foreach (var s in symbols) { if (s.Contains(symbolName)) { return("0x" + s.Split(' ')[0]); } } return(string.Empty); }
public void CanCorrectlyPickSymbol() { if (!AndroidBridge.AndroidExtensionsInstalled) { System.Console.WriteLine("Test ignored, because Android Support is not installed"); return; } if (!AndroidLogcatTestsSetup.AndroidSDKAndNDKAvailable()) { System.Console.WriteLine("Test ignored, SDK & NDK are not available."); return; } var tools = new AndroidTools(); var playerPackage = BuildPipeline.GetPlaybackEngineDirectory(BuildTarget.Android, BuildOptions.None); var symbolsDirectory = Path.Combine(playerPackage, $"Variations/il2cpp/Development/Symbols"); var symbolPaths = new List <ReordableListItem>(new[] { new ReordableListItem() { Enabled = true, Name = symbolsDirectory } }); var symbolPathsArmV7 = new List <ReordableListItem>(new[] { new ReordableListItem() { Enabled = true, Name = Path.Combine(symbolsDirectory, AndroidLogcatUtilities.kAbiArmV7) } }); var symbolPathsArm64 = new List <ReordableListItem>(new[] { new ReordableListItem() { Enabled = true, Name = Path.Combine(symbolsDirectory, AndroidLogcatUtilities.kAbiArm64) } }); var libunity = "libunity"; AssertStringContains(libunity, AndroidLogcatUtilities.GetSymbolFile(symbolPathsArmV7, string.Empty, libunity + ".so")); AssertStringContains(libunity, AndroidLogcatUtilities.GetSymbolFile(symbolPathsArm64, string.Empty, libunity + ".so")); // Since ABI is empty, we cannot resolve symbol path, thus the result will be empty Assert.AreEqual(string.Empty, AndroidLogcatUtilities.GetSymbolFile(symbolPaths, string.Empty, libunity + ".so")); var armv7Result = AndroidLogcatUtilities.GetSymbolFile(symbolPaths, AndroidLogcatUtilities.kAbiArmV7, libunity + ".so"); AssertStringContains(libunity, armv7Result); AssertStringContains(AndroidLogcatUtilities.kAbiArmV7, armv7Result); var arm64Result = AndroidLogcatUtilities.GetSymbolFile(symbolPaths, AndroidLogcatUtilities.kAbiArm64, libunity + ".so"); AssertStringContains(libunity, arm64Result); AssertStringContains(AndroidLogcatUtilities.kAbiArm64, arm64Result); }
string GetSymbolAddressUsingReadElf(AndroidTools tools, string symbolFilePath, string symbolName) { // Regex for // 63: 000000000000083c 144 FUNC GLOBAL DEFAULT 10 JNI_OnLoad var regex = new Regex(@".*:\s*(?<address>\S*).*"); var symbols = tools.RunReadElf(symbolFilePath); foreach (var s in symbols) { if (s.Contains(symbolName)) { var result = regex.Match(s); if (result.Success == false) { throw new System.Exception("Failed to regex " + s); } return("0x" + result.Groups["address"]); } } return(string.Empty); }
public void Click_04_IsServiceRunning() { bool isRun = AndroidTools.IsServiceRunning(unstallInput.text); AndroidTools.AndroidLog("Is service Running:" + isRun); }
public void Click_03_UnstallApp() { AndroidTools.UnstallApp(unstallInput.text); }
public void Click_02_OpenlApp() { AndroidTools.OpenAppByPkg(unstallInput.text); }
public void Click_01_GetAllPkg() { List <string> list = AndroidTools.GetAllPkg(); AndroidTools.AndroidLog(list.Count.ToString(), "GetAllPkg", LogLevel.e); }
public void Click_Install_Apk() { AndroidTools.InstallAPP(installInput.text); }
public void Click_AndroidToast(string msg) { AndroidTools.showAsToast(msg); }
public void Click_05_SetAppScreenBrightness(float value) { AndroidTools.SetAppScreenBrightness(value); }
public void Click_AndroidToast_LENGTH_LONG(string msg) { AndroidTools.showAsToast(msg, ToastDuration.LENGTH_LONG); }