AOSP由于一行代码而无法加载

时间:2014-04-04 22:55:08

标签: exception android-service android-source android-service-binding

所以我创建了一个新服务并添加到AOSP。从应用程序调用时,该服务运行正常。但是我想从框架代码中调用几个服务方法(Source / frameworks / base / core / java / android / content / pm / PackageParser.java)。

我是否需要调用特殊方法为服务创建实例,以便在框架内使用它。

 ITestService om = ITestService.Stub.asInterface(ServiceManager.getService("Test"));

以上是我在PackageParser.java中为服务创建实例的方式(当我尝试从应用程序访问它时,工作正常)。

以下是我从logcat获得的错误摘录:

***********************************************
F/SystemServer(  500): BOOT FAILURE starting Input Manager Service
F/SystemServer(  500): java.lang.RuntimeException: Unable to get provider com.android.providers.settings.SettingsProvider: java.lang.ClassNotFoundException: com.android.providers.settings.SettingsProvider
F/SystemServer(  500):  at android.app.ActivityThread.installProvider(ActivityThread.java:4201)
F/SystemServer(  500):  at android.app.ActivityThread.getProvider(ActivityThread.java:4010)
F/SystemServer(  500):  at android.app.ActivityThread.acquireProvider(ActivityThread.java:4026)
F/SystemServer(  500):  at android.app.ContextImpl$ApplicationContentResolver.acquireProvider(ContextImpl.java:1612)
F/SystemServer(  500):  at android.content.ContentResolver.acquireProvider(ContentResolver.java:948)
F/SystemServer(  500):  at android.provider.Settings$NameValueCache.getString(Settings.java:701)
F/SystemServer(  500):  at android.provider.Settings$Secure.getString(Settings.java:2207)
F/SystemServer(  500):  at com.android.server.InputMethodManagerService.buildInputMethodListLocked(InputMethodManagerService.java:1966)
F/SystemServer(  500):  at com.android.server.InputMethodManagerService.(InputMethodManagerService.java:556)
F/SystemServer(  500):  at com.android.server.ServerThread.run(SystemServer.java:273)
F/SystemServer(  500): Caused by: java.lang.ClassNotFoundException: com.android.providers.settings.SettingsProvider
F/SystemServer(  500):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
F/SystemServer(  500):  at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
F/SystemServer(  500):  at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
F/SystemServer(  500):  at android.app.ActivityThread.installProvider(ActivityThread.java:4186)
F/SystemServer(  500):  ... 9 more
I/SystemServer(  500): Accessibility Manager
W/SystemServer(  500): ***********************************************
F/SystemServer(  500): BOOT FAILURE making display ready

在此错误发生之前,我能够看到成功日志消息,说我的服务已经启动。

我刚评论了一行在PackageParser.java中为我的服务生成实例,代码似乎可以创建system.img

关于这个问题的任何意见都可以帮到我很多。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

在您的服务中,您似乎使用了“设置提供程序”。但是,当您调用它时,此提供程序尚未启动。如果是这种情况,那么您需要向服务添加一个额外的方法,例如setUp(),您需要在设置提供程序已加载时设置与PackageParser的连接。

答案 1 :(得分:0)

这是因为SettingsProvider.apk的dex opt签名不匹配为了测试目的,我通过设置以下env变量来禁用此检查,从而解决了这个问题:

导出WITH_DEXPREOPT = false

导出DISABLE_DEXPREOPT = true

礼貌:https://groups.google.com/forum/#!msg/android-building/vJCkg8Yq9Ic/mgev8ODDia4J