Android应用生死轮回的那些事儿(7) - PackageManager的不公开API

简介: 前面,我们花了相当多的篇幅把PackageManager的公开API分门别类,并按版本顺序讲解了发展的过程。 有的同学问了,既然installer相关的API在Android 5.0才引入,那么Android 4.4及之前的应用安装的程序是怎么写出来的呢? 答案是,还有未公开的内部API啊。

Android应用生死轮回的那些事儿(7) - PackageManager的不公开API

前面,我们花了相当多的篇幅把PackageManager的公开API分门别类,并按版本顺序讲解了发展的过程。

有的同学问了,既然installer相关的API在Android 5.0才引入,那么Android 4.4及之前的应用安装的程序是怎么写出来的呢?
答案是,还有未公开的内部API啊。
这些API有些在未来的版本中就被转正了。

Android 4.4时代的隐藏API

Android 4.4的不公开API大致分为以下几类:

  • uid相关:uid相关查询没有公开
  • 多用户相关:用户相关的可能不宜公开吧
  • 权限相关:提供比公开版更高的权限
  • 安装和清理相关:核心功能在这一版还没有公开

Uid相关

getPackageUid

这个API我们上节讲过,直到Android 7.0才公开。

原型:

int getPackageUid(String packageName, int userHandle) throws NameNotFoundException;

getUidForSharedUser

根据sharedUserNanme来获取对应的uid

原型:

int getUidForSharedUser(String sharedUserName) throws NameNotFoundException;

跟用户ID相关

getInstalledPackages(flags,userId)

比起公开的API,可以指定userId.

原型:

List<PackageInfo> getInstalledPackages(int flags, int userId);

resolveActivityAsUser

支持userId的resolveActivity

原型:

ResolveInfo resolveActivityAsUser(Intent intent, int flags, int userId);

queryIntentActivitiesAsUser

支持userId的queryIntentActivities

原型:

List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent,
            int flags, int userId);

queryIntentServicesAsUser

支持userID的queryIntentServices

原型:

List<ResolveInfo> queryIntentServicesAsUser(Intent intent,
            int flags, int userId);

queryIntentContentProvidersAsUser

支持UserID的queryIntentContentProviders

原型:

List<ResolveInfo> queryIntentContentProvidersAsUser(
            Intent intent, int flags, int userId);

queryBroadcastReceivers

虽然没有叫AsUser,但是还是一个增加了userId的版本。

原型:

List<ResolveInfo> queryBroadcastReceivers(Intent intent,
            int flags, int userId);

权限相关

buildPermissionRequestIntent

生成权限操作的Intent

原型:

Intent buildPermissionRequestIntent(String... permissions);

grantPermission

为某个包授权

原型:

void grantPermission(String packageName, String permissionName);

revokePermission

回收grantPermission授予的权限

原型:

void revokePermission(String packageName, String permissionName);

安装相关

公开的install相关的API要Android 5.0才有。所以Android 4.4的应用只能使用隐藏的系统API来进行install相关的操作。

installPackage

安装一个包

原型:

void installPackage(
            Uri packageURI, IPackageInstallObserver observer, int flags,
            String installerPackageName);

installPackageWithVerification

安装一个包,同时带校验

原型:

void installPackageWithVerification(Uri packageURI,
            IPackageInstallObserver observer, int flags, String installerPackageName,
            Uri verificationURI, ManifestDigest manifestDigest,
            ContainerEncryptionParams encryptionParams);

installPackageWithVerificationAndEncryption

不仅带校验,而且还加密。

原型:

void installPackageWithVerificationAndEncryption(Uri packageURI,
            IPackageInstallObserver observer, int flags, String installerPackageName,
            VerificationParams verificationParams,
            ContainerEncryptionParams encryptionParams);

installExistingPackage

安装一个已经存在的包

原型:

int installExistingPackage(String packageName)
            throws NameNotFoundException;

deletePackage

uninstall一个应用

原型:

void deletePackage(
            String packageName, IPackageDeleteObserver observer, int flags);

清理数据相关

clearApplicationUserData

清理应用数据

原型:

void clearApplicationUserData(String packageName,IPackageDataObserver observer);

deleteApplicationCacheFiles

清理应用缓存

原型:

public void deleteApplicationCacheFiles(String packageName,
            IPackageDataObserver observer);

freeStorageAndNotify

清理存储

原型:

void freeStorageAndNotify(long freeStorageSize, IPackageDataObserver observer);

freeStorage

清理存储的另一个版本

原型:

void freeStorage(long freeStorageSize, IntentSender pi);

getPackageSizeInfo

获取包的大小

