132 Commits

Author SHA1 Message Date
Suchi Amalapurapu
5b993ce7bc Include install location preference when installing packages.
Changes include
Add new remote call in default container service to determine
install location.
Rename INSTALL_ON_SDCARD
Remove recommentAppInstall method
Add some additional flags used in remote stubs.
Move check for protected apps prior to copy.
Unit tests

DefaultContainerService first parses the file uri(if content uri is specified
it returns a default install internal only value) and returns
a recommended location. Based on which the temporary id is determined
either a file name or a container id and the file is copied there.
This is then later renamed during install.
Todo's light weight parsing of package when determining location since we
just need the install location attribute only when finding out
recomended location. This will also enable to move the check for
updated system apps(cannot be on sdcard) prior to copying.
2010-02-12 18:50:47 -08:00
Dianne Hackborn
470969346d Add APIs for mapping between new and current package names.
This will allow Market and others to find out what the "real" name
of a package is, when it is currently running under the old name of
a previously installed version.
2010-02-11 20:02:20 -08:00
Dianne Hackborn
6dee18c5cf New implementation of <original-package> tag.
We now have the new package retain the name of the old package.  This makes
sure that all existing references to it (shortcuts, widgets, etc) will still
work.

This does mean that your package can run under either the old or new name,
depending on whether the user got it with an update.  Buyer beware!

I have tried testing all of the paths of updating, installing another
update in /data, uninstalling the update, updating system with an even
newer update, etc.  I think they all work.  No promises though.
2010-02-11 11:04:49 -08:00
Makoto Onuki
a7d7f79c40 Adding null check. 2010-02-10 12:16:29 -08:00
David 'Digit' Turner
add1376cde Generate /data/system/packages.list in the PackageManager
This file contains uid + debugFlag + dataPath information for
each non-system installed package. It is meant to be used later
from native code and thus needs to be considerably simpler to
parser than packages.xml.

The file should only be readable by non-system userIds, and its
format is essentially line-based with each line like:

  <pkgName> <uid> <debugFlag> <dataDir>

With:

  <pkgName>    as the package name
  <uid>        as the application-specific user id
  <debugFlag>  either 0 or 1. 1 if the package is debuggable
  <dataDir>    path to the package's data directory

We need the debug flag to allow 'run-as' to only allow
commands to be executed on debuggable packages, even on
production devices.
2010-02-09 18:18:55 -08:00
Dianne Hackborn
e83cefcef0 New external storage APIs.
This implements the spec for external storage organization, and
properly reflects how the media scanner organizes the files it finds.

Also includes package manager support for removing app private
files from external storage when the application is uninstalled.

For the new APIs and paths, the main place to look is Environment
and Context.
2010-02-09 14:20:55 -08:00
San Mehat
b104340496 Framework: Clean up / Refactor Mount APIs
- Move android.storage.* -> android.os.storage.* and refactor users
 - Refactor generic shares back to explicit ums enable/disable/isEnabled
 - Remove media insert/removed event callbacks (not ready for Froyo)
 - Remove 'label' from volume state change callbacks
 - Add public API functions for enabling/disabling USB mass storage (permissions enforced
   in MountSevice)
 - Remove some stray un-needed import lines
 - Move android.os.IMountService / android.os.IMountServiceListener -> android.os.storage
 - Improve code comments

Updated:
  MountService: Add dup state check and move debugging behind a conditional
  UsbStorageActivity: Fix review comments + a TODO
  StorageNotification: Add @Override tags
  StorageManager: Don't use a static Listener list
  MountService: Reduce bloat and fix == where I meant .equals()
  PackageManagerTests: Update for new API

Signed-off-by: San Mehat <san@google.com>
2010-02-09 11:03:16 -08:00
Suchi Amalapurapu
7040ce7866 resolved conflicts for merge of 37a00a36 to master 2010-02-08 23:55:56 -08:00
Suchi Amalapurapu
08be55b8ea Add null checks when scanning a package.
Delete packages whose code and resource paths haven't been set
correctly.
2010-02-08 17:10:24 -08:00
Suchi Amalapurapu
b56ae20b22 Rename media resource broadcasts
Add checks for fwdlocked and updated system apps
add more tests
remove duplicate adds
2010-02-08 14:52:25 -08:00
Dianne Hackborn
b858dfda50 Implement system data migration support.
This adds three new features:

