Android 让getSystemService()识别我们的新系统服务

Android 让getSystemService()识别我们的新系统服务,android,android-service,android-source,android-build,Android,Android Service,Android Source,Android Build,我用的是嵌入式安卓这本书 我正在使用AOSP4.0.3_r1创建一个新的系统服务。 我希望我的系统服务在frameworks/base/core/java/android/content/app/ContextImpl.java中注册,以便通过getSystemService方法使用它 问题是,我在content下找不到app文件夹:androidroot/frameworks/base/core/java/android/content/app/ContextImpl.java 但是,我在an

我用的是嵌入式安卓这本书

我正在使用AOSP4.0.3_r1创建一个新的系统服务。 我希望我的系统服务在frameworks/base/core/java/android/content/app/ContextImpl.java中注册,以便通过getSystemService方法使用它

问题是,我在content下找不到app文件夹:androidroot/frameworks/base/core/java/android/content/app/ContextImpl.java 但是,我在androidroot/frameworks/base/core/java/android/app/ContextImpl.java中找到了它 这两个文件相同吗?或者只是缺少内容/应用程序文件夹? 知道怎么做吗?

您需要使用SystemServer,它保存所有系统服务的名称。 您应该查看此链接:
卡里姆的书主要是针对安卓2.3.4版本编写的。从现在起,有些事情可以改变。这是一个已经改变的例子

这两个文件相同吗?或者只是缺少内容/应用程序文件夹

这些是相同的文件

你知道怎么做吗

正如我所说的,实施已经改变。我研究了代码,这里您可以更改什么使代码正常工作,我只能假设,因为我并没有实际构建代码。在ContextImpl类的静态块中,需要添加以下代码:

registerService(ACCOUNT_SERVICE, new ServiceFetcher() {
    public Object createService(ContextImpl ctx) {
        IBinder b = ServiceManager.getService(OPERSYS_SERVICE);
        IOpersysService service = IOpersysService.Stub.asInterface(b);
        return new OpersysManager(service);
    }});

我已经查过了。但它使用ServiceManager.getService方法,该方法未在SDK中公开。这就是为什么我要将我的服务提供给getSystemService方法。是的!我刚刚尝试过在androidroot/frameworks/base/core/java/android/app/ContextImpl.java上乱搞,结果成功了@谢谢你提供的信息。