Android13 PMS服务的获取方法
基于Android T(13)代码
PackageManagerService 不再 extends IPackageManager.Stub ——> 改为由抽象类 IPackageManagerBase extends IPackageManager.Stub
不再以pkms为基础类addService "package"服务 ——> 改为以PackageManagerService 的内部类IPackageManagerImpl 为基础类addService"package"服务
而此内部类IPackageManagerImpl实现了抽象类IPackageManagerBase,则app可以通过AIDL将获得的binder转为接口实例来使用调用系统接口。
具体使用:
apk内获取
(可能需要是system_app或者在frameworks/base/core/java/android/content/pm/ApplicationInfo.java中的isAllowedToUseHiddenApis函数中添加调用系统隐藏接口的app_whitelist)
还需要建立一个aidl类,把需要的接口声明写进去(详见我另一篇 访问系统隐藏类 的随笔)
try {
Method method = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);
IBinder binder = (IBinder) method.invoke(null, "package");
if (binder != null) {
IPackageManager mIPm = IPackageManager.Stub.asInterface(binder);
res = mIPm.deletePreloadsFileCache();
}
} catch (RemoteException | ClassNotFoundException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
e.printStackTrace();
}
Framework内获取
IBinder binder = (IBinder)ServiceManager.getService("package");
IPackageManager mIPm = IPackageManager.Stub.asInterface(binder);
【至于为什么是“package”,这是它的名字,在启动pms服务的时候就会为其起名字,可以进PMS.java中看源码】
本文来自博客园,作者:小汀,转载请注明原文链接:https://www.cnblogs.com/1118zjg/p/16969681.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)