- <original-package android:name="com.foo" /> manifest tag.
  This allows an .apk to specify another package it originally came from,
  propagating all state and data from the old to new package.

- <adopt-permissions android:name="com.foo" /> manifest tag.
  In some more complicated cases, a new .apk may be a combination
  of multiple older .apks that each declared their own permissions.
  This allows you to propagate the permissions from these other
  .apks into the new one.

- A new system/etc/updatecmds directory.
  You can place files here which describe data files to move from
  one package to another.  (See below for details.)

Also in this change: we now clean up the data directories of
.apks that disappear from the system image, and some improvements
to logging and reporting error messages.

A typical file in the updatecmds directory looks like this:

-------
com.google.android.gsf:com.google.android.providers.talk
    databases/talk.db
com.google.android.gsf:com.google.android.googleapps
    databases/gls.db
-------

This says that for com.google.android.sfs, there are two packages to
move files from:

From com.google.android.providers.talk, the file databases/talk.db.
From com.google.android.googleapps, the file databases/gls.db

As part of moving the file, its owner will be changed from the old
package to whoever is the owner of the new package's data directory.

If those two files had existed, after booting you would now have the
files:

/data/data/com.google.android.gsf/databases/talk.db
/data/data/com.google.android.gsf/databases/gls.db

Note that all three of these facilities assume that the older .apk
is completely removed from the newer system.  The WILL NOT work
correctly if the older .apk still remains.
2010-02-03 15:42:02 -08:00
Suchi Amalapurapu
08675a3376 Apps on sdcard: Add new broadcasts
Add new broadcasts ACTION_MEDIA_RESOURCES_AVAILABLE and
ACTION_MEDIA_RESOURCES_UNAVAILABLE that get broadcast by
PackageManagerService when sdcard gets mounted/unmounted
by MountService so that packages on sdcard get recognized by
various system services as being installed/available or
removed/unavailable by the system.
The broadcasts are sent before the actual package cleanup which includes
mounting/unmounting the packages and we force a gc right after so
that any lingering file references to resources on sdcard get
released.
2010-02-02 18:33:29 -08:00
San Mehat
be16cb15b3 PackageManagerService: Refactor MountService calls (new api)
Signed-off-by: San Mehat <san@google.com>
2010-02-02 11:17:46 -08:00
Bjorn Bringert
5fd5bfe942 Fix StringIndexOutOfBoundsException in PackageManagerService
The method packageManagerService.getNextCodePath(String oldCodePath,
String prefix, String suffix) threw StringIndexOutOfBoundsException if
oldCodePath does not contain prefix, and prefix is longer than
oldCodePath, or if the preix and suffix overlap.

Fixes http://b/issue?id=2404232

Change-Id: Ib8abb16f8bfd08f607476d9289f46d170c43a076
2010-01-29 12:29:41 +00:00
Kenny Root
bdbc925a27 resolved conflicts for merge of b0903104 to master
Change-Id: Iff20980c44d42b41ae411c4201e0927cee19d415
2010-01-28 12:03:49 -08:00
Suchi Amalapurapu
c028be4f3b AppsOnSd feature - Add default container
Add new remote interface to do temporary copies. The new
remote stub handling is done on mHandler thread and doesn't need locking
for now.
Add new InstallArgs class and subclasses to isolate cases for installation.
Move resource deletion for failed installs/upgrades to later on in installation
cycle.
Fix code path for forward locked apps when using scanPackageLI

