阅读量:0
ServiceNotFoundException: No service published for: search
0x00 一个Crash
Android11 下的一个 system_app_crash
:
Process: com.android.permissioncontroller PID: 2070 UID: 10064 Flags: 0x20c83e05 Package: com.android.permissioncontroller v300000000 (30 system image) Foreground: Yes Process-Runtime: 25769047 Build: qti/msmnile_gvmq/msmnile_gvmq:11/RQ3A.211001.001/55:user/test-keys java.lang.IllegalStateException: android.os.ServiceManager$ServiceNotFoundException: No service published for: search at android.app.Activity.ensureSearchManager(Activity.java:6787) at android.app.Activity.startSearch(Activity.java:4976) at android.app.Activity.onSearchRequested(Activity.java:4923) at android.app.Activity.onSearchRequested(Activity.java:4910) at com.android.internal.policy.PhoneWindow.launchDefaultSearch(PhoneWindow.java:3153) at com.android.internal.policy.PhoneWindow.onKeyUp(PhoneWindow.java:2103) at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:425) at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6066) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5934) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5429) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5486) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5452) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5604) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5460) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5661) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5433) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5486) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5452) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5460) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5433) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5486) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5452) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5637) at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:5795) at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:3199) at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2741) at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2732) at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:3176) at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:143) at android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:335) at android.os.Looper.loop(Looper.java:183) at android.app.ActivityThread.main(ActivityThread.java:7663) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:600) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) Caused by: android.os.ServiceManager$ServiceNotFoundException: No service published for: search at android.os.ServiceManager.getServiceOrThrow(ServiceManager.java:153) at android.app.SearchManager.<init>(SearchManager.java:560) at android.app.Activity.ensureSearchManager(Activity.java:6785) ... 35 more
0x01 分析
直观感受
单纯看了这个Crash文件,按理说不该出现这个crash,permissioncontroller原生应用,没人动过。
search服务是否加载?
跟踪堆栈信息,从PhoneWindow.launchDefaultSearch()
到 Activity.ensureSearchManager()
再到 android.app.SearchManager()
的构造方法:
@UnsupportedAppUsage/*package*/ SearchManager(Context context, Handler handler) throws ServiceNotFoundException { mContext = context; mHandler = handler; mService = ISearchManager.Stub.asInterface( ServiceManager.getServiceOrThrow(Context.SEARCH_SERVICE)); }
没发现啥异常。然后看下service服务是啥时候加载的:
package com.android.server; public final class SystemServer { private static final String TAG = "SystemServer"; ... private static final String SEARCH_MANAGER_SERVICE_CLASS = "com.android.server.search.SearchManagerService$Lifecycle"; ... /** * The main entry point from zygote. */ public static void main(String[] args) { new SystemServer().run(); } public SystemServer() { // Check for factory test mode. mFactoryTestMode = FactoryTest.getMode(); // Record process start information. // Note SYSPROP_START_COUNT will increment by *2* on a FDE device when it fully boots; // one for the password screen, second for the actual boot. mStartCount = SystemProperties.getInt(SYSPROP_START_COUNT, 0) + 1; mRuntimeStartElapsedTime = SystemClock.elapsedRealtime(); mRuntimeStartUptime = SystemClock.uptimeMillis(); Process.setStartTimes(mRuntimeStartElapsedTime, mRuntimeStartUptime); // Remember if it's runtime restart(when sys.boot_completed is already set) or reboot // We don't use "mStartCount > 1" here because it'll be wrong on a FDE device. // TODO: mRuntimeRestart will *not* be set to true if the proccess crashes before // sys.boot_completed is set. Fix it. mRuntimeRestart = "1".equals(SystemProperties.get("sys.boot_completed")); } private void run() { ... // Start services. try { t.traceBegin("StartServices"); startBootstrapServices(t); startCoreServices(t); startOtherServices(t); } catch (Throwable ex) { Slog.e("System", "******************************************"); Slog.e("System", "************ Failure starting system services", ex); throw ex; } finally { t.traceEnd(); // StartServices } StrictMode.initVmDefaults(null); if (!mRuntimeRestart && !isFirstBootOrUpgrade()) { final long uptimeMillis = SystemClock.elapsedRealtime(); FrameworkStatsLog.write(FrameworkStatsLog.BOOT_TIME_EVENT_ELAPSED_TIME_REPORTED, FrameworkStatsLog.BOOT_TIME_EVENT_ELAPSED_TIME__EVENT__SYSTEM_SERVER_READY, uptimeMillis); final long maxUptimeMillis = 60 * 1000; if (uptimeMillis > maxUptimeMillis) { Slog.wtf(SYSTEM_SERVER_TIMING_TAG, "SystemServer init took too long. uptimeMillis=" + uptimeMillis); } } // Diagnostic to ensure that the system is in a base healthy state. Done here as a common // non-zygote process. if (!VMRuntime.hasBootImageSpaces()) { Slog.wtf(TAG, "Runtime is not running with a boot image!"); } // Loop forever. Looper.loop(); throw new RuntimeException("Main thread loop unexpectedly exited"); } ... /** * Starts a miscellaneous grab bag of stuff that has yet to be refactored and organized. */ private void startOtherServices(@NonNull TimingsTraceAndSlog t) { t.traceBegin("startOtherServices"); ... if (mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL) { ... if (!isWatch) { t.traceBegin("StartSearchManagerService"); try { mSystemServiceManager.startService(SEARCH_MANAGER_SERVICE_CLASS); } catch (Throwable e) { reportWtf("starting Search Service", e); } t.traceEnd(); } ... } ... t.traceEnd(); // startOtherServices } }
然后到SearchManagerService :
package com.android.server.search; /** * The search manager service handles the search UI, and maintains a registry of * searchable activities. */ public class SearchManagerService extends ISearchManager.Stub { private static final String TAG = "SearchManagerService"; final Handler mHandler; public static class Lifecycle extends SystemService { private SearchManagerService mService; public Lifecycle(Context context) { super(context); } @Override public void onStart() { mService = new SearchManagerService(getContext()); publishBinderService(Context.SEARCH_SERVICE, mService); } @Override public void onUnlockUser(final int userId) { mService.mHandler.post(new Runnable() { @Override public void run() { mService.onUnlockUser(userId); } }); } @Override public void onCleanupUser(int userHandle) { mService.onCleanupUser(userHandle); } } ... }
SystemServer 中加载的,很早的。所以在问题出现的点不会还没有加载。
复现场景
整个系统中个人能想到的就是通过settings(已经被隐藏入口,Monkey应该可以打开这个入口)进入permissioncontroller。adb shell am start com.android.car.settings
打开后进入权限设置的几个界面,尝试模拟发送search按键,没效果:
adb shell input keyevent 84 # or adb shell input keyevent 84 motionevent DOWN && input keyevent 84 motionevent UP
最终没找到复现方法。
分析Log
到这里已经花掉了好长的时间。掉头回去看Logcat日志。
2024-07-16 06:02:54.970 5912 5912 I Monkey : :Sending Key (ACTION_DOWN): 84 // KEYCODE_SEARCH 2024-07-16 06:02:54.972 5912 5912 I Monkey : :Sending Key (ACTION_UP): 84 // KEYCODE_SEARCH 2024-07-16 06:02:54.973 1028 1174 D InputDispatcher: Waiting to send key to Window{be605a u0 com.android.permissioncontroller/com.android.permissioncontroller.permission.ui.ManagePermissionsActivity} because there are unprocessed events that may cause focus to change 2024-07-16 06:02:54.974 5912 5912 I Monkey : Sleeping for 300 milliseconds 2024-07-16 06:02:54.976 1028 1028 D InputMethodManagerService: IME window vis: 0 active: 0 inv: 0 displayId: 0 2024-07-16 06:02:54.976 1028 1028 D InputMethodManagerServiceExt: IME window vis: 0 active: 0 inv: 0 displayId: 2 2024-07-16 06:02:54.976 1028 1061 D AutofillManagerService: Close system dialogs 2024-07-16 06:02:54.976 258 258 E SELinux : avc: denied { find } for pid=2070 uid=10064 name=search scontext=u:r:permissioncontroller_app:s0:c64,c256,c512,c768 tcontext=u:object_r:search_service:s0 tclass=service_manager permissive=0 2024-07-16 06:02:54.977 2070 2070 E InputEventSender: Exception dispatching finished signal. 2024-07-16 06:02:54.977 2070 2070 E MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: java.lang.IllegalStateException: android.os.ServiceManager$ServiceNotFoundException: No service published for: search 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.app.Activity.ensureSearchManager(Activity.java:6787) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.app.Activity.startSearch(Activity.java:4976) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.app.Activity.onSearchRequested(Activity.java:4923) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.app.Activity.onSearchRequested(Activity.java:4910) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at com.android.internal.policy.PhoneWindow.launchDefaultSearch(PhoneWindow.java:3153) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at com.android.internal.policy.PhoneWindow.onKeyUp(PhoneWindow.java:2103) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:425) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6066) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5934) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5429) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5486) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5452) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5604) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5460) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5661) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5433) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5486) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5452) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5460) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5433) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5486) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5452) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5637) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:5795) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:3199) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2741) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2732) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:3176) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:143) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.os.MessageQueue.nativePollOnce(Native Method) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.os.MessageQueue.next(MessageQueue.java:335) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.os.Looper.loop(Looper.java:183) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.app.ActivityThread.main(ActivityThread.java:7663) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at java.lang.reflect.Method.invoke(Native Method) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:600) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: Caused by: android.os.ServiceManager$ServiceNotFoundException: No service published for: search 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.os.ServiceManager.getServiceOrThrow(ServiceManager.java:153) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.app.SearchManager.<init>(SearchManager.java:560) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: at android.app.Activity.ensureSearchManager(Activity.java:6785) 2024-07-16 06:02:54.978 2070 2070 E MessageQueue-JNI: ... 35 more 2024-07-16 06:02:54.978 2070 2070 D AndroidRuntime: Shutting down VM 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: FATAL EXCEPTION: main 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: Process: com.android.permissioncontroller, PID: 2070 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: java.lang.IllegalStateException: android.os.ServiceManager$ServiceNotFoundException: No service published for: search 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.app.Activity.ensureSearchManager(Activity.java:6787) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.app.Activity.startSearch(Activity.java:4976) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.app.Activity.onSearchRequested(Activity.java:4923) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.app.Activity.onSearchRequested(Activity.java:4910) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at com.android.internal.policy.PhoneWindow.launchDefaultSearch(PhoneWindow.java:3153) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at com.android.internal.policy.PhoneWindow.onKeyUp(PhoneWindow.java:2103) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:425) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6066) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5934) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5429) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5486) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5452) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5604) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5460) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5661) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5433) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5486) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5452) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5460) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5433) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5486) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5452) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5637) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:5795) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:3199) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2741) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2732) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:3176) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:143) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.os.MessageQueue.nativePollOnce(Native Method) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.os.MessageQueue.next(MessageQueue.java:335) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.os.Looper.loop(Looper.java:183) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7663) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:600) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: Caused by: android.os.ServiceManager$ServiceNotFoundException: No service published for: search 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.os.ServiceManager.getServiceOrThrow(ServiceManager.java:153) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.app.SearchManager.<init>(SearchManager.java:560) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: at android.app.Activity.ensureSearchManager(Activity.java:6785) 2024-07-16 06:02:54.979 2070 2070 E AndroidRuntime: ... 35 more 2024-07-16 06:02:54.980 347 12898 I AIS-LOG : ais_client_health_thread:794 HIGH X 2024-07-16 06:02:54.981 1028 12934 I DropBoxManagerService: add tag=system_app_crash isTagEnabled=true flags=0x2 2024-07-16 06:02:54.983 5912 5927 W Monkey : // CRASH: com.android.permissioncontroller (pid 2070) 2024-07-16 06:02:54.983 5912 5927 W Monkey : // Short Msg: android.os.ServiceManager$ServiceNotFoundException 2024-07-16 06:02:54.983 5912 5927 W Monkey : // Long Msg: android.os.ServiceManager$ServiceNotFoundException: No service published for: search 2024-07-16 06:02:54.983 5912 5927 W Monkey : // Build Label: qti/msmnile_gvmq/msmnile_gvmq:11/RQ3A.211001.001/55:user/test-keys 2024-07-16 06:02:54.983 5912 5927 W Monkey : // Build Changelist: 55 2024-07-16 06:02:54.983 5912 5927 W Monkey : // Build Time: 1720990192000 2024-07-16 06:02:54.984 5912 5927 W Monkey : // java.lang.IllegalStateException: android.os.ServiceManager$ServiceNotFoundException: No service published for: search 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.app.Activity.ensureSearchManager(Activity.java:6787) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.app.Activity.startSearch(Activity.java:4976) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.app.Activity.onSearchRequested(Activity.java:4923) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.app.Activity.onSearchRequested(Activity.java:4910) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at com.android.internal.policy.PhoneWindow.launchDefaultSearch(PhoneWindow.java:3153) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at com.android.internal.policy.PhoneWindow.onKeyUp(PhoneWindow.java:2103) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:425) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6066) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5934) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5429) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5486) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5452) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5604) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5460) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5661) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5433) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5486) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5452) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5460) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5433) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5486) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5452) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5637) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:5795) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:3199) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2741) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2732) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:3176) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:143) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.os.MessageQueue.nativePollOnce(Native Method) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.os.MessageQueue.next(MessageQueue.java:335) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.os.Looper.loop(Looper.java:183) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.app.ActivityThread.main(ActivityThread.java:7663) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at java.lang.reflect.Method.invoke(Native Method) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:600) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // Caused by: android.os.ServiceManager$ServiceNotFoundException: No service published for: search 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.os.ServiceManager.getServiceOrThrow(ServiceManager.java:153) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.app.SearchManager.<init>(SearchManager.java:560) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // at android.app.Activity.ensureSearchManager(Activity.java:6785) 2024-07-16 06:02:54.984 5912 5927 W Monkey : // ... 35 more 2024-07-16 06:02:54.984 5912 5927 W Monkey : // 2024-07-16 06:02:54.984 1028 1693 W ActivityManager: Force-killing crashed app com.android.permissioncontroller at watcher's request 2024-07-16 06:02:54.985 1028 1693 W ActivityTaskManager: Force finishing activity com.android.permissioncontroller/.permission.ui.ManagePermissionsActivity
这是一段连续的日志。从事发前300ms,已经说明了问题。惭愧。
2024-07-16 06:02:54.970 5912 5912 I Monkey : :Sending Key (ACTION_DOWN): 84 // KEYCODE_SEARCH 2024-07-16 06:02:54.972 5912 5912 I Monkey : :Sending Key (ACTION_UP): 84 // KEYCODE_SEARCH # Monkey确实发送了search动作
2024-07-16 06:02:54.976 258 258 E SELinux : avc: denied { find } for pid=2070 uid=10064 name=search scontext=u:r:permissioncontroller_app:s0:c64,c256,c512,c768 tcontext=u:object_r:search_service:s0 tclass=service_manager permissive=0 # 缺少selinux权限,permissioncontroller_app不允许调用search服务。
0x03 结论
提供两种方法解决此问题:
- Monkey中添加黑名单,不跑settings
- 给 permissioncontroller_app增加访问search权限
第二种不合适,那就第一种把。
done。