diff options
author | Dianne Hackborn <hackbod@google.com> | 2009-05-11 18:54:45 -0700 |
---|---|---|
committer | Dianne Hackborn <hackbod@google.com> | 2009-05-12 16:09:43 -0700 |
commit | ade3ecad94d1f4431576f53bae26c35efbf7a2c9 (patch) | |
tree | 066fc83ddeb6c52011e13744152b594911895094 /services | |
parent | 807f23b2d8c7148cf6fc95bb88cfc2f78e4be66a (diff) | |
download | frameworks_base-ade3ecad94d1f4431576f53bae26c35efbf7a2c9.zip frameworks_base-ade3ecad94d1f4431576f53bae26c35efbf7a2c9.tar.gz frameworks_base-ade3ecad94d1f4431576f53bae26c35efbf7a2c9.tar.bz2 |
Implement issue #1783881 (manifest option for adb-install-only apps)
You can now use android:testOnly="true" to not allow your .apk to be installed
as a normal app. The only way to do so is with the pm command and giving the
-t option, which sets a new INSTALL_ALLOW_TEST flag when installing.
I also used this to clean up the install API... actually, mostly to hide
it, since it is not accessible to apps so shouldn't be in the SDK. We
will be doing some more work on it, so this will prevent adding yet
another backwards-compatibility-for-no-reason version.
Diffstat (limited to 'services')
-rw-r--r-- | services/java/com/android/server/PackageManagerService.java | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java index b17a941..4ee0c91 100644 --- a/services/java/com/android/server/PackageManagerService.java +++ b/services/java/com/android/server/PackageManagerService.java @@ -3396,7 +3396,7 @@ class PackageManagerService extends IPackageManager.Stub { oldInstallerPackageName = mSettings.getInstallerPackageName(pkgName); } - int parseFlags = PackageManager.REPLACE_EXISTING_PACKAGE; + int parseFlags = PackageManager.INSTALL_REPLACE_EXISTING; // First delete the existing package while retaining the data directory if (!deletePackageLI(pkgName, false, PackageManager.DONT_DELETE_DATA, res.removedInfo)) { @@ -3468,7 +3468,7 @@ class PackageManagerService extends IPackageManager.Stub { installPackageLI( Uri.fromFile(new File(deletedPackage.mPath)), isForwardLocked(deletedPackage) - ? PackageManager.FORWARD_LOCK_PACKAGE + ? PackageManager.INSTALL_FORWARD_LOCK : 0, false, oldInstallerPackageName); } } @@ -3481,7 +3481,7 @@ class PackageManagerService extends IPackageManager.Stub { String installerPackageName, PackageInstalledInfo res) { PackageParser.Package newPackage = null; boolean updatedSettings = false; - int parseFlags = PackageManager.REPLACE_EXISTING_PACKAGE | + int parseFlags = PackageManager.INSTALL_REPLACE_EXISTING | PackageParser.PARSE_IS_SYSTEM; String packageName = deletedPackage.packageName; res.returnCode = PackageManager.INSTALL_FAILED_REPLACE_COULDNT_DELETE; @@ -3697,13 +3697,13 @@ class PackageManagerService extends IPackageManager.Stub { res.name = pkgName; //initialize some variables before installing pkg final String pkgFileName = pkgName + ".apk"; - final File destDir = ((pFlags&PackageManager.FORWARD_LOCK_PACKAGE) != 0) + final File destDir = ((pFlags&PackageManager.INSTALL_FORWARD_LOCK) != 0) ? mDrmAppPrivateInstallDir : mAppInstallDir; final File destPackageFile = new File(destDir, pkgFileName); final String destFilePath = destPackageFile.getAbsolutePath(); File destResourceFile; - if ((pFlags&PackageManager.FORWARD_LOCK_PACKAGE) != 0) { + if ((pFlags&PackageManager.INSTALL_FORWARD_LOCK) != 0) { final String publicZipFileName = pkgName + ".zip"; destResourceFile = new File(mAppInstallDir, publicZipFileName); forwardLocked = true; @@ -3722,6 +3722,12 @@ class PackageManagerService extends IPackageManager.Stub { res.returnCode = pp.getParseError(); break main_flow; } + if ((pkg.applicationInfo.flags&ApplicationInfo.FLAG_TEST_ONLY) != 0) { + if ((pFlags&PackageManager.INSTALL_ALLOW_TEST) == 0) { + res.returnCode = PackageManager.INSTALL_FAILED_TEST_ONLY; + break main_flow; + } + } if (GET_CERTIFICATES && !pp.collectCertificates(pkg, parseFlags)) { res.returnCode = pp.getParseError(); break main_flow; @@ -3729,7 +3735,7 @@ class PackageManagerService extends IPackageManager.Stub { synchronized (mPackages) { //check if installing already existing package - if ((pFlags&PackageManager.REPLACE_EXISTING_PACKAGE) != 0 + if ((pFlags&PackageManager.INSTALL_REPLACE_EXISTING) != 0 && mPackages.containsKey(pkgName)) { replacingExistingPackage = true; } |