TODO's
Fix installation paths to completely use InstallArgs based design later on.
Get rid of using flags in various install/uninstall code paths.
Ideally InstallArgs should be created using these flags and used in the
rest of the code.
Function renames.
Revisit mount api's.
2010-01-27 10:26:43 -08:00
David 'Digit' Turner
1edab2b551 Make PackageManager unpack gdbserver binaries at installation time.
Native-debuggable packages contain a lib/<abi>/gdbserver executable.
This patch ensures that the package manager will copy it to the
proper location (/data/data/<appname>/lib) at installation time.

Note that such packages are marked with a new ApplicationInfo flag
named FLAG_NATIVE_DEBUGGABLE, to be used later by the Activity
Manager.
2010-01-25 11:27:08 -08:00
Dianne Hackborn
e6620b2d99 Fix issue #2391429: Crash during boot if fwd locked app is incompletely installed
We need to remove left-over .apk when cleaning up a partially installed app.

Change-Id: I94264549670a2ad01622f746c40c82c30dd3da8d
2010-01-22 14:46:21 -08:00
Suchi Amalapurapu
fd3530f905 Mount/Unmount secure containers
Persist flags in PackageSetting. Flags are relevant to ApplicationInfo.FLAG_SYSTEM, Application.FLAG_ON_SDCARD, ApplicationInfo.FLAG_FORWARD_LOCK.
New pm command to simulate mount/unmount in Pm. This will be removed
when MountService/vold event generation gets fixed.
Calls from MountService into PackageManager when media gets mounted/unmounted.
Scan the packages and grant permissions when the sdcard gets mounted.
This api might change again.
2010-01-19 14:04:54 -08:00
Oscar Montemayor
462f037828 Apps on SD card.
Added support for retrieving and generating keys as Hex Strings.
Using keys to mount encrypted FS.
2010-01-15 16:34:11 -08:00
Oscar Montemayor
d02546b415 Apps on SD card.
Added support for retrieving and generating keys as Hex Strings.
Using keys to mount encrypted FS.
2010-01-15 15:08:06 -08:00
Andrew Stadler
48c0273eb9 Fix to set package path properly after 'adb sync'
This is a followup to daec1722fae57a042c176664ec1e89c95095e926
2010-01-15 00:03:41 -08:00
Suchi Amalapurapu
daec1722fa Avoid renaming apk paths when scanning directories on reboot 2010-01-14 21:48:37 -08:00
Suchi Amalapurapu
110fea7ebd Fix runtime restart when replacing packages 2010-01-14 17:50:23 -08:00
Suchi Amalapurapu
af8e9f4805 app install on sdcard. provide skeleton implementation
to install an app on sdcard, just resources.
Add new install path for /asec in installd.
ignore . when checking for apk path since the sdcard packages id'ed
by package name.
Add new -s option to adb shell pm
Refactor fwd locked from scanMode to ApplicationInfo.
Add new flag for sd install
Add new parse flags for fwd locking and installing on sdcard
New mock api's in PackageManagerService to invoke MountService api's. These
will be refactored again and so have been wrapped internally.
Some error codes in PackageManager
Changes in PackageManagerService to use mPath and mScanPath during installation
and switch to using PackageParser.Package.applicationInfo attributes for
source and public resource directories.
Some known issues that will be addressed later
 using system_uid for now. needs some tinkering with uid and packagesetting creation to use the actual app uid
 error handling from vold not very robust. ignoring lot of things for now
 sending a delayed destroy to delete packages. will revisit later
 revisit temp file creation later. just copy for now
2010-01-14 14:02:39 -08:00
Tom Taylor
f0108cda21 resolved conflicts for merge of ad2fa35d to master
Change-Id: Ia4362cd48ac0689b91003943a4cd9660da72ff90
2009-12-22 10:11:55 -08:00
Tom Taylor
d4a4729c0c Update imports to android-common
Several files were moved to android-common. Update all the references
to import those files from the new location.
2009-12-21 13:59:18 -08:00
Doug Zongker
18803d37e2 resolved conflicts for merge of 5a2fdbba to master 2009-12-07 14:12:02 -08:00
Doug Zongker
ab5c49c7e7 move event log tags used by system server into this package
We can now locate event log tag definitions in individual packages
(and java constants for the tag numbers get auto-generated), so move
all the tags used by the system server into the package.
2009-12-04 10:31:43 -08:00
Dianne Hackborn
8a1b6decfb am e2585127: am 9ed7dc10: am 5886050f: Merge change I0d8f7593 into eclair
Merge commit 'e2585127974ce972a013407e2af95d8776a99a8e'

