【Android】ServiceNotFoundException: No service published for: search
ServiceNotFoundException: No service published for: search
- 0x00 一个Crash
- 0x01 分析
- 直观感受
- search服务是否加载?
- 复现场景
- 分析Log
- 0x03 结论
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-keysjava.lang.IllegalStateException: android.os.ServiceManager$ServiceNotFoundException: No service published for: searchat 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: searchat 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);}@Overridepublic void onStart() {mService = new SearchManagerService(getContext());publishBinderService(Context.SEARCH_SERVICE, mService);}@Overridepublic void onUnlockUser(final int userId) {mService.mHandler.post(new Runnable() {@Overridepublic void run() {mService.onUnlockUser(userId);}});}@Overridepublic 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 more2024-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。