【Android】ServiceNotFoundException: No service published for: search

0x00 一个Crash

Android11 下的一个 system_app_crash

java 复制代码
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() 的构造方法:

java 复制代码
@UnsupportedAppUsage/*package*/ 
SearchManager(Context context, Handler handler) throws ServiceNotFoundException {
    mContext = context;
    mHandler = handler;
    mService = ISearchManager.Stub.asInterface(
            ServiceManager.getServiceOrThrow(Context.SEARCH_SERVICE));
}

没发现啥异常。然后看下service服务是啥时候加载的:

java 复制代码
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 :

java 复制代码
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按键,没效果:

shell 复制代码
adb shell input keyevent 84
# or
adb shell input keyevent 84 motionevent DOWN && input keyevent 84 motionevent UP

最终没找到复现方法。

分析Log

到这里已经花掉了好长的时间。掉头回去看Logcat日志。

shell 复制代码
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,已经说明了问题。惭愧。

shell 复制代码
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动作
shell 复制代码
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。

相关推荐
花开月满西楼1 小时前
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
android·前端·android studio
这儿有一堆花1 小时前
打造你的 Android 图像编辑器:深入解析 PhotoEditor 开源库
android·开源
皮皮高2 小时前
itvbox绿豆影视tvbox手机版影视APP源码分享搭建教程
android·前端·后端·开源·tv
EnzoRay2 小时前
MotionEvent
android
玲小珑3 小时前
Auto.js 入门指南(七)定时任务调度
android·前端
墨狂之逸才3 小时前
adb常用命令调试
android
YoungForYou3 小时前
Android端部署NCNN
android
移动开发者1号4 小时前
Jetpack Compose瀑布流实现方案
android·kotlin
移动开发者1号4 小时前
Android LinearLayout、FrameLayout、RelativeLayout、ConstraintLayout大混战
android·kotlin
移动开发者1号4 小时前
ListView与RecyclerView区别总结
android·kotlin