Android 12引入了一些新的Hook API,允许OEM对某些系统行为进行更改和定制。这可以通过声明接口,将它们添加到系统服务中并在需要的地方使用它们来实现。
示例代码:
首先,在设备特定的代码库中创建一个新的接口,它将具有您要Hook的系统方法的签名。
// Device-specific code.
package com.example.mydevice.hooks;
public interface MySystemHooks {
// Boostrap hooks
default void preBootCompleted() {}
default void bootCompleted() {}
default void systemReady() {}
default void activityManagerReady() {}
// Power manager hooks
default boolean shouldIgnoreBatteryOptimizations(String pkg) {
return false;
}
// User hooks
default String getStringForUser(int userId, String key, String defaultValue) {
return defaultValue;
}
// More hooks
}
接下来,在设备的SystemServer中,注册你的接口,将它们添加到系统服务中:
// System server code.
import com.example.mydevice.hooks.MySystemHooks;
public final class SystemServer { // ... public static void main(String[] args) { // ... // Register OEM hooks ServiceManager.addService(Context.MY_SYSTEM_HOOKS_SERVICE, new MySystemHooks() {}); // ... } }
现在,在任何需要的位置,您可以使用这些添加的OEM Hook API,例如,您可以像访问普通系统服务一样访问这些:
MySystemHooks hooks = IMySystemHooks.Stub.asInterface(ServiceManager.getService(Context.MY_SYSTEM_HOOKS_SERVICE)); String myString = hooks.getStringForUser(myUserId, "my_key", "default");
注意事项:
上一篇:Android12真实手机上使用NavDeepLinkBuilder会导致崩溃。
下一篇:Android12致命错误:异常:由于mAllowStartForeground为false,不允许startForegroundService()。