从Dalvik VM访问android框架服务



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

我想修改Dalvik VM的一些类(例如libcore/luni类),并希望从服务中获得结果(使用数据库和其他操作)。

这可能吗?

请记住,该框架不会在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 {
    ...
}

并在框架初始化期间将其注册为对CCD_ 3的调用。

最新更新