* commit 'e2585127974ce972a013407e2af95d8776a99a8e':
  Fix issue #2296457: PackageManager.addPackageToPreferred needs to a no-op
2009-12-02 20:24:44 -08:00
Dianne Hackborn
a7ca0e5e32 Fix issue #2296457: PackageManager.addPackageToPreferred needs to a no-op
Change-Id: I0d8f75938226e1bb49cf7b1154445631b0bb0bc9
2009-12-01 14:31:55 -08:00
Oscar Montemayor
a8529f6867 Encrypted File Systems Project. Installer modifications.
Started to modify isntaller for data redirection to a secure location.
2009-11-24 11:44:19 -08:00
David 'Digit' Turner
feba743b47 PackageManager: Support secondary ABI for native code at installation time.
The goal of this change is to allow the Package Manager to look for native
shared libraries corresponding to the CPU ABI reported by ro.product.cpu.abi2
if none was found for the CPU ABI given by ro.product.cpu.abi

This is used to support both ARMv5 and ARMv7 native code on modern ARMv7-based
devices. Typically, such a device would report a primary ABI of 'armeabi-v7a'
and a secondary one of 'armeabi', to indicate that it can run the binaries
generated for both.
2009-11-12 15:55:17 -08:00
Dianne Hackborn
86a72dacbe Fix issue #2256270: Package manager sends bad broadcasts when components change
Also reworks this intent protocol a little bit to be much more efficient, only
requiring one broadcast per package.

Change-Id: I580de4843ebd3c7f2e6df7295a2f80d2937cef7c
2009-11-11 20:13:53 -08:00
Suchi Amalapurapu
d83006cbe8 When upgrading packages with shared user ids make sure we are eliminating
the package about to be deleted or upgraded when updating permissions associated
with the shared user. Include a simple null check when retrieving the permission.

Fix PackageParser to avoid ArrayIndexOutOfBounds exceptions in several places
2009-10-29 00:46:55 -07:00
Suchi Amalapurapu
14e833faa0 If we fail to persist the current settings and fall back to the back settings file
when reading settings in PackageManager, we might rename the corrupted settings to
backup(in case of power failure between the earlier write failure and file deletion)
and end up loosing both files.
So just clear up the corrupted current settings file if we have backup.
The backup wouldn't exist if everything went well with persisting the earlier settings.

We do this in both read and write just in case.
2009-10-20 13:26:37 -07:00
Suchi Amalapurapu
b897cff1ef do not merge
Return valid package info for packages that have been uninstalled with
an option to retain data and resources using the flag GET_UNINSTALLED_PACKAGES
These packages do not have a package setting. just check the flag and return
the required info from PackageParser.generatePackageInfo
2009-10-15 20:20:00 -07:00
Suchi Amalapurapu
8d5ae98549 Make sdk version and code names static finals in PackageParser.
Remove api to set these values.
    Remove an unused method in AppSecurityPermissions
2009-10-06 10:29:06 -07:00
Suchi Amalapurapu
8550f25523 Check if rename of backed up file fails before persisting new changes.
If not these system services will end up with inconsistent settings files
when the device runs out of storage.
Delete mangled settings file in PackageManager if the current write fails
so that we don't end up overwriting the backed up version with the
mangled version
Include null check when retrieving fwd locked resource for an existing package
2009-09-30 15:36:29 -07:00
Dianne Hackborn
a33e3f7925 Fix issue #2154794: Force close when start facebook application.
I think when we were scanning the updated app in the system image,
from an older version on the data partition, we were not setting
the existing package to have the system flag, so not auto-granting
any new permissions.

