尝试访问Android内部应用程序的静态功能时出现java.lang.IllegalAccessError

尝试访问Android内部应用程序的静态功能时出现java.lang.IllegalAccessError,java,android,keyguard,Java,Android,Keyguard,我正在尝试编写一个能够访问Android键盘护卫应用程序的应用程序,这个系统应用程序可以锁定屏幕。我尝试使用反射来获取对正在运行的KeyguardUpdateMonitor实例的引用,但到目前为止,我只收到了一个java.lang.IllegalAccessError:Class ref,它位于已解析为意外实现的预验证类中。 以下是导致问题的代码: try { DexFile df = new DexFile(new File("/system/priv-app/Keyguard.apk

我正在尝试编写一个能够访问Android键盘护卫应用程序的应用程序,这个系统应用程序可以锁定屏幕。我尝试使用反射来获取对正在运行的KeyguardUpdateMonitor实例的引用,但到目前为止,我只收到了一个java.lang.IllegalAccessError:Class ref,它位于已解析为意外实现的预验证类中。 以下是导致问题的代码:

try {
    DexFile df = new DexFile(new File("/system/priv-app/Keyguard.apk"));
    String packageName = "com.android.keyguard";
    Context packageContext = context.createPackageContext(packageName, 
                                 Context.CONTEXT_INCLUDE_CODE
                               | Context.CONTEXT_IGNORE_SECURITY);
    ClassLoader cl = packageContext.getClassLoader();
    Class keyguardUpdateMonitor = df.loadClass(packageName 
                                    + ".KeyguardUpdateMonitor", cl);
    Method getKeyguardUpdateMonitorInstance 
        = keyguardUpdateMonitor.getMethod("getInstance", Context.class);
    Object argumentsForGetInstance[] = new Object[1];
    argumentsForGetInstance[0] = packageContext;
    Object keyguardUpdateMonitorInstance 
        = getKeyguardUpdateMonitorInstance.invoke(null, packageContext);
    ...
}
此代码在服务中实例化的类中运行

我尝试调用的方法的签名是public static KeyguardUpdateMonitor getInstanceContext上下文

我是否可以按预期的方式使用反射,或者我是否需要拥有自己的KeyguardUpdateMonitor实例? 我需要特殊权限吗? 我的想法有没有根本性的错误?如果是,我如何访问Android KitKat及以上版本中的键盘护卫?
你的想法有一个根本性的错误。KeyguardUpdateMonitor是在主进程内实例化的类。对于作为服务运行的代码,它是进程外的,因此受到正常的Linux Unix进程内存保护。您试图创建包上下文,但它是在您的进程中创建的,与Home app无关。最重要的是,下面的KeyguardUpdateMonitor链接代码似乎没有getInstanceContext静态函数

然而,好消息是 是一个广播接收器

你可以通过向它发送意向来与它交谈 getSystemServiceKEYGUARD\u服务


希望能有所帮助。

谢谢你的提示,但广播接收器处理的意图对我的问题没有帮助。无论如何,谢谢你。第一段很有帮助。顺便说一句:KeyguardUpdateMonitor确实有一个getInstanceContext函数,您提供的链接已经过时了。