1

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

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

这可能吗?

4

1 回答 1

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()并在框架初始化期间通过调用来注册它。

于 2012-07-31T21:46:23.700 回答