原型:

void getPackageSizeInfo(String packageName, int userHandle,
            IPackageStatsObserver observer);

多用户版:
原型:

void getPackageSizeInfo(String packageName, IPackageStatsObserver observer);

获取桌面应用名称

原型:

ComponentName getHomeActivities(List<ResolveInfo> outActivities);

Block应用相关

虽然不uninstall,但是使应用进入不可用的状态。

setApplicationBlockedSettingAsUser

设置blocking

原型:

boolean setApplicationBlockedSettingAsUser(String packageName, boolean blocked,
UserHandle userHandle);

getApplicationBlockedSettingAsUser

读取blocking

boolean getApplicationBlockedSettingAsUser(String packageName,
UserHandle userHandle);

应用在内置和外置存储中移动 - movePackage

原型:

void movePackage(String packageName, IPackageMoveObserver observer, int flags);

杂项信息获取类

获取设备ID - getVerifierDeviceIdentify

原型:

VerifierDeviceIdentity getVerifierDeviceIdentity();

获取用户的数据目录

原型:

static String getDataDirForUser(int userId, String packageName);
目录
相关文章
|
18天前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
82 4
|
1天前
|
Kubernetes 安全 Devops
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
18 10
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
|
2天前
|
数据可视化 搜索推荐 API
速卖通获得aliexpress商品详情API接口的开发、应用与收益。
速卖通(AliExpress)作为阿里巴巴旗下的跨境电商平台,为全球消费者提供丰富商品。其开放平台提供的API接口支持开发者获取商品详情等信息,本文探讨了速卖通商品详情API的开发流程、应用场景及潜在收益,包括提高运营效率、降低成本、增加收入和提升竞争力等方面。
13 1
|
7天前
|
机器学习/深度学习 搜索推荐 API
淘宝/天猫按图搜索(拍立淘)API的深度解析与应用实践
在数字化时代,电商行业迅速发展,个性化、便捷性和高效性成为消费者新需求。淘宝/天猫推出的拍立淘API,利用图像识别技术,提供精准的购物搜索体验。本文深入探讨其原理、优势、应用场景及实现方法,助力电商技术和用户体验提升。
|
10天前
|
搜索推荐 算法 数据挖掘
淘口令真实URL API接口的应用与收益
淘口令作为电商推广利器,通过简短文本引导用户直达商品页,提升购物体验与销售效率。本文探讨淘口令真实URL API接口的应用,包括商品推广、数据分析、跨境电商及社交媒体营销等方面,揭示其在电商领域的巨大潜力与收益。
20 1
|
14天前
|
JSON 搜索推荐 API
LAZADA关键词搜索API接口的获取与应用
Lazada作为东南亚领先的电商平台,为满足开发者和商户需求,开放了关键词搜索API接口。本文详细介绍该接口的获取与应用,助力提升电商业务效率。接口支持关键词搜索、指定搜索范围和排序方式,提供精准、灵活且全面的数据支持,促进电商应用和服务的优化与创新。
21 3
|
13天前
|
监控 API 数据安全/隐私保护
小红书详情API接口的获取与应用
在互联网信息爆炸的时代,小红书凭借丰富的用户生成内容(UGC)和精准的推荐系统迅速崛起,成为重要的社区电商平台。为了帮助开发者高效利用平台数据,小红书开放平台提供了多种API接口,涵盖商品详情和笔记详情等。本文详细介绍了如何注册、申请权限、构建请求、处理响应及应用这些API接口,旨在为开发者提供全面的指南,助力数据驱动的决策与创新。
70 1
|
13天前
|
供应链 数据挖掘 API
获取亚马逊畅销榜API接口的获取与应用
本文详细介绍了如何获取亚马逊畅销榜API接口及其应用方法。首先,需注册并获取API凭证,了解常用API接口如Product Advertising API、Sponsored Products API等。接着,选择合适的API端点,发送请求并解析响应。最后,探讨了API在商品查询、数据分析、跨境电商及商业工具开发等方面的应用,强调了遵守服务条款的重要性。
29 0
|
14天前
|
缓存 API 持续交付
阿里巴巴热卖商品推荐API接口的获取与应用
阿里巴巴推出热卖商品推荐API接口,基于AI算法,根据用户行为推荐商品,涵盖名称、价格、描述等信息。本文介绍其获取与应用方法,帮助商家和开发者提高推荐精准度和用户满意度,优化库存管理和营销策略,提升整体销售效果。
21 0
|
17天前
|
JavaScript 前端开发 API
Vue.js 3:深入探索组合式API的实践与应用
Vue.js 3:深入探索组合式API的实践与应用