This also includes some other cleanup in the package manager to
remove old files in various places, and tighten up logging.

Also similar logging cleanup elsewhere.

Change-Id: I6d113c7cf7e736ab9be512d6d7c94c806a24199a
2009-09-30 15:09:33 -07:00
Dianne Hackborn
039c68e756 The touch screen is probably a feature.
Also extend the feature APIs a bit.

Change-Id: I99e932d7f4e61edb0e20f75c55e9831e4b59a14d
2009-09-26 16:39:23 -07:00
Suchi Amalapurapu
3d7e855df3 Check if rename of current settings file was successful before persisting
new changes to settings.
2009-09-17 16:30:14 -07:00
Suchi Amalapurapu
ee5ece4a4d Remove deadlock in PackageManager when installing or upgrading packages.
PM first creates a temporary file from the input package uri before installing it.
if the package uri points to a content uri, the content provider  has to be retrieved via the ActivityManager
which could cause deadlocks with the package manager locks being held.
Clean up by always copying or creating temporary files before acquiring these locks.
Fix issue when restoring a failed upgrade for third party apps.
2009-09-15 16:42:20 -07:00
Mike Lockwood
d42685d5de Add support for running apps with uid/gid AID_LOG by specifying android.uid.log in the manifest
This is needed to allow the BugReportService to start the dumpstate service.

Change-Id: I12cab23767c919592da102c654b6b80416717661
Signed-off-by: Mike Lockwood <lockwood@android.com>
2009-09-03 13:47:54 -04:00
Suchi Amalapurapu
0214e9475f For intent ACTION_PACKAGE_CHANGED, there could be a lot of broadcasts related to enabling/disabling
components by apps which could result in thrashing on the PackageManager. For apps that
    do not want to be restarted when such a broadcast is sent, we can just aggregate these broadcasts and
    handle them at one go.
    Changes include:
    New structure to hold pending broadcasts by class name. If a component is enabled or disabled frequently
    aggregate component enabled/disabled settings in this structure in a 10 second window and then
    send out the accumulated list of broadcasts to the ActivityManager.
    A new Handler implementation handles this message
    Add new attribute name EXTRA_CHANGED_COMPONENT_NAME in broadcast intent Intent.ACTION_PACKAGE_CHANGED for
    additional information for apps like Launcher.
    Rename a couple of parameters, the names were too jarring.
2009-09-02 12:32:32 -07:00
Dianne Hackborn
49237345d8 Add platform infrastructure for features.
This introduces a new mechanism to define features associated with
a platform, query the current device for the available features,
and enforce that apps requiring features that aren't available can't
be installed.

Also now allows uses-library to specify that a library is optional,
so the lack of such a library will not prevent the app from being
installed (but if it does exist it will be correctly linked into
the app).

Change-Id: I5b369b46cfa0b3d37c9e08fd14ef1098a978e67b
2009-08-27 21:51:00 -07:00
Jeff Hamilton
5bfc64f8f6 Include the list of registered providers the package manager dumpsys output. 2009-08-18 14:04:52 -05:00
Dianne Hackborn
766cbfe44b Add new API to compare certs of two UIDs. 2009-08-12 21:40:05 -07:00
Android (Google) Code Review
b13f32c0a0 am 8b2cdcd1: Merge change 20037 into donut
Merge commit '8b2cdcd184acfebfb245b15a71f5f1c32e53b050'

* commit '8b2cdcd184acfebfb245b15a71f5f1c32e53b050':
  fix issue with gids not being added for packages with shared user id
2009-08-05 15:45:34 -07:00
Suchi Amalapurapu
2ed287b6ba fix issue with gids not being added for packages with shared user id
Squashed commit of the following:

commit 2bc4c29dab22d8a541dfca0a20320b307ba64cfb
Author: Suchi Amalapurapu <asuchitra@google.com>
Date:   Tue Aug 4 16:24:55 2009 -0700

    fix issue with gids not being added for packages with shared user id
2009-08-05 14:59:07 -07:00