【Android】ServiceNotFoundException: No service published for: search

avatar
作者
猴君
阅读量: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。

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!