Ejemplo n.º 1
0
 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
 }
Ejemplo n.º 2
0
    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));
    }
Ejemplo n.º 3
0
    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));
    }
Ejemplo n.º 5
0
 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);
 }
Ejemplo n.º 6
0
 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);
    }
Ejemplo n.º 8
0
 /// <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);
     }
 }
Ejemplo n.º 9
0
    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);
    }
Ejemplo n.º 11
0
    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);
    }
Ejemplo n.º 12
0
    public void Click_04_IsServiceRunning()
    {
        bool isRun = AndroidTools.IsServiceRunning(unstallInput.text);

        AndroidTools.AndroidLog("Is service Running:" + isRun);
    }
Ejemplo n.º 13
0
 public void Click_03_UnstallApp()
 {
     AndroidTools.UnstallApp(unstallInput.text);
 }
Ejemplo n.º 14
0
 public void Click_02_OpenlApp()
 {
     AndroidTools.OpenAppByPkg(unstallInput.text);
 }
Ejemplo n.º 15
0
    public void Click_01_GetAllPkg()
    {
        List <string> list = AndroidTools.GetAllPkg();

        AndroidTools.AndroidLog(list.Count.ToString(), "GetAllPkg", LogLevel.e);
    }
Ejemplo n.º 16
0
 public void Click_Install_Apk()
 {
     AndroidTools.InstallAPP(installInput.text);
 }
Ejemplo n.º 17
0
 public void Click_AndroidToast(string msg)
 {
     AndroidTools.showAsToast(msg);
 }
Ejemplo n.º 18
0
 public void Click_05_SetAppScreenBrightness(float value)
 {
     AndroidTools.SetAppScreenBrightness(value);
 }
Ejemplo n.º 19
0
 public void Click_AndroidToast_LENGTH_LONG(string msg)
 {
     AndroidTools.showAsToast(msg, ToastDuration.LENGTH_LONG);
 }