脚本应该存放在 data/system/Freezer/scripts 文件夹中.
当前 Freezer 开发接口 提供了7个来自Freezer本体的反射类 它们分别是:
AppCache
AppRecord
Log
MsgFreezer
ProcessList
ProcessRecord
UnfreezeService
它们的作用分别是:
AppCache: 检索被Freezer缓存的应用记录
AppRecord: 存储应用程序基本数据
Log: 用于输出日志
MsgFreezer: 用于发送冻结请求
UnfreezeService: 用于发送解冻请求
ProcessList: 检索被Freezer缓存的进程记录
ProcessRecord: 存储进程基本数据
首先,你需要将这个项目导入到Android Studio中 然后转到 nep.timeline.freezer.EntryPoint 这个类 这个类的位置不可以被变更!
接下来 让我们看看init方法体
public static void init(ClassLoader targetClassLoader, ClassLoader freezerClassLoader, @Nullable XposedModule module) {
GlobalData.targetClassLoader = targetClassLoader;
GlobalData.freezerClassLoader = freezerClassLoader;
CakeHooker.setXposedModule(module);
ReflectionInit.init(freezerClassLoader);
}
freezerClassLoader并不重要,无视即可
这个项目默认已导入Xposed API,接下来 让我们尝试Hook方法吧
例如: 我需要阻止Android CachedAppOptimizer冻结应用, 所以我们需要通过Hook拦截它。
CachedAppOptimizer类的位置在: com/android/server/am/CachedAppOptimizer
这个类中有一个 useFreezer 方法,我们只需要Hook它并让他返回false即可
代码 (Java):
CakeReflection.findAndHookMethod("com.android.server.am.CachedAppOptimizer", targetClassLoader, "useFreezer", (CakeHooker.ReplacementCallback) replacementHookCallback -> false);好的,接下来我需要检测服务执行时解冻应用程序
要实现它, 只需要Hook在 com/android/server/am/ActiveServices 中的 bumpServiceExecutingLocked 方法即可
代码 (Java):
CakeReflection.findAndHookMethod("com.android.server.am.ActiveServices", targetClassLoader, "bumpServiceExecutingLocked", "com.android.server.am.ServiceRecord", boolean.class, String.class, int.class, boolean.class, new CakeHooker.Callback() {
@Override
public void call(CakeHooker.BeforeHookCallback callback) {
Object service = callback.getArgs()[0];
if (service == null)
return;
ProcessRecord processRecord = ProcessList.getProcessRecord(CakeReflection.getObjectField(service, "app"));
if (processRecord == null)
return;
UnfreezeService.temporaryUnfreezeIfNeed(processRecord.getAppRecord(), "SERVICE");
}
});你可以通过 ./gradlew build 命令来构建你编写的脚本
然后,你应该能够在项目根目录下的 \app\build\outputs\apk\release 文件夹中找到编译后的脚本
你可以看到编译后的文件是一个apk文件。接下来,你需要解压缩它以提取 classes.dex 文件并将其打包为jar文件
然后,你只需将jar文件放入Freezer插件文件夹中即可。
以上是 Freezer 开发接口 的基本使用方法。我们希望你可以使用这个API来开发一些有趣的功能