static string Get(string key)
        {
            var value = Preferences2.Get(key, null);

            if (string.IsNullOrWhiteSpace(value))
            {
                value = Random2.GenerateRandomString(DeviceIdRLength, _Constants.DigitsLetters);
                Preferences2.Set(key, value);
            }
            return(value);
        }
Example #2
0
        /// <summary>
        /// 当前是否装有 Xposed 框架
        /// </summary>
        /// <returns></returns>
        public static bool IsXposedExists()
        {
            var classLoader = Java.Lang.ClassLoader.SystemClassLoader;

            if (classLoader == null)
            {
                throw new NullReferenceException("Java.Lang.ClassLoader.SystemClassLoader is null.");
            }

            try
            {
                var xpHelperObj = classLoader.LoadClass(XPOSED_HELPERS)?.NewInstance();
            }
            catch (Java.Lang.InstantiationException e)
            {
                e.PrintStackTraceWhenDebug();
                return(true);
            }
            catch (Java.Lang.IllegalAccessException e)
            {
                e.PrintStackTraceWhenDebug();
                return(true);
            }
            catch (Java.Lang.ClassNotFoundException e)
            {
                e.PrintStackTraceWhenDebug();
            }

            try
            {
                var xpBridgeObj = classLoader.LoadClass(XPOSED_BRIDGE)?.NewInstance();
            }
            catch (Java.Lang.InstantiationException e)
            {
                e.PrintStackTraceWhenDebug();
                return(true);
            }
            catch (Java.Lang.IllegalAccessException e)
            {
                e.PrintStackTraceWhenDebug();
                return(true);
            }
            catch (Java.Lang.ClassNotFoundException e)
            {
                e.PrintStackTraceWhenDebug();
            }

            try
            {
                throw new Java.Lang.Exception(Random2.GenerateRandomString(Random2.Next(5, 10)));
                // 通过主动抛出异常,检查堆栈信息来判断是否存在XP框架。
            }
            catch (Java.Lang.Exception e)
            {
                var hasFind = e.GetStackTrace()
                              .Any(x => x.ClassName != null &&
                                   x.ClassName.Contains(XPOSED_BRIDGE, StringComparison.OrdinalIgnoreCase));
                if (hasFind)
                {
                    return(true);
                }
            }

            return(false);
        }