【问题标题】:Access android framework service from Dalvik VM从 Dalvik VM 访问 android 框架服务
【发布时间】:2012-07-31 11:43:51
【问题描述】:

是否可以在 Dalvik VM 之外访问框架中的 android 服务?

我想对 Dalvik VM 的某些类(例如 libcore/luni 类)进行修改,并希望从服务中获取结果(包括数据库和其他操作)。

这可能吗?

【问题讨论】:

    标签: android frameworks dalvik


    【解决方案1】:

    请记住,框架不会在 Dalvik 运行的所有可能上下文中运行/设置。

    也就是说,作为一种快速技巧,您也许可以使用反射来获取框架类。

    不过,正确的方法是在 Dalvik 核心中定义一个 API,由接口和静态方法之类的东西组成,其中静态方法注册一个接口实例供核心库使用。然后,在框架中,添加代码来调用该注册函数。像这样的东西(这里非常简化,例如你想要错误/权限检查):

    在 libcore 中:

    public interface TheInterface {
        void doSomethingInteresting();
        ...
    }
    
    public class TheRegistrar {
        private static TheInterface theOne;
    
        public static void register(TheInterface instance) {
            theOne = instance;
        }
    
        public static TheInterface get() {
            return theOne;
        }
    }
    

    然后,在想要使用它的 libcore 代码中,让它执行 get()(并准备处理它是 null 的情况)。

    在框架中,定义如下内容:

    public class FrameworkDoohicky implements TheInterface {
        ...
    }
    

    并在框架初始化期间通过调用TheRegistrar.register() 来注册它。

    【讨论】:

    • 感谢您的回答!是否也可以从这个低层(dalvik vm)开始活动?例如,我想在读取文件之前弹出一个密码对话框。
    • 同样的答案。如果框架实际上正在运行,您应该能够将其连接起来。
    • 嗨@danfuzz。您能否解释一下答案的最后一部分?特别是,我不明白应该在哪里调用 TheRegistrar.register()。你能解释一下每个进程的框架初始化发生在哪里吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    相关资源
    最近更新 更多