Loading services/core/java/com/android/server/pm/InstallDependencyHelper.java +13 −10 Original line number Diff line number Diff line Loading @@ -78,24 +78,22 @@ public class InstallDependencyHelper { mPackageInstallerService = packageInstallerService; } void resolveLibraryDependenciesIfNeeded(PackageLite pkg, Computer snapshot, int userId, Handler handler, OutcomeReceiver<Void, PackageManagerException> origCallback) { void resolveLibraryDependenciesIfNeeded(List<SharedLibraryInfo> missingLibraries, PackageLite pkg, Computer snapshot, int userId, Handler handler, OutcomeReceiver<Void, PackageManagerException> origCallback) { CallOnceProxy callback = new CallOnceProxy(handler, origCallback); try { resolveLibraryDependenciesIfNeededInternal(pkg, snapshot, userId, handler, callback); } catch (PackageManagerException e) { callback.onError(e); resolveLibraryDependenciesIfNeededInternal( missingLibraries, pkg, snapshot, userId, handler, callback); } catch (Exception e) { onError(callback, e.getMessage()); } } private void resolveLibraryDependenciesIfNeededInternal(PackageLite pkg, Computer snapshot, int userId, Handler handler, CallOnceProxy callback) throws PackageManagerException { final List<SharedLibraryInfo> missing = mSharedLibraries.collectMissingSharedLibraryInfos(pkg); private void resolveLibraryDependenciesIfNeededInternal(List<SharedLibraryInfo> missing, PackageLite pkg, Computer snapshot, int userId, Handler handler, CallOnceProxy callback) { if (missing.isEmpty()) { if (DEBUG) { Slog.d(TAG, "No missing dependency for " + pkg.getPackageName()); Loading Loading @@ -129,6 +127,11 @@ public class InstallDependencyHelper { } } List<SharedLibraryInfo> getMissingSharedLibraries(PackageLite pkg) throws PackageManagerException { return mSharedLibraries.collectMissingSharedLibraryInfos(pkg); } void notifySessionComplete(int sessionId) { if (DEBUG) { Slog.d(TAG, "Session complete for " + sessionId); Loading services/core/java/com/android/server/pm/InstallRequest.java +16 −0 Original line number Diff line number Diff line Loading @@ -170,6 +170,8 @@ final class InstallRequest { private final boolean mHasAppMetadataFileFromInstaller; private boolean mKeepArtProfile = false; private final boolean mDependencyInstallerEnabled; private final int mMissingSharedLibraryCount; // New install InstallRequest(InstallingSession params) { Loading @@ -190,6 +192,8 @@ final class InstallRequest { mRequireUserAction = params.mRequireUserAction; mPreVerifiedDomains = params.mPreVerifiedDomains; mHasAppMetadataFileFromInstaller = params.mHasAppMetadataFile; mDependencyInstallerEnabled = params.mDependencyInstallerEnabled; mMissingSharedLibraryCount = params.mMissingSharedLibraryCount; } // Install existing package as user Loading @@ -209,6 +213,8 @@ final class InstallRequest { mInstallerUidForInstallExisting = installerUid; mSystem = isSystem; mHasAppMetadataFileFromInstaller = false; mDependencyInstallerEnabled = false; mMissingSharedLibraryCount = 0; } // addForInit Loading @@ -231,6 +237,8 @@ final class InstallRequest { mRequireUserAction = USER_ACTION_UNSPECIFIED; mDisabledPs = disabledPs; mHasAppMetadataFileFromInstaller = false; mDependencyInstallerEnabled = false; mMissingSharedLibraryCount = 0; } @Nullable Loading Loading @@ -1069,4 +1077,12 @@ final class InstallRequest { boolean isKeepArtProfile() { return mKeepArtProfile; } int getMissingSharedLibraryCount() { return mMissingSharedLibraryCount; } boolean isDependencyInstallerEnabled() { return mDependencyInstallerEnabled; } } services/core/java/com/android/server/pm/InstallingSession.java +8 −1 Original line number Diff line number Diff line Loading @@ -103,6 +103,8 @@ class InstallingSession { final DomainSet mPreVerifiedDomains; final boolean mHasAppMetadataFile; @Nullable final String mDexoptCompilerFilter; final boolean mDependencyInstallerEnabled; final int mMissingSharedLibraryCount; // For move install InstallingSession(OriginInfo originInfo, MoveInfo moveInfo, IPackageInstallObserver2 observer, Loading Loading @@ -138,13 +140,16 @@ class InstallingSession { mPreVerifiedDomains = null; mHasAppMetadataFile = false; mDexoptCompilerFilter = null; mDependencyInstallerEnabled = false; mMissingSharedLibraryCount = 0; } InstallingSession(int sessionId, File stagedDir, IPackageInstallObserver2 observer, PackageInstaller.SessionParams sessionParams, InstallSource installSource, UserHandle user, SigningDetails signingDetails, int installerUid, PackageLite packageLite, DomainSet preVerifiedDomains, PackageManagerService pm, boolean hasAppMetadatafile) { boolean hasAppMetadatafile, boolean dependencyInstallerEnabled, int missingSharedLibraryCount) { mPm = pm; mUser = user; mOriginInfo = OriginInfo.fromStagedFile(stagedDir); Loading Loading @@ -175,6 +180,8 @@ class InstallingSession { mPreVerifiedDomains = preVerifiedDomains; mHasAppMetadataFile = hasAppMetadatafile; mDexoptCompilerFilter = sessionParams.dexoptCompilerFilter; mDependencyInstallerEnabled = dependencyInstallerEnabled; mMissingSharedLibraryCount = missingSharedLibraryCount; } @Override Loading services/core/java/com/android/server/pm/PackageInstallerSession.java +32 −6 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import static android.content.pm.PackageManager.INSTALL_FAILED_INSUFFICIENT_STOR import static android.content.pm.PackageManager.INSTALL_FAILED_INTERNAL_ERROR; import static android.content.pm.PackageManager.INSTALL_FAILED_INVALID_APK; import static android.content.pm.PackageManager.INSTALL_FAILED_MEDIA_UNAVAILABLE; import static android.content.pm.PackageManager.INSTALL_FAILED_MISSING_SHARED_LIBRARY; import static android.content.pm.PackageManager.INSTALL_FAILED_MISSING_SPLIT; import static android.content.pm.PackageManager.INSTALL_FAILED_PRE_APPROVAL_NOT_AVAILABLE; import static android.content.pm.PackageManager.INSTALL_FAILED_SESSION_INVALID; Loading Loading @@ -109,6 +110,7 @@ import android.content.pm.PackageInstaller.UserActionReason; import android.content.pm.PackageManager; import android.content.pm.PackageManager.PackageInfoFlags; import android.content.pm.PackageManagerInternal; import android.content.pm.SharedLibraryInfo; import android.content.pm.SigningDetails; import android.content.pm.dex.DexMetadataHelper; import android.content.pm.parsing.ApkLite; Loading Loading @@ -540,6 +542,9 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { @GuardedBy("mLock") private DomainSet mPreVerifiedDomains; private AtomicBoolean mDependencyInstallerEnabled = new AtomicBoolean(); private AtomicInteger mMissingSharedLibraryCount = new AtomicInteger(); static class FileEntry { private final int mIndex; private final InstallationFile mFile; Loading Loading @@ -3232,6 +3237,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { if (Flags.sdkDependencyInstaller() && params.isAutoInstallDependenciesEnabled && !isMultiPackage()) { mDependencyInstallerEnabled.set(true); resolveLibraryDependenciesIfNeeded(); } else { install(); Loading @@ -3241,8 +3247,20 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { private void resolveLibraryDependenciesIfNeeded() { synchronized (mLock) { mInstallDependencyHelper.resolveLibraryDependenciesIfNeeded(mPackageLite, mPm.snapshotComputer(), userId, mHandler, List<SharedLibraryInfo> missingLibraries = new ArrayList<>(); try { missingLibraries = mInstallDependencyHelper.getMissingSharedLibraries(mPackageLite); } catch (PackageManagerException e) { handleDependencyResolutionFailure(e); } catch (Exception e) { handleDependencyResolutionFailure( new PackageManagerException( INSTALL_FAILED_MISSING_SHARED_LIBRARY, e.getMessage())); } mMissingSharedLibraryCount.set(missingLibraries.size()); mInstallDependencyHelper.resolveLibraryDependenciesIfNeeded(missingLibraries, mPackageLite, mPm.snapshotComputer(), userId, mHandler, new OutcomeReceiver<>() { @Override Loading @@ -3252,14 +3270,21 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { @Override public void onError(@NonNull PackageManagerException e) { final String completeMsg = ExceptionUtils.getCompleteMessage(e); setSessionFailed(e.error, completeMsg); onSessionDependencyResolveFailure(e.error, completeMsg); handleDependencyResolutionFailure(e); } }); } } private void handleDependencyResolutionFailure(@NonNull PackageManagerException e) { final String completeMsg = ExceptionUtils.getCompleteMessage(e); setSessionFailed(e.error, completeMsg); onSessionDependencyResolveFailure(e.error, completeMsg); PackageMetrics.onDependencyInstallationFailure( sessionId, getPackageName(), e.error, mInstallerUid, params, mMissingSharedLibraryCount.get()); } /** * Stages this session for install and returns a * {@link InstallingSession} representing this new staged state. Loading Loading @@ -3327,7 +3352,8 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { synchronized (mLock) { return new InstallingSession(sessionId, stageDir, localObserver, params, mInstallSource, user, mSigningDetails, mInstallerUid, mPackageLite, mPreVerifiedDomains, mPm, mHasAppMetadataFile); mHasAppMetadataFile, mDependencyInstallerEnabled.get(), mMissingSharedLibraryCount.get()); } } Loading services/core/java/com/android/server/pm/PackageMetrics.java +53 −2 Original line number Diff line number Diff line Loading @@ -32,7 +32,9 @@ import android.app.admin.SecurityLog; import android.content.ComponentName; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.DataLoaderType; import android.content.pm.Flags; import android.content.pm.PackageInstaller; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.parsing.ApkLiteParseUtils; Loading Loading @@ -173,7 +175,10 @@ final class PackageMetrics { mInstallRequest.isInstallInherit() /* is_inherit */, mInstallRequest.isInstallForUsers() /* is_installing_existing_as_user */, mInstallRequest.isInstallMove() /* is_move_install */, false /* is_staged */ false /* is_staged */, mInstallRequest .isDependencyInstallerEnabled() /* is_install_dependencies_enabled */, mInstallRequest.getMissingSharedLibraryCount() /* missing_dependencies_count */ ); } Loading Loading @@ -323,7 +328,53 @@ final class PackageMetrics { verifyingSession.isInherit() /* is_inherit */, false /* is_installing_existing_as_user */, false /* is_move_install */, verifyingSession.isStaged() /* is_staged */ verifyingSession.isStaged() /* is_staged */, false /* is_install_dependencies_enabled */, 0 /* missing_dependencies_count */ ); } static void onDependencyInstallationFailure( int sessionId, String packageName, int errorCode, int installerPackageUid, PackageInstaller.SessionParams params, int missingDependenciesCount) { if (params == null) { return; } int dataLoaderType = DataLoaderType.NONE; if (params.dataLoaderParams != null) { dataLoaderType = params.dataLoaderParams.getType(); } FrameworkStatsLog.write(FrameworkStatsLog.PACKAGE_INSTALLATION_SESSION_REPORTED, sessionId /* session_id */, packageName /* package_name */, INVALID_UID /* uid */, null /* user_ids */, null /* user_types */, null /* original_user_ids */, null /* original_user_types */, errorCode /* public_return_code */, 0 /* internal_error_code */, 0 /* apks_size_bytes */, 0 /* version_code */, null /* install_steps */, null /* step_duration_millis */, 0 /* total_duration_millis */, 0 /* install_flags */, installerPackageUid /* installer_package_uid */, INVALID_UID /* original_installer_package_uid */, dataLoaderType /* data_loader_type */, params.requireUserAction /* user_action_required_type */, (params.installFlags & PackageManager.INSTALL_INSTANT_APP) != 0 /* is_instant */, false /* is_replace */, false /* is_system */, params.mode == PackageInstaller.SessionParams.MODE_INHERIT_EXISTING /* is_inherit */, false /* is_installing_existing_as_user */, false /* is_move_install */, params.isStaged /* is_staged */, true /* is_install_dependencies_enabled */, missingDependenciesCount /* missing_dependencies_count */ ); } Loading Loading
services/core/java/com/android/server/pm/InstallDependencyHelper.java +13 −10 Original line number Diff line number Diff line Loading @@ -78,24 +78,22 @@ public class InstallDependencyHelper { mPackageInstallerService = packageInstallerService; } void resolveLibraryDependenciesIfNeeded(PackageLite pkg, Computer snapshot, int userId, Handler handler, OutcomeReceiver<Void, PackageManagerException> origCallback) { void resolveLibraryDependenciesIfNeeded(List<SharedLibraryInfo> missingLibraries, PackageLite pkg, Computer snapshot, int userId, Handler handler, OutcomeReceiver<Void, PackageManagerException> origCallback) { CallOnceProxy callback = new CallOnceProxy(handler, origCallback); try { resolveLibraryDependenciesIfNeededInternal(pkg, snapshot, userId, handler, callback); } catch (PackageManagerException e) { callback.onError(e); resolveLibraryDependenciesIfNeededInternal( missingLibraries, pkg, snapshot, userId, handler, callback); } catch (Exception e) { onError(callback, e.getMessage()); } } private void resolveLibraryDependenciesIfNeededInternal(PackageLite pkg, Computer snapshot, int userId, Handler handler, CallOnceProxy callback) throws PackageManagerException { final List<SharedLibraryInfo> missing = mSharedLibraries.collectMissingSharedLibraryInfos(pkg); private void resolveLibraryDependenciesIfNeededInternal(List<SharedLibraryInfo> missing, PackageLite pkg, Computer snapshot, int userId, Handler handler, CallOnceProxy callback) { if (missing.isEmpty()) { if (DEBUG) { Slog.d(TAG, "No missing dependency for " + pkg.getPackageName()); Loading Loading @@ -129,6 +127,11 @@ public class InstallDependencyHelper { } } List<SharedLibraryInfo> getMissingSharedLibraries(PackageLite pkg) throws PackageManagerException { return mSharedLibraries.collectMissingSharedLibraryInfos(pkg); } void notifySessionComplete(int sessionId) { if (DEBUG) { Slog.d(TAG, "Session complete for " + sessionId); Loading
services/core/java/com/android/server/pm/InstallRequest.java +16 −0 Original line number Diff line number Diff line Loading @@ -170,6 +170,8 @@ final class InstallRequest { private final boolean mHasAppMetadataFileFromInstaller; private boolean mKeepArtProfile = false; private final boolean mDependencyInstallerEnabled; private final int mMissingSharedLibraryCount; // New install InstallRequest(InstallingSession params) { Loading @@ -190,6 +192,8 @@ final class InstallRequest { mRequireUserAction = params.mRequireUserAction; mPreVerifiedDomains = params.mPreVerifiedDomains; mHasAppMetadataFileFromInstaller = params.mHasAppMetadataFile; mDependencyInstallerEnabled = params.mDependencyInstallerEnabled; mMissingSharedLibraryCount = params.mMissingSharedLibraryCount; } // Install existing package as user Loading @@ -209,6 +213,8 @@ final class InstallRequest { mInstallerUidForInstallExisting = installerUid; mSystem = isSystem; mHasAppMetadataFileFromInstaller = false; mDependencyInstallerEnabled = false; mMissingSharedLibraryCount = 0; } // addForInit Loading @@ -231,6 +237,8 @@ final class InstallRequest { mRequireUserAction = USER_ACTION_UNSPECIFIED; mDisabledPs = disabledPs; mHasAppMetadataFileFromInstaller = false; mDependencyInstallerEnabled = false; mMissingSharedLibraryCount = 0; } @Nullable Loading Loading @@ -1069,4 +1077,12 @@ final class InstallRequest { boolean isKeepArtProfile() { return mKeepArtProfile; } int getMissingSharedLibraryCount() { return mMissingSharedLibraryCount; } boolean isDependencyInstallerEnabled() { return mDependencyInstallerEnabled; } }
services/core/java/com/android/server/pm/InstallingSession.java +8 −1 Original line number Diff line number Diff line Loading @@ -103,6 +103,8 @@ class InstallingSession { final DomainSet mPreVerifiedDomains; final boolean mHasAppMetadataFile; @Nullable final String mDexoptCompilerFilter; final boolean mDependencyInstallerEnabled; final int mMissingSharedLibraryCount; // For move install InstallingSession(OriginInfo originInfo, MoveInfo moveInfo, IPackageInstallObserver2 observer, Loading Loading @@ -138,13 +140,16 @@ class InstallingSession { mPreVerifiedDomains = null; mHasAppMetadataFile = false; mDexoptCompilerFilter = null; mDependencyInstallerEnabled = false; mMissingSharedLibraryCount = 0; } InstallingSession(int sessionId, File stagedDir, IPackageInstallObserver2 observer, PackageInstaller.SessionParams sessionParams, InstallSource installSource, UserHandle user, SigningDetails signingDetails, int installerUid, PackageLite packageLite, DomainSet preVerifiedDomains, PackageManagerService pm, boolean hasAppMetadatafile) { boolean hasAppMetadatafile, boolean dependencyInstallerEnabled, int missingSharedLibraryCount) { mPm = pm; mUser = user; mOriginInfo = OriginInfo.fromStagedFile(stagedDir); Loading Loading @@ -175,6 +180,8 @@ class InstallingSession { mPreVerifiedDomains = preVerifiedDomains; mHasAppMetadataFile = hasAppMetadatafile; mDexoptCompilerFilter = sessionParams.dexoptCompilerFilter; mDependencyInstallerEnabled = dependencyInstallerEnabled; mMissingSharedLibraryCount = missingSharedLibraryCount; } @Override Loading
services/core/java/com/android/server/pm/PackageInstallerSession.java +32 −6 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import static android.content.pm.PackageManager.INSTALL_FAILED_INSUFFICIENT_STOR import static android.content.pm.PackageManager.INSTALL_FAILED_INTERNAL_ERROR; import static android.content.pm.PackageManager.INSTALL_FAILED_INVALID_APK; import static android.content.pm.PackageManager.INSTALL_FAILED_MEDIA_UNAVAILABLE; import static android.content.pm.PackageManager.INSTALL_FAILED_MISSING_SHARED_LIBRARY; import static android.content.pm.PackageManager.INSTALL_FAILED_MISSING_SPLIT; import static android.content.pm.PackageManager.INSTALL_FAILED_PRE_APPROVAL_NOT_AVAILABLE; import static android.content.pm.PackageManager.INSTALL_FAILED_SESSION_INVALID; Loading Loading @@ -109,6 +110,7 @@ import android.content.pm.PackageInstaller.UserActionReason; import android.content.pm.PackageManager; import android.content.pm.PackageManager.PackageInfoFlags; import android.content.pm.PackageManagerInternal; import android.content.pm.SharedLibraryInfo; import android.content.pm.SigningDetails; import android.content.pm.dex.DexMetadataHelper; import android.content.pm.parsing.ApkLite; Loading Loading @@ -540,6 +542,9 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { @GuardedBy("mLock") private DomainSet mPreVerifiedDomains; private AtomicBoolean mDependencyInstallerEnabled = new AtomicBoolean(); private AtomicInteger mMissingSharedLibraryCount = new AtomicInteger(); static class FileEntry { private final int mIndex; private final InstallationFile mFile; Loading Loading @@ -3232,6 +3237,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { if (Flags.sdkDependencyInstaller() && params.isAutoInstallDependenciesEnabled && !isMultiPackage()) { mDependencyInstallerEnabled.set(true); resolveLibraryDependenciesIfNeeded(); } else { install(); Loading @@ -3241,8 +3247,20 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { private void resolveLibraryDependenciesIfNeeded() { synchronized (mLock) { mInstallDependencyHelper.resolveLibraryDependenciesIfNeeded(mPackageLite, mPm.snapshotComputer(), userId, mHandler, List<SharedLibraryInfo> missingLibraries = new ArrayList<>(); try { missingLibraries = mInstallDependencyHelper.getMissingSharedLibraries(mPackageLite); } catch (PackageManagerException e) { handleDependencyResolutionFailure(e); } catch (Exception e) { handleDependencyResolutionFailure( new PackageManagerException( INSTALL_FAILED_MISSING_SHARED_LIBRARY, e.getMessage())); } mMissingSharedLibraryCount.set(missingLibraries.size()); mInstallDependencyHelper.resolveLibraryDependenciesIfNeeded(missingLibraries, mPackageLite, mPm.snapshotComputer(), userId, mHandler, new OutcomeReceiver<>() { @Override Loading @@ -3252,14 +3270,21 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { @Override public void onError(@NonNull PackageManagerException e) { final String completeMsg = ExceptionUtils.getCompleteMessage(e); setSessionFailed(e.error, completeMsg); onSessionDependencyResolveFailure(e.error, completeMsg); handleDependencyResolutionFailure(e); } }); } } private void handleDependencyResolutionFailure(@NonNull PackageManagerException e) { final String completeMsg = ExceptionUtils.getCompleteMessage(e); setSessionFailed(e.error, completeMsg); onSessionDependencyResolveFailure(e.error, completeMsg); PackageMetrics.onDependencyInstallationFailure( sessionId, getPackageName(), e.error, mInstallerUid, params, mMissingSharedLibraryCount.get()); } /** * Stages this session for install and returns a * {@link InstallingSession} representing this new staged state. Loading Loading @@ -3327,7 +3352,8 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { synchronized (mLock) { return new InstallingSession(sessionId, stageDir, localObserver, params, mInstallSource, user, mSigningDetails, mInstallerUid, mPackageLite, mPreVerifiedDomains, mPm, mHasAppMetadataFile); mHasAppMetadataFile, mDependencyInstallerEnabled.get(), mMissingSharedLibraryCount.get()); } } Loading
services/core/java/com/android/server/pm/PackageMetrics.java +53 −2 Original line number Diff line number Diff line Loading @@ -32,7 +32,9 @@ import android.app.admin.SecurityLog; import android.content.ComponentName; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.DataLoaderType; import android.content.pm.Flags; import android.content.pm.PackageInstaller; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.parsing.ApkLiteParseUtils; Loading Loading @@ -173,7 +175,10 @@ final class PackageMetrics { mInstallRequest.isInstallInherit() /* is_inherit */, mInstallRequest.isInstallForUsers() /* is_installing_existing_as_user */, mInstallRequest.isInstallMove() /* is_move_install */, false /* is_staged */ false /* is_staged */, mInstallRequest .isDependencyInstallerEnabled() /* is_install_dependencies_enabled */, mInstallRequest.getMissingSharedLibraryCount() /* missing_dependencies_count */ ); } Loading Loading @@ -323,7 +328,53 @@ final class PackageMetrics { verifyingSession.isInherit() /* is_inherit */, false /* is_installing_existing_as_user */, false /* is_move_install */, verifyingSession.isStaged() /* is_staged */ verifyingSession.isStaged() /* is_staged */, false /* is_install_dependencies_enabled */, 0 /* missing_dependencies_count */ ); } static void onDependencyInstallationFailure( int sessionId, String packageName, int errorCode, int installerPackageUid, PackageInstaller.SessionParams params, int missingDependenciesCount) { if (params == null) { return; } int dataLoaderType = DataLoaderType.NONE; if (params.dataLoaderParams != null) { dataLoaderType = params.dataLoaderParams.getType(); } FrameworkStatsLog.write(FrameworkStatsLog.PACKAGE_INSTALLATION_SESSION_REPORTED, sessionId /* session_id */, packageName /* package_name */, INVALID_UID /* uid */, null /* user_ids */, null /* user_types */, null /* original_user_ids */, null /* original_user_types */, errorCode /* public_return_code */, 0 /* internal_error_code */, 0 /* apks_size_bytes */, 0 /* version_code */, null /* install_steps */, null /* step_duration_millis */, 0 /* total_duration_millis */, 0 /* install_flags */, installerPackageUid /* installer_package_uid */, INVALID_UID /* original_installer_package_uid */, dataLoaderType /* data_loader_type */, params.requireUserAction /* user_action_required_type */, (params.installFlags & PackageManager.INSTALL_INSTANT_APP) != 0 /* is_instant */, false /* is_replace */, false /* is_system */, params.mode == PackageInstaller.SessionParams.MODE_INHERIT_EXISTING /* is_inherit */, false /* is_installing_existing_as_user */, false /* is_move_install */, params.isStaged /* is_staged */, true /* is_install_dependencies_enabled */, missingDependenciesCount /* missing_dependencies_count */ ); } Loading