0

所以我创建了一个新服务并添加到 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

关于这个问题的任何意见都会对我有很大帮助。

先感谢您。

4

2 回答 2

1

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

于 2014-04-07T10:22:11.743 回答
1

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

导出 WITH_DEXPREOPT=false

导出 DISABLE_DEXPREOPT=true

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

于 2014-08-19T00:18:02.353 回答