它在源码的目次是在framework下: /frameworks/base/core/java/android/app/
包名为 android.app;
但它有 @hide 标记,则在app无法直接访问,但是可以通过反射获取(如Hook 技能中常用)
package android.app;/** * This manages the execution of the main thread in an * application process, scheduling and executing activities, * broadcasts, and other operations on it as the activity * manager requests. * * {@hide} */public final class ActivityThread extends ClientTransactionHandler implements ActivityThreadInternal {2. 获取当前应用 currentApplication()
是一个map, 表现1个大概多个路径.
同时,相当于一个缓存, 后续纵然App 更改了 LoadedApk里的内容,但是在这里生存的对象大概是稳定的.
@GuardedBy("mResourcesManager") @UnsupportedAppUsage final ArrayMap<String, WeakReference<LoadedApk>> mResourcePackages = new ArrayMap<>();
PS: 尚有别的一个变量mPackages是生存 代码所在的目次
@GuardedBy("mResourcesManager")
@UnsupportedAppUsage
final ArrayMap<String, WeakReference<LoadedApk>> mPackages = new ArrayMap<>();
3. 2 public 方法
在通过API getPackageInfo 获取 LoadedApk ,由几个public 的方法,参数差别处置惩罚流程略有差别.
都是不公开的,@UnsupportedAppUsage
public final LoadedApk getPackageInfo(ApplicationInfo ai, CompatibilityInfo compatInfo, int flags) {} public final LoadedApk getPackageInfo(String packageName, CompatibilityInfo compatInfo, int flags) {} public final LoadedApk getPackageInfo(String packageName, CompatibilityInfo compatInfo, int flags, int userId) { public final LoadedApk getPackageInfoNoCheck(ApplicationInfo ai, CompatibilityInfo compatInfo) {} 3. 3 private 实现方法