所以我创建了一个新服务并添加到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
关于这个问题的任何意见都可以帮到我很多。
提前谢谢。
答案 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