)]}'
{
  "log": [
    {
      "commit": "bb8451521196ce493e8827fd50ab84f3c776931d",
      "tree": "d1c0045dd4f18322a6758f037289b4319bdf650a",
      "parents": [
        "1d893785bdd8af210eab861653e3e7664c728897",
        "ac3151063e47ab693242d8d0eae021601a7d6529"
      ],
      "author": {
        "name": "Hui Shu",
        "email": "hush@google.com",
        "time": "Mon Jan 05 22:07:14 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jan 05 22:07:16 2015 +0000"
      },
      "message": "Merge \"pm path needs to return 0 when it succeeds.\" into lmp-mr1-dev"
    },
    {
      "commit": "18b892c723e812a7e111f102d2b0c0782b116bb6",
      "tree": "ab7f42c778169da272b503d308c2cc712effef2b",
      "parents": [
        "1f28a6a571a9b4ff78d85e2b62a30d77ce986d7b"
      ],
      "author": {
        "name": "Guang Zhu",
        "email": "guangzhu@google.com",
        "time": "Thu Dec 11 15:12:30 2014 -0800"
      },
      "committer": {
        "name": "Guang Zhu",
        "email": "guangzhu@google.com",
        "time": "Fri Dec 12 17:31:38 2014 -0800"
      },
      "message": "shell based UI Automator source move\n\nframeworks/testing/uiautomator -\u003e frameworks/base/cmds/uiautomator\n  (samples, utils sub folders exlcuded)\nframeworks/testing/uiautomator/utils -\u003e frameworks/base/tests/utils\n\nno source files changed, only one line makefile update (for\nUI Automator API check)\n\nBug: 18708851\nChange-Id: I396bd386d3d55a52df18af183685daf80caa9f73\n"
    },
    {
      "commit": "ac3151063e47ab693242d8d0eae021601a7d6529",
      "tree": "8bf079a88291472883a42d602d4c09779a75ecaf",
      "parents": [
        "da39290460b30e5080769f039d6dff352b3c7808"
      ],
      "author": {
        "name": "Hui Shu",
        "email": "hush@google.com",
        "time": "Fri Dec 12 14:04:36 2014 -0800"
      },
      "committer": {
        "name": "Hui Shu",
        "email": "hush@google.com",
        "time": "Fri Dec 12 14:06:01 2014 -0800"
      },
      "message": "pm path needs to return 0 when it succeeds.\n\nBUG: 18721587\nChange-Id: I2136d1933e62a20645517d17c1365d214509de16\n"
    },
    {
      "commit": "cc0c8f23f314516426ce72a5df211f3052539560",
      "tree": "050ce2a8d43f2e341587ebf0837dae1ed0ba2f63",
      "parents": [
        "eb4de87683a0d1959d64af08f3685e1b3701a314"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Oct 20 14:14:39 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Dec 10 10:27:50 2014 -0800"
      },
      "message": "Switch to libsigchain.a\n\n Use LOCAL_WHOLE_STATIC_LIBRARIES to instruct static linker\n to export symbols from the static library.\n\n(cherry picked from commit 5ba317cee071b718a163ab9acf2b6b4f6a337b39)\n\nBug: 18701723\nChange-Id: Id9b567a1529574eab2225777f1f2a5ea10e540ad\n"
    },
    {
      "commit": "7b7c58b3842d47c4c8df4876e2e2248c58477d97",
      "tree": "d925059e01f7d7a7f0c3c85fa05a9e3fee33e7a1",
      "parents": [
        "76de89820c51c4bc288b440a82374b9d6c806244"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Dec 02 18:32:20 2014 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Dec 03 10:01:14 2014 -0800"
      },
      "message": "Work on issue #18572506: AppOps in-memory state is invalid after...\n\n...uninstalling updates to a system app\n\nThings seem to be working fine, however we were not as aggressive at\nwriting out the current state in this case as we probably should be.\n\nAlso introduce more features to the appops command, which are useful\nfor testing this.\n\nChange-Id: I177a9cc0e16e98b76fee0d052d742e06842bb3f9\n"
    },
    {
      "commit": "dbea3cd118fe4eeb9b43ea50727987fa790a2edd",
      "tree": "48c62fd389ed91bbcfdfc844f0e4316b6ac8e0af",
      "parents": [
        "962bd4a69175077a95bc04bcdcc80ee6cb1034f8"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Nov 24 14:45:40 2014 -0800"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Nov 24 14:51:34 2014 -0800"
      },
      "message": "Better am error when SELinux blocking access.\n\nBug: 18479882\nChange-Id: I0732e54838c4e04d9d727e7c5fd9d7e7bacbaa1f\n"
    },
    {
      "commit": "604aec9574212aabb3391585799a72e6820466cd",
      "tree": "1b0e7e32517c254e3a63edf972277ac8f058b5d3",
      "parents": [
        "962b06f9a02f08392b6f87225a314ebf39dd7a07",
        "e9119876a21575ee7a7d058da85d04c4c4b8a971"
      ],
      "author": {
        "name": "Zoltan Szatmary-Ban",
        "email": "szatmz@google.com",
        "time": "Mon Nov 24 12:08:17 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Nov 24 12:08:20 2014 +0000"
      },
      "message": "Merge \"Add new subcommand \u0027set-active-admin\u0027 to the dpm command.\" into lmp-mr1-dev"
    },
    {
      "commit": "24b1c23c62b3d8ca1d762a76b2f1ef6360fc683e",
      "tree": "7ff5b24df000003126c17c504313507f4693107a",
      "parents": [
        "a6d2789c954698f6dca5479b305689d22fc05d80"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Nov 20 17:17:39 2014 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Nov 20 17:17:39 2014 -0800"
      },
      "message": "Fix issue #15828903: Intent.parseUri allows call to FLAG_GRANT_*_URI_PERMISSION\n\nYou now need to set a flag if you want this unsafe behavior.\n\nChange-Id: I185e9a04e005e42a887c3d58a2818616790b060a\n"
    },
    {
      "commit": "ff17024e583b170312d82089fd358d278ce16c9a",
      "tree": "8c88e1081fe932f64fbae35b87fad3bb6f4ddd93",
      "parents": [
        "9522055f1d10b30158b772885bf4befe06fb2a08"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Nov 19 10:59:01 2014 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Nov 19 14:29:10 2014 -0800"
      },
      "message": "Fix issue with call backs from media process.\n\nAll but a few lines of this is for issue #16013164, which allowed\napps to do some operations as the media uid by having it call\nback to them to open a file.  The problem here is with the tempory\nidentity stuff in the activity manager, allowing us to make the open\ncall as the original caller...  ideally we should figure out a way\nto just get rid of all of that, but the solution here is actually\neasier (even though it doesn\u0027t look it) -- we now hand a token over\nto the openFile() call that it can use when doing permission checks\nto say \"yes I would like the check to be against whoever is responsible\nfor the open\".  This allows us to do the uid remapping for only this\none specific set of permission checks, and nothing else.\n\nAlso fix issue #17487348: Isolated services can access system services\nthey shouldn\u0027t be able to.  Don\u0027t send any system service IBinder objects\ndown for the first initialization of an isolated process.\n\nChange-Id: I3c70e16e0899d7eef0bae458e83958b41ed2b75e\n"
    },
    {
      "commit": "e9119876a21575ee7a7d058da85d04c4c4b8a971",
      "tree": "6e2feda16426b48d9c9dd3c2d3512a7e5ed2330c",
      "parents": [
        "b30d902ed404e5646bced27bdd2ca4006af802bf"
      ],
      "author": {
        "name": "Zoltan Szatmary-Ban",
        "email": "szatmz@google.com",
        "time": "Tue Oct 28 12:28:57 2014 +0000"
      },
      "committer": {
        "name": "Zoltan Szatmary-Ban",
        "email": "szatmz@google.com",
        "time": "Wed Nov 19 13:47:11 2014 +0000"
      },
      "message": "Add new subcommand \u0027set-active-admin\u0027 to the dpm command.\n\nBug: 18002490\nChange-Id: I91746032df08ef0fdef05711114691da18796a0a\n"
    },
    {
      "commit": "fbec21ff43c8a35e95fca9ce40351350608974e9",
      "tree": "24d58d1fa567fb10682da017b5acdb3693a3e81b",
      "parents": [
        "2f8d4ea2064940b373c96b47d6fcdefad3732ee8"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Nov 13 16:36:33 2014 -0800"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Nov 13 16:39:56 2014 -0800"
      },
      "message": "Teach bmgr that \"android\" is a valid package name\n\nBug 18379037\n\nChange-Id: I4d6da2893f83e672920bbda9447aa4cbd1ecec7b\n"
    },
    {
      "commit": "85d558cd486d195aabfc4b43cff8f338126f60a5",
      "tree": "0a228ca6ffb9079635434a740abeeece370f055d",
      "parents": [
        "993e3d2d40cbd95d78cd3d2a76c77af2f4ab0e88"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Nov 04 10:31:54 2014 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Nov 11 00:42:18 2014 +0000"
      },
      "message": "Add Activity API to get referrer information.\n\nThis expands the use of EXTRA_REFERRER to be relevant anywhere,\nallowing apps to supply referrer information if they want.  However,\nif they don\u0027t explicitly supply it, then the platform now keeps\ntrack of package names that go with Intents when delivering them\nto apps, which it can be returned as the default value.\n\nThe new method Activity.getReferrer() is used to retrieve this\nreferrer information.  It knows about EXTRA_REFERRER, it can return\nthe default package name tracked internally, and it also can return\na new EXTRA_REFERRER_NAME if that exists.  The latter is needed\nbecause we can\u0027t use EXTRA_REFERRER in some cases since it is a Uri,\nand things like #Intent; URI extras can only generate primitive type\nextras.  We really need to support this syntax for referrers, so we\nneed to have this additional extra field as an option.\n\nWhen a referrer is to a native app, we are adopting the android-app\nscheme.  Since we are doing this, Intent\u0027s URI creation and parsing\nnow supports this scheme, and we improve its syntax to be able to build\nintents with custom actions and stuff, instead of being all hung up\non custom schemes.\n\nWhile doing this, fixed a problem when parsing both intent: and new\nandroid-app: schemes with a selector portion, where we were not\nrespecting any scheme that was specified.\n\nChange-Id: I06e55221e21a8156c1d6ac755a254fea386917a2\n"
    },
    {
      "commit": "70bbbd32beefbb8e5c2e2dfa7a417274f80e2da2",
      "tree": "400a416fcae631ed14d1e6343fbaaf1748be436a",
      "parents": [
        "9af44ddf0367c542d6c1db6060456bd72f3c83ca",
        "795893eb6ff0c02c30a5765e06807ce1ee43978f"
      ],
      "author": {
        "name": "Daniel Sandler",
        "email": "dsandler@android.com",
        "time": "Wed Nov 05 18:53:42 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Nov 05 18:53:44 2014 +0000"
      },
      "message": "Merge \"More flexible intent extra parsing.\" into lmp-mr1-dev"
    },
    {
      "commit": "7c006199e53a3cb082b9041793aa8364eb86a217",
      "tree": "2806db15e1ae94427ed0508c1c898b9fe632255d",
      "parents": [
        "b9144cea5184c90534db75b47e3818a688e64d5b"
      ],
      "author": {
        "name": "Evan Charlton",
        "email": "evanc@google.com",
        "time": "Wed Oct 22 08:39:46 2014 -0700"
      },
      "committer": {
        "name": "Evan Charlton",
        "email": "evanc@google.com",
        "time": "Fri Oct 31 12:45:25 2014 -0700"
      },
      "message": "Have Pm return the correct code\n\nIf the command fails, have Pm return a nonzero exit code.\n\nBug: 18085950\nChange-Id: I3de1b8f69aa8f44b2e2109864c1aa093e3b82141\n"
    },
    {
      "commit": "795893eb6ff0c02c30a5765e06807ce1ee43978f",
      "tree": "40742a3bb20209ab5cf499ec3c41a1b729af8a53",
      "parents": [
        "685720309a582acc513454d674f82368479c5297"
      ],
      "author": {
        "name": "Daniel Sandler",
        "email": "dsandler@android.com",
        "time": "Wed Oct 29 00:01:25 2014 -0400"
      },
      "committer": {
        "name": "Daniel Sandler",
        "email": "dsandler@android.com",
        "time": "Wed Oct 29 00:05:56 2014 -0400"
      },
      "message": "More flexible intent extra parsing.\n\nSpecifically, --ei (int extras) and --eia (int[] extras) now\nuse Integer.decode(), which means they accept negative\nintegers, base-16 integers formatted as #NNN and 0xNNN, and\nbase-8 integers formatted as 0NNN.\n\nAdditionally, --ez (boolean extras) can now be specified as\n\"true\", \"false\", \"t\", \"f\", or an integer (any nonzero\ntreated as true). The previous behavior, based on\nBoolean.valueOf(), would silently assign false if you\nmanaged to get the spelling of \"true\" wrong.\n\nChange-Id: I058254e907308006d403b5b7866c86bcaa03d8d3\n"
    },
    {
      "commit": "07268ce3d9de8f8d307e4522c9ac685974031782",
      "tree": "261e9c2ecfaffc30130e1e83d1ced71372437e4b",
      "parents": [
        "c218d8f19881deed098875e2caf41b7ca9e42133"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Oct 07 13:34:42 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Oct 16 11:43:49 2014 -0700"
      },
      "message": "Link sigchain to main executable\n\n Also export necessary symbols to preempt calls from\n libart.so\n\nBug: 15345057\nBug: 15426766\n\n(cherry picked from commit 96e0cfa721925550b1cc39cdfd6084a878e6ffe2)\n\nChange-Id: I0930d96edde7dc0636e8d50d7c778f099237f748\n"
    },
    {
      "commit": "ab4a81b3c625e33d04ae8070fcce6b6baee6522c",
      "tree": "0318213138edcfa4e65cd4e2c640f1a96bdeeb45",
      "parents": [
        "f9df9dd845ba1d1b14b450bd9df654243921381f"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Oct 09 17:59:38 2014 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Oct 09 18:21:59 2014 -0700"
      },
      "message": "Improve some docs, fix some debugging.\n\n- Add docs to Binder, Messenger, ResultReceier to explain their\n  relation (or lack there-of) to process lifecycle.\n- Clarify some aspects of process lifecycle for services.\n- Fix help text of am command.\n- Fix per-package dumping of battery stats to not include history.\n- Fix per-package dumping of proc stats to only include aggregated\n  and current stats and fix some formatting.\n- Fix per-process dumping of meminfo to have an option to interpret\n  the input as a package, so including all processes that are\n  running code of that package.\n- Fix top-level per-package debug output to correctly include all\n  of these improvements and give them a little more time (10s) to\n  complete for timing out.\n\nChange-Id: I2a04c0f862bd47b08329443d722345a13ad9b6e2\n"
    },
    {
      "commit": "28138587ef4ec3da71c5275ac60ffae03ca69fce",
      "tree": "9415c44728f407aaf58bbb74c43e2883acabad1c",
      "parents": [
        "41bb3455e44dc8fde4569bbfd56fa20c6da8a27d"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@google.com",
        "time": "Tue Oct 07 14:47:26 2014 -0700"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@google.com",
        "time": "Tue Oct 07 14:47:26 2014 -0700"
      },
      "message": "bootanimation: Tweak parameters for pcm_open for playing boot sounds.\n\nSet start_threshold and avail_min to 1/4th period size and stop_threshold to INT_MAX\n\nChange-Id: I0a3aac18533709daa86a024cdd6a32086410723a\n"
    },
    {
      "commit": "ebf9a0d8a888042c16ec0cb6dd8419f18038663f",
      "tree": "e364c8e39ff0795a22da5a5d1e32472bc22dcebb",
      "parents": [
        "76716c5a180aa471c6973ca7aa03c7f2da677823"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@google.com",
        "time": "Thu Oct 02 16:08:47 2014 -0700"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@google.com",
        "time": "Fri Oct 03 15:38:15 2014 -0700"
      },
      "message": "Add support for playing audio during bootanimation\n\nThe bootanimation daemon will play 16 bit WAV files contained in bootanimation.zip\nFor this to work, the bootanimation.zip must contain an audio_conf.txt file,\nwhich contains parameters to be used for the tinyalsa pcm_open call\nas well as mixer parameters to set before attempting to play the sound.\n\nIf the bootanimation finds an audio_conf.txt file, then it will look for a file named\n\"audio.wav\" in each of the part subdirectories. If audio.wav is found, it will play that\nWAV file starting at the beginning of that part.\n\nThe code for this is based on the tinyplay utility in tinyalsa.\n\nThe audio_conf.txt and must begin with the following header:\n\ncard\u003d\u003cALSA card number\u003e\ndevice\u003d\u003cALSA device number\u003e\nperiod_size\u003d\u003cperiod size\u003e\nperiod_count\u003d\u003cperiod count\u003e\n\nThis header is followed by zero or more mixer settings, each with the format:\nmixer \"\u003cname\u003e\" \u003d \u003cvalue list\u003e\nSince mixer names can contain spaces, the name must be enclosed in double quotes.\nThe values in the value list can be integers, booleans (represented by 0 or 1)\nor strings for enum values.\n\nFinally I should mention that this change is not the right approach.\nInstead of going straight to ALSA we should be using the mediaserver instead.\nBut mediaserver isn\u0027t ready in time due to interactions with the system server, and there\nisn\u0027t time to fix this for the current release. We need to fix that for the next one.\n\nBug: 17674304\n\nChange-Id: Ic391ade61c941d0a24f4d64fe005ac9375a23fa9\n"
    },
    {
      "commit": "979e40e9ba02b74226d9833b2f8156aa89a39053",
      "tree": "7d525caa993ae0d4b61bf27acdd2f70d384ff72c",
      "parents": [
        "311fc0b399f01a79169ae69aea05556043a7d7df"
      ],
      "author": {
        "name": "Alexandra Gherghina",
        "email": "alexgherghina@google.com",
        "time": "Thu Sep 25 18:23:13 2014 +0100"
      },
      "committer": {
        "name": "Alexandra Gherghina",
        "email": "alexgherghina@google.com",
        "time": "Mon Sep 29 12:35:03 2014 +0000"
      },
      "message": "Adds the ability to start a user in background\n\nBug: 15900074\nChange-Id: I03b278f8e7a4618ea56a5f1935cfba34beb45981\n"
    },
    {
      "commit": "083b84cf8880bb7f0d2c2dc1b45c7d610656dbd1",
      "tree": "2c83dce383d221eeb4bba0069b2d047424c7a350",
      "parents": [
        "471157821f7b0933c55081ef4625c78f8e798de7"
      ],
      "author": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Mon Sep 22 10:51:09 2014 -0700"
      },
      "committer": {
        "name": "Vineeta Srivastava",
        "email": "vsrivastava@google.com",
        "time": "Thu Sep 25 23:37:12 2014 +0000"
      },
      "message": "bootanimation: allow animation to specify background color\n\nSome OEMs want to have a bootanimation (or parts of it) displayed on a\ncolor other than black. They currently just use full-screen frames for\nthat, which wastes lots of memory and bandwidth. This change allows\neach part of the animation to specify a background color that will be\napplied outside of the frame images; if unspecified the background\nwill be black as it is now.\n\nBug: 16635599\nChange-Id: Ibf008fc75c5aad891c86ba9e4ec0879b7a61b8bd\n"
    },
    {
      "commit": "03fce072cac092923e10a6b5f09fcde333375f9e",
      "tree": "128bdd32a0001add7f2804af68231fedcae4dc3e",
      "parents": [
        "23b113592a5f461ec66026cbf8bce253cb8d3a46"
      ],
      "author": {
        "name": "RoboErik",
        "email": "epastern@google.com",
        "time": "Wed Sep 24 09:46:57 2014 -0700"
      },
      "committer": {
        "name": "RoboErik",
        "email": "epastern@google.com",
        "time": "Wed Sep 24 14:35:32 2014 -0700"
      },
      "message": "Allow null queues to be set in MediaSession\n\nAlso add some test code for it to OneMedia.\n\nbug:17593962\nChange-Id: I074e2bb0329d9a97f623e4309bb7dada157b8324\n"
    },
    {
      "commit": "c5bf65aa96bf8b919db9f65dc7419e17c6232e94",
      "tree": "465020b1209a11d4e5fad163a22d9a422a965356",
      "parents": [
        "bd8dfd52e26b2807625168fea811a77fa1827e3e",
        "c48bca50fa64765d3019b0bf82511e030cabcc7a"
      ],
      "author": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Thu Sep 18 18:15:47 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 18 18:15:49 2014 +0000"
      },
      "message": "Merge \"Make dpm command output more test friendly\" into lmp-dev"
    },
    {
      "commit": "c48bca50fa64765d3019b0bf82511e030cabcc7a",
      "tree": "68dd43bbf101e6beb9d743088ebaca45eebdb41b",
      "parents": [
        "41de9bb6fda113f7cfb8b7b8d64d07d3809f8f20"
      ],
      "author": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Thu Sep 18 18:32:45 2014 +0100"
      },
      "committer": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Thu Sep 18 18:32:45 2014 +0100"
      },
      "message": "Make dpm command output more test friendly\n\nAdded \u0027Success\u0027 at the beginning of the command output every time\nit didn\u0027t fail, so that we can easily check the output in tests.\nThe command is brand new, only used by us on CTS tests, so this\nshouldn\u0027t break anybody.\n\nBug: 17312478\nChange-Id: Ie67bf5b2f44e658e7009e5bd87f8cb81be515584\n"
    },
    {
      "commit": "88924b62fc63ecaf6410f1a1d76e9c54cab0ebef",
      "tree": "2bc38690c8dc11c7ac19ad3240f2fb54ec0ea6ba",
      "parents": [
        "0d2d9637ed4f46062d508cfa7da0e9776fc444f8",
        "6cfbb718905210d146fbe8fb18c8e124f24845ec"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Sep 17 23:07:16 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 17 23:07:17 2014 +0000"
      },
      "message": "Merge \"Fix issue #17536024: The am start\u0027s wait option doesn\u0027t...\" into lmp-dev"
    },
    {
      "commit": "6cfbb718905210d146fbe8fb18c8e124f24845ec",
      "tree": "4d7d4045ad5db8a4501fd2a480d63d55e4778d65",
      "parents": [
        "6b5db58f10365b28fe956caabbf1e2948458781b"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Sep 17 12:47:35 2014 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Sep 17 12:47:35 2014 -0700"
      },
      "message": "Fix issue #17536024: The am start\u0027s wait option doesn\u0027t...\n\n...give time in some cases\n\nThis switch to multiple stacks broke the check to determine if it\nshould actually wait for a new activity to be shown.  The new check\nnow also requires that the top activity be resumed, which means\nwe may get some false positives where we decide to wait and shouldn\u0027t,\nbut that is better than consistently not deciding to wait in some\ncases when we should.  (And we will always finish waiting then next\ntime something becomes visible).\n\nAlso add another time, which is how long it took from the startActivity\ncall to return with the result.  And fix when we decide to report that\nwe are done so that, in the case where we are bringing an existing\nactivity to the foreground, we don\u0027t wait until its animation is complete.\n\nChange-Id: Id38ca0070f04e7bf8c73e131fb055808553a0e2f\n"
    },
    {
      "commit": "41de9bb6fda113f7cfb8b7b8d64d07d3809f8f20",
      "tree": "5076956deff1cfc717e3d205c71f3b93f90a7a02",
      "parents": [
        "41f766394d07d09113d2e64a6917d069d41026c6"
      ],
      "author": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Mon Sep 15 19:05:48 2014 +0100"
      },
      "committer": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Tue Sep 16 10:24:58 2014 +0100"
      },
      "message": "Add \u0027adb dpm\u0027 subcommand to set profile owner\n\nRequired for GTS tests. Needed to relax the restriction that\nonly root user can run \u0027pm create-user\u0027 as GTS tests can\u0027t\nget root permissions.\n\nBug: 17312478\nChange-Id: I1841286ddf51756c73018c087a5f29afeb5b9f15\n"
    },
    {
      "commit": "8246e815acf316ad7ab7f76bfd1f1d279c3c37be",
      "tree": "fc7f7abbdd9eba991877ea05dbd93e1c70000083",
      "parents": [
        "6b19a00d705429269b197f53fd0fa87e29ba823c",
        "5ab6e0bac2de1688f2f4bb0de2c9964a9b15a4e6"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 15 22:55:52 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Sep 15 22:55:53 2014 +0000"
      },
      "message": "Merge \"Whoops, wait around for pm result.\" into lmp-dev"
    },
    {
      "commit": "5ab6e0bac2de1688f2f4bb0de2c9964a9b15a4e6",
      "tree": "15a737bd1087c0d69f53cf1927c45557916a0bd5",
      "parents": [
        "de74231f245c90e5861ec84a9880b5b4ec247480"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 15 14:50:41 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 15 14:50:41 2014 -0700"
      },
      "message": "Whoops, wait around for pm result.\n\npoll() returns immediately; we want to take() to wait for the result\nto actually arrive.\n\nBug: 17510699\nChange-Id: I87669e79e9941480fed33e4cc8a38de793d59e90\n"
    },
    {
      "commit": "9c17388cff98fba9679ce6457ac5003a660c6013",
      "tree": "4908c6381906e7298eb2a6297e7a2ba09b8570ef",
      "parents": [
        "81e0c8491f22c64300182c652ac2add96888dd2e"
      ],
      "author": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Fri Sep 12 15:48:55 2014 +0100"
      },
      "committer": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Mon Sep 15 11:42:34 2014 +0100"
      },
      "message": "Set device admin on dpm set-device-owner command\n\nBug: 17312478\nChange-Id: I4ef730a97d603352eda77f04a2b00fa97c2be662\n"
    },
    {
      "commit": "71ac935526d29097891664af40c54c96d6de02e6",
      "tree": "6218b042374d49b423b46633845f51e6888600a9",
      "parents": [
        "a409cdba60a3237f6822acfa570e0f66bb67eb34",
        "e980804df16c968c14a56b8853886bf5f049f46e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Sep 12 18:16:51 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 12 18:16:52 2014 +0000"
      },
      "message": "Merge \"Bring install and install-multiple into parity.\" into lmp-dev"
    },
    {
      "commit": "d09fbafa9242e67450c2f85807a159152d4761c8",
      "tree": "7d22060f5861a49fb5e5f60835920b59e50446cd",
      "parents": [
        "11f72c0d975cc9f3b9b800639c38c15e89e9be66",
        "b5ef162129ced7e9636052af6b7f08d677a01f13"
      ],
      "author": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Fri Sep 12 10:35:42 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 12 10:35:44 2014 +0000"
      },
      "message": "Merge \"Add new adb dpm (\u003d DevicePolicyManager) command\" into lmp-dev"
    },
    {
      "commit": "b5ef162129ced7e9636052af6b7f08d677a01f13",
      "tree": "f099a30cd7116e41a64ef8b94827813bb94a2b9a",
      "parents": [
        "c96e3927657558f0d01626c252cf480624749120"
      ],
      "author": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Mon Sep 08 17:49:01 2014 +0100"
      },
      "committer": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Fri Sep 12 11:33:59 2014 +0100"
      },
      "message": "Add new adb dpm (\u003d DevicePolicyManager) command\n\nAdds new adb command to execute DevicePolicyManager tasks. First subcommand\nallows us to set a device owner on a provisioned device (provided no accounts\nare associated with the device). This is required as GTS tests run on provisioned\ndevices. We plan to add more subcomands required for new GTS tests, such as the\nability to create a managed profile.\n\nBug: 17312478, 17316711\nChange-Id: I2613178ea82a6c6268e7f8012e74c4a852fea0d4\n"
    },
    {
      "commit": "e980804df16c968c14a56b8853886bf5f049f46e",
      "tree": "7b86eadba1751dd5d3c23f33770f9acdfc8ca1d5",
      "parents": [
        "d6adcef917aac893fd82e7628781145693d6187f"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 11 21:15:37 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 11 21:24:00 2014 -0700"
      },
      "message": "Bring install and install-multiple into parity.\n\nThis ensures that both are using (almost) identical logic when\ndeciding what installs to proceed with.  Installs from \"pm\" for all\nusers now run as OWNER, and rely solely on INSTALL_ALL_USERS to\nexpress intent.  This keeps install session notifications simple.\n\nSince installer UID can vary from installer package name, start\npersisting the UID.  Also parse some missing flags for install\nsessions.\n\nBug: 17469392\nChange-Id: I6d89b1a787aa2024cc4bebf6b9c29317c358e147\n"
    },
    {
      "commit": "c46cd62b5c808101a204be6a5db2bf63701c8944",
      "tree": "d3deacb467cfcab1b2800ba9591ab9d7cd2db3e8",
      "parents": [
        "c946e9ab465fd363dc996efbffcf58f354266aaa",
        "00c0cd4a24bd0f040055f9e786e2df1fa3b7d2d3"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Sep 11 22:28:41 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 11 22:28:43 2014 +0000"
      },
      "message": "Merge \"Clean entire arg block when setting process name.\" into lmp-dev"
    },
    {
      "commit": "00c0cd4a24bd0f040055f9e786e2df1fa3b7d2d3",
      "tree": "87654f391f5e9dca11fd5e84901545890d3d5b16",
      "parents": [
        "98ff7bce66f03da14e39fa7e532a7202bde7dce6"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Sep 10 16:48:46 2014 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Sep 11 14:19:52 2014 -0700"
      },
      "message": "Clean entire arg block when setting process name.\n\nWhen Android processes fork from Zygote, we rewrite the command line\nwith a new name, eg. \"system_server\".  When we do this, we should\nfill the entire block with zeros to remove corrupted argument\ninformation that may otherwise remain in the /proc/\u003cpid\u003e/cmdline buffer\nand be seen in tools and stack dumps.\n\nFixed an issue where VM options could be overwritten after setting\nthe nice name if the name was too long.\n\nBug: 17474152\nChange-Id: Ie6cf9ed7752a04300a340e26cd6812bb35c59e1b\n"
    },
    {
      "commit": "f58e532e015ef31d879ee51aeeb251349784717c",
      "tree": "8a1ab40c5c14943b12da70c5c70bbde48fc65bd1",
      "parents": [
        "c96e3927657558f0d01626c252cf480624749120",
        "8cd28b57ed732656d002d97879e15c5695b54fff"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Sep 11 16:46:33 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 11 16:46:34 2014 +0000"
      },
      "message": "Merge \"Apply cross-user restrictions to Shell\" into lmp-dev"
    },
    {
      "commit": "8cd28b57ed732656d002d97879e15c5695b54fff",
      "tree": "33f02a0e243e5c3d8889862c26af5accc0e4e98b",
      "parents": [
        "da6e6c888f81d3bd19ff1f3cf9b081b7f9b2a013"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sun Jun 08 17:54:27 2014 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Sep 10 17:15:06 2014 -0700"
      },
      "message": "Apply cross-user restrictions to Shell\n\nEven though Shell user is allowed to perform cross-user actions,\nlock that path down if the target user has restrictions imposed by\nthe profile owner device admin that prevents access via adb.\n\nIf the profile owner has imposed DISALLOW_DEBUGGING_FEATURES, don\u0027t\nallow the shell user to make the following types of calls:\nstart activities, make service calls, access content providers,\nsend broadcasts, block/unblock packages, clear user data, etc.\n\nBug: 15086577\nChange-Id: I9669fc165953076f786ed51cbc17d20d6fa995c3\n"
    },
    {
      "commit": "65e76d1200395a9c67893378ddb64c47ede400b4",
      "tree": "198c2f2a9163870d75453753ccadbca2dc34c7c2",
      "parents": [
        "05c4f7ad765e2178e6e28676fd3438d2aaa38894"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Sep 09 17:28:03 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Sep 10 15:02:59 2014 -0700"
      },
      "message": "Output recent configs in am get-config command\n\nChange-Id: Ic516e73d2e72ac0dc3136f7226cedd851fe22b85\n"
    },
    {
      "commit": "dda003ffa84f986bfaba4344124eafa533f5039d",
      "tree": "649b390602e2efe8abad283fcdd04f285cfaff40",
      "parents": [
        "551056ec0fd274f4696c2cf1ec9c62298f7f7226"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Aug 28 18:06:51 2014 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Aug 29 10:28:38 2014 -0700"
      },
      "message": "Clean up apks installed for a removed user\n\nWhen a user is removed, enumerate through all installed packages\nto see if any of them are not installed for any user. Delete the\npackage if no user has it \"installed\".\n\nAdded a pm option to install an apk for a specific user.\n\nFixed a crash in UserManagerService when executing the above\ncleanup - dying users generate a null UserInfo.\n\nBug: 15426024\nChange-Id: I571decde1ae1c257d0da6db153b896aad6d6bcb4\n"
    },
    {
      "commit": "55471dcd0f843e79d8665c63165720eca6a9c980",
      "tree": "8c0c3defbd934c122861a5895d80ec7f5cd1f59e",
      "parents": [
        "371bee50f9b2e2f293bb1e1e11872ef1bd69d155"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Aug 27 15:39:17 2014 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Aug 28 17:02:37 2014 -0700"
      },
      "message": "Change /dalvik-cache to be owned by root.\n\nBug: 16875245\n\n(cherry picked from commit 79bf4007f559e194205f632b23d2bfb6f8d1e7ba)\n\nChange-Id: I29a70215a2207bc4e0db02ab751d32a68edf4b66\n"
    },
    {
      "commit": "1b012d302b56b4adf950035136d1d191a1936d5a",
      "tree": "4b6fc0a3e89f7a2251680e7e13f7211a8dff7ba2",
      "parents": [
        "987eb9734445bd92f6925b596b9b0ece90ad70b8"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Aug 20 10:35:34 2014 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Aug 26 15:54:25 2014 -0700"
      },
      "message": "Add sample profiling option to am.\n\nAlso bundles all profiling options into a class.\n\nBug: 17040932\nChange-Id: I85d675ee1494bdc7308caffdf94145d27c996e9d\n"
    },
    {
      "commit": "941a8ba1a6043cf84a7bf622e44a0b4f7abd0178",
      "tree": "c783987f68caaa4cc827b3c720f269bcc9d34667",
      "parents": [
        "7653a30ea0232ab8323ec51ddcba8d8054ca8a2f"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Aug 20 16:26:32 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Aug 22 16:25:04 2014 -0700"
      },
      "message": "Installing splits into ASECs!\n\nSessions can now zero-copy data directly into pre-allocated ASEC\ncontainers.  Then at commit time, we compute the total size of the\nfinal app, including any inherited APKs and unpacked libraries, and\nresize the container in one step.\n\nThis supports both brand new ASEC installs and inheriting from\nexisting ASEC installs.  To keep things simple, it currently requires\ncopying any inherited ASEC contents, but this could be optimized in\nthe future.\n\nExpose new vold resize command, and allow read-write mounting of ASEC\ncontainers.  Move native library extraction into the installer flow,\nsince it needs to happen before ASEC is sealed.  Move multiArch flag\ninto NativeLibraryHelper, instead of making everyone pass it\naround.  Migrate size calculation to shared location.\n\nSeparate \"other\" package name in public API, provide a path to a\nstorage device when relevant, and add more docs.\n\nBug: 16514385\nChange-Id: I06c6ce588d312ee7e64cce02733895d640b88456\n"
    },
    {
      "commit": "b5cf61be7c82392a6f34f53d97c8382d9a0f0b3a",
      "tree": "a84b0ccffe67fc2e5a671ca2142269e15802c9b0",
      "parents": [
        "d504ab14d264e340fac9422b84b5f3c677d87c5f"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Aug 18 16:10:28 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Aug 19 11:27:19 2014 -0700"
      },
      "message": "Add Shell command to set AppOps permissions\n\nChange-Id: I6446543b27f0d2d2e69590a2807e713c6d5ccbbc\n"
    },
    {
      "commit": "3e3b251f46f6ec46a41d42eb7c36a6268096c70d",
      "tree": "0e331663d4f7ce20312e9a451c35a23f05011d4b",
      "parents": [
        "78fc9220d4f99332370c1294dd865703db2f2ae0",
        "a0907436c01fd8c545a6b5c7b28bc3bc9db59270"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Aug 15 23:05:33 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 15 18:56:10 2014 +0000"
      },
      "message": "Merge \"PackageInstaller API refactoring.\" into lmp-dev"
    },
    {
      "commit": "a0907436c01fd8c545a6b5c7b28bc3bc9db59270",
      "tree": "6c2dd0946fd4483de652551aa272086d7bb0b3a4",
      "parents": [
        "82d6d337b389ef088879a5e527d44c75c41c5b44"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Aug 15 10:23:11 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Aug 15 15:57:02 2014 -0700"
      },
      "message": "PackageInstaller API refactoring.\n\nSwitch to using IntentSender for results to give installers easier\nlifecycle management.  Move param and info objects to inner classes.\n\nBug: 17008440\nChange-Id: I944cfc580325ccc07acf22e0c681a5542d6abc43\n"
    },
    {
      "commit": "78c64cdbd82a4d8feb7faf43109b86ab87252dd1",
      "tree": "501c72368cab17c769900fec88798f3aeb80e1c4",
      "parents": [
        "1d2a1c917f46b6854e91f9867a20abb76ecb794d"
      ],
      "author": {
        "name": "RoboErik",
        "email": "epastern@google.com",
        "time": "Thu Aug 14 18:42:09 2014 -0700"
      },
      "committer": {
        "name": "RoboErik",
        "email": "epastern@google.com",
        "time": "Thu Aug 14 18:42:54 2014 -0700"
      },
      "message": "Fix crash in legacy apps that register without a looper\n\nSome legacy apps registered their media button receiver in a thread\nwithout a looper. If this happens we need to use the main looper to\nprevent a crash.\n\nbug: 16306226\nChange-Id: Idf472e649393e2a7ce2a3e1cbb3476003ab17f34\n"
    },
    {
      "commit": "b05ea7bb2866035105707e22a977b010ef5062b2",
      "tree": "7a9e3b7ff8fba755ab66dbdfaa8191506627d337",
      "parents": [
        "e7ba237ce425824e2065f0d65cdc419e15974dc5",
        "24762bffc3358762666079cd802040a316b3260d"
      ],
      "author": {
        "name": "RoboErik",
        "email": "epastern@google.com",
        "time": "Thu Aug 14 17:03:19 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 14 16:10:21 2014 +0000"
      },
      "message": "Merge \"Add an onSessionDestroyed callback to MediaController.Callback\" into lmp-dev"
    },
    {
      "commit": "24762bffc3358762666079cd802040a316b3260d",
      "tree": "5035aae100709592b619f8c73eb24450af6c6180",
      "parents": [
        "b3cca876c2e11b865cb4f83abe2c48a60b95af5b"
      ],
      "author": {
        "name": "RoboErik",
        "email": "epastern@google.com",
        "time": "Wed Aug 13 15:00:21 2014 -0700"
      },
      "committer": {
        "name": "RoboErik",
        "email": "epastern@google.com",
        "time": "Wed Aug 13 15:00:21 2014 -0700"
      },
      "message": "Add an onSessionDestroyed callback to MediaController.Callback\n\nCallbacks on the controller need to know when the session ceases\nto exist.\n\nbug:17009030\nChange-Id: I0f1c1cfc51f7dd2203955287cc269667d3765ee4\n"
    },
    {
      "commit": "4903f64ba2478849e6c401f42f5a77c1d4f9f7df",
      "tree": "ace15042e8025593f37f0f87444d60120e623c22",
      "parents": [
        "dd0b7d083fd7a176c8cba151469d34ec69803a70"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Aug 11 13:33:45 2014 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed Aug 13 12:41:19 2014 +0100"
      },
      "message": "Persist the cpuAbiOverride setting.\n\nIf an app is installed with an ABI override (adb install -r --abi)\nwe should remember this so that we don\u0027t revert to the scan derived\nABI on the next reboot.\n\nbug: 16476618\n\nChange-Id: I6085bc0099eb613dd9d3b07113c7c13859780697\n"
    },
    {
      "commit": "fbd0e9fa37fc17ccd25e4c1f16195bbd27de3c4c",
      "tree": "fb67a6cbd7f3b39bd82f22f1763a83c776fb08d6",
      "parents": [
        "905857f1b8708b1a7cf60a5e6b934b75ac6aea77"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Aug 06 16:34:34 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@google.com",
        "time": "Thu Aug 07 00:23:54 2014 +0000"
      },
      "message": "Surface user action events when un/installing.\n\nThis will be used shortly to connect up with permissions\nconfirmation UI.\n\nBug: 16515814\nChange-Id: If28cecc28549900d960ac107a1fba0b10ce5bd7b\n"
    },
    {
      "commit": "75847b98f39e521a57042c50e69be9e142788d32",
      "tree": "b86d2a0657fc34724ac0a48a378833d51855263b",
      "parents": [
        "b0d767dcf17dd393646b8fc3e8c9f46dfe12e230"
      ],
      "author": {
        "name": "RoboErik",
        "email": "epastern@google.com",
        "time": "Tue Jul 29 13:10:17 2014 -0700"
      },
      "committer": {
        "name": "RoboErik",
        "email": "epastern@google.com",
        "time": "Tue Aug 05 14:30:27 2014 -0700"
      },
      "message": "Add display metadata and change strings to CharSequences\n\nThis adds some fields for display purposes to MediaMetadata and also\nmakes the default for all text CharSequence instead of String. Also\nadds a hidden method for getting a Description for the metadata.\n\nbug: 11708293\nChange-Id: I0ed58d9ac3aeff41325c4ccf5fed0539bbf03b4d\n"
    },
    {
      "commit": "976e8bd2017d0263216c62111454438cc0f130e3",
      "tree": "5cf592fb85841f9e41d3bf6b43422641c3609ab2",
      "parents": [
        "c79eabcd3c6306bb2ec75f9584b79e661f265127"
      ],
      "author": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Wed Jul 16 15:12:03 2014 -0700"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Aug 05 20:57:20 2014 +0000"
      },
      "message": "Allow adding widgets from user profiles.\n\nThe goal of this change is to enable support for appwidget from\nuser profiles to the user main profile. A user profile is a user\nwhich is associated as a child of the main user profile. For example,\na user may have a personal (parent) and corporate (child) profile.\nThe device policy should be able to control whether adding a widget\nfrom a child profile and given packages is allowed. This change\nassumes that all packages from managed profiles are white listed.\nAnother change will add the device policy changes.\n\nChange-Id: I267260b55d74c48b112a29979a9f59eef7a8194e\n"
    },
    {
      "commit": "1cb2d0d4bba387665128c62c342e59103ea4be26",
      "tree": "2659fda22f585adf01574c24f1f23dbb3caccef2",
      "parents": [
        "874bcd82c223ce58c9d76edcf619b3988c672307"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jul 30 16:45:01 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Jul 31 15:17:03 2014 -0700"
      },
      "message": "Persist install sessions, more lifecycle.\n\nTo resume install sessions across device boots, persist session\ndetails and read at boot.  Drop sessions older than 3 days, since\nthey\u0027re probably buggy installers.\n\nAdd session callback lifecycle around open/close to give home apps\ndetails about active installs.  Also give them a well-known intent\nto show session details.\n\nExtend Session to list staged APKs and open them read-only, giving\ninstallers a mechanism to verify delivered bits, for example using\nMessageDigest, before committing.\n\nSwitch to generating random session IDs instead of sequential.\n\nDefensively resize app icons if too large.  Reject runaway\ninstallers when they have too many active sessions.\n\nBug: 16514389\nChange-Id: I66c2266cb82fc72b1eb980a615566773f4290498\n"
    },
    {
      "commit": "031149cd5f22bd858142633c7a763450f42793f7",
      "tree": "2a405fc0c7cae702e5d85eeb3979d560f6caca99",
      "parents": [
        "aa4e23bbb36994708ba72c5f4c83255025d99e07"
      ],
      "author": {
        "name": "RoboErik",
        "email": "epastern@google.com",
        "time": "Fri Jul 25 16:00:52 2014 -0700"
      },
      "committer": {
        "name": "RoboErik",
        "email": "epastern@google.com",
        "time": "Mon Jul 28 11:02:15 2014 -0700"
      },
      "message": "Add context to MediaController constructor\n\nThis also adds a convenience method to MediaSession to allow getting\na controller instead of having to create and cache your own.\n\nbug:16561220\nChange-Id: I87f551a7474e71f1cf2f07e0e541c3a4515cd977\n"
    },
    {
      "commit": "aa4e23bbb36994708ba72c5f4c83255025d99e07",
      "tree": "ba6776a3c108a1a31351c212abfb1ba800f34a15",
      "parents": [
        "b214efbb9170a9f6a4991684a63ca59680074cc7"
      ],
      "author": {
        "name": "RoboErik",
        "email": "epastern@google.com",
        "time": "Thu Jul 24 18:35:11 2014 -0700"
      },
      "committer": {
        "name": "RoboErik",
        "email": "epastern@google.com",
        "time": "Fri Jul 25 16:22:59 2014 -0700"
      },
      "message": "Add getPackageName to MediaController\n\nThis removes the MediaSessionInfo class and adds a method on the\ncontroller to get the package name. This also converts code that\ndepended on the session\u0027s UUID to use the token for comparison or\nthe Tag in the case of test code that needs a string identifier.\n\nChange-Id: Icb8dc76c70e23e897da8fd07651c524b96372bf9\n"
    },
    {
      "commit": "20e0c50f601e5930a246d4556118423a49c12ca1",
      "tree": "02e5ab04fff88af15912830344c8ddff9774f25f",
      "parents": [
        "a753f4c6cb8558795e673df1896532cd148781e2"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jul 25 14:09:37 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@google.com",
        "time": "Fri Jul 25 21:11:47 2014 +0000"
      },
      "message": "Offer force-dex-opt when running as root.\n\nRecently we removed the PackageManager inotify triggers, meaning the\nonly supported ways of installing apps were:\n\n-- adb install -r Foo.apk\n-- adb shell stop \u0026\u0026 adb sync \u0026\u0026 adb shell start\n\nIterating on most system apps (like Settings) can use the first\napproach, but it doesn\u0027t work for \"persistent\" processes like\nSystemUI.  (ActivityManager is very particular about how it deals\nwith persistent apps, and it always sticks with the first\nApplicationInfo found at boot.)\n\nSo to enable rapid iteration on persistent apps, we now offer the\none missing piece of forcing a dexopt with a new pm force-dex-opt\ncommand only available to -eng or -userdebug builds.  Typical use\nfor iterating on persistent apps now looks like this:\n\n$ mmm frameworks/base/packages/SystemUI/ \u0026\u0026 adb sync \u0026\u0026\n    adb shell pm force-dex-opt com.android.systemui \u0026\u0026\n    adb shell kill `pid systemui`\n\nYay!\n\nChange-Id: I0ae2467f1d7cda56c70ba20953cd25fa8ee766ff\n"
    },
    {
      "commit": "16c8e3f49497b6046972ae650772f65768366be8",
      "tree": "56ad5dc58ab923e35029d25430d30bc77b218994",
      "parents": [
        "186655285fb5deafc4d56ca8efad2d115dfd6af3"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Jul 24 17:08:17 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jul 25 11:59:48 2014 -0700"
      },
      "message": "PackageInstaller changes based on feedback.\n\nMostly cosmetic changes from API council feedback.\n\nBug: 16543552\nChange-Id: Ic926829b3f77c31f50a899c59b779353daf00d59\n"
    },
    {
      "commit": "b9583c9d93bd1d2c9d506dffae87a5ca2b7f7307",
      "tree": "42d7b26e9fcc1df8db992f4428d675a91f092c83",
      "parents": [
        "ccf9fca47149d102293668c2e81febc175e0329e"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Jul 24 17:03:22 2014 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@android.com",
        "time": "Fri Jul 25 00:30:07 2014 +0000"
      },
      "message": "Turn on debugging override of idle time\n\n\u0027adb shell am idle-maintenance\u0027 has traditionally been used to force\nthe system to consider itself to be in an \"idle\" state.  Unfortunately\nthe new Job Manager hadn\u0027t yet been aware of this.  Rectify the situation.\n\nAlso fixes a bug in debug logging that would cause a system server\ncrash under certain race circumstances.\n\nChange-Id: I8a29bd7757924f8e464865235c344233fc03d8c3\n"
    },
    {
      "commit": "be19c3a91a11508bd12e3355f3b1d9adf7f53194",
      "tree": "905c591f5289e2342a8290bbc6cc1d96e5acf0db",
      "parents": [
        "52ff21d841ad5b39b6def0c286a737fd4b74b2e2"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Mon Jul 21 23:46:05 2014 -0700"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Wed Jul 23 02:25:25 2014 +0000"
      },
      "message": "Adding shell commands for grant/revoke of bind app widget permisison.\n\nTesting the app widget APIs requires binding of widgets which is guarded\nby a system signature permission or white listing. Since CTS tests can\nnot be signed with the platform certificate, they should be able to\ntemporariliy white list their package. This command adds the ability to\ngrant and revoke the provilege to bind app widgets to a given package.\n\nChange-Id: I6de1bbf27ac684ec47e61157f19ec6d29e2db979\n"
    },
    {
      "commit": "e5bcff624fb58b6f95be8ddff7f5b6b3bf5d19c7",
      "tree": "0a758d1029f2b8aed41a089330c7fa79564a6a32",
      "parents": [
        "c2ae1a6b455d97c4e89e2bf7b113435dd63bb36f"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sat Jul 19 15:44:09 2014 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Jul 21 22:18:40 2014 +0000"
      },
      "message": "Rename setApplicationBlocked to setApplicationHidden\n\nThis corrects the expected behavior of the app state. Hidden apps\ncan be installed by the store to be brought out of hidden state.\n\nBug: 16191518\nChange-Id: Id128ce971ceee99ba1dea14ba07ce03bd8d77335\n"
    },
    {
      "commit": "9a445771f57dd15b06db0dbefd66c368d84eec2d",
      "tree": "d418591835aec7c22724e49e0a8681efea5fc39c",
      "parents": [
        "4990e4f0e3d493036e99e1f5fb893635a9b66eb1"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jul 16 11:32:08 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jul 16 13:38:09 2014 -0700"
      },
      "message": "Install sessions only inherit APK files.\n\nAlso track historical install sessions for debugging purposes.  Hide\nsignature verification API for now.  Clear code cache only after\nkilling the app being upgraded.\n\nBug: 14975160\nChange-Id: I52fc7f11d2506f792236d8a365c8cfed21b46c30\n"
    },
    {
      "commit": "8b4bffcac996b4083e720310a09d315ca1c4a000",
      "tree": "56726422a371d15b204756f80bce5e487d1ed318",
      "parents": [
        "54892c8b813eb2de3c5c6bcd08c90b8dd0abbec8"
      ],
      "author": {
        "name": "RoboErik",
        "email": "epastern@google.com",
        "time": "Thu Jul 10 13:48:01 2014 -0700"
      },
      "committer": {
        "name": "RoboErik",
        "email": "epastern@google.com",
        "time": "Wed Jul 16 12:03:45 2014 -0700"
      },
      "message": "Make MediaSession and MediaController constructors public\n\nThis makes the MediaSession/Controller constructors public and registers\nwith the system behind the scenes.\n\nThis also adds a bit about needing to call setActive(true) to start receiving\ncommands in MediaSession\u0027s docs.\n\nChange-Id: If882d229b54c36bf0831aca0255052dda667a2bc\n"
    },
    {
      "commit": "69ea974f1712c83a9ad194187237edf1169f9064",
      "tree": "c8d768527b58502da7b575b86ffa1b343044c9e2",
      "parents": [
        "969167dc05a6485a32d160895871cff46fd81884",
        "6c833e07a05c48ca60ee4d72421bf8b1e78dc710"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jul 15 06:16:37 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 15 00:41:06 2014 +0000"
      },
      "message": "Merge \"Public API for PackageInstaller!\" into lmp-dev"
    },
    {
      "commit": "6c833e07a05c48ca60ee4d72421bf8b1e78dc710",
      "tree": "f16f3c2a12dea6fd5131d82d007fd75cd61fb915",
      "parents": [
        "5c6a8e322227354acbded5c49f44c0b289021bf5"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jul 14 22:44:30 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jul 14 23:06:52 2014 -0700"
      },
      "message": "Public API for PackageInstaller!\n\nFlesh out documentation and finalize first cut of API.  Also surface\ninstallLocation and splitNames through PackageInfo.\n\nBug: 14975160, 15348430\nChange-Id: Ic27696d20ed06e508aa3526218e9cb20835af6a0\n"
    },
    {
      "commit": "ad11eb52fe62b6696df2194cb9e176f7d799e844",
      "tree": "440f9699b759d4b14b20a9280234d352faf2b0ce",
      "parents": [
        "5c6a8e322227354acbded5c49f44c0b289021bf5"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Jul 13 17:33:07 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jul 14 10:57:04 2014 -0700"
      },
      "message": "Pass install result message; path selection.\n\nOops, forgot to include message argument to invoke the new-style\ncallback.  Also use more robust way of generating cluster APK\ndirectory names, and add more logging details on rename failure.\n\nChange-Id: Ifa8abdd1db58b73e13b9a8077ec126cf20a0d90e\n"
    },
    {
      "commit": "01a500ed1c6ae3fff66678144ae637aa8cad0ecc",
      "tree": "579571453290b6824da22fa9748286bfc3acb727",
      "parents": [
        "9fb7b07c6cbdd1c6f394bfc456ccc034619b6727"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jul 10 22:50:50 2014 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jul 14 04:06:44 2014 -0700"
      },
      "message": "Delete first draft of media routing APIs.\n\nThe new APIs will not be as tightly integrated into MediaSession.\n\nChange-Id: I5cfd37d9d8d0c5d46c55edb5cf0772a8f1ef13ab\n"
    },
    {
      "commit": "a10311434778ea1be1621c2251c0c8c2966f337b",
      "tree": "3496202e354ae761d7c750e105c610f67f82542d",
      "parents": [
        "e0b0bef75b66f0a87039c8f58c17b1596a2baebe"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Jul 12 18:09:46 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Jul 12 21:12:25 2014 -0700"
      },
      "message": "Package installation listener events.\n\nFlesh out implementation of install session observers.  Carve out 20%\nof published install progress for final system operations such as\ndexopt, etc.\n\nAdd dumpsys output for active install sessions.  Create explicit\nfsync() instead of overriding meaning of flush().  Hack to throw\nIOExceptions over Binder calls.\n\nBug: 14975160, 15348430\nChange-Id: I874457e40c45d2661bc0a526df9285ffea4bb77c\n"
    },
    {
      "commit": "bb580670350b76fa2fcc5ee873f99b7970759cbf",
      "tree": "b4e22eeaaf299d9c5b2272a292fe9117e94bc0b3",
      "parents": [
        "4901d62f1629ef5b9fb4c821e5fafbbfde4b8a47"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Jul 10 12:10:25 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jul 11 16:54:49 2014 -0700"
      },
      "message": "Progress toward installer public API: callbacks.\n\nInstead of surfacing all the existing cryptic error codes, we\u0027re\ngoing to classify them into broad categories when surfacing through\npublic API.  This change introduces InstallResultCallback and\nUninstallResultCallback, and wires them up to existing AIDL\ninterfaces.\n\nAlso start defining general SessionObserver for apps interested\nin general progress details, such as Launcher apps.  Details about\nactive sessions are returned through new InstallSessionInfo objects.\n\nBug: 14975160\nChange-Id: I068e2b0c30135f6340f59ae0fff93c321047f8f9\n"
    },
    {
      "commit": "ec55ef0934b8e0d1bb705434947de817f7be57f1",
      "tree": "4855af37aa2c312bc2a645f5d94c463a2859d516",
      "parents": [
        "2cfc8482267707a671cbe4275ea8927c1aef991a"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jul 08 11:28:00 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jul 09 16:55:56 2014 -0700"
      },
      "message": "Extend pm to support sessions and split APKs.\n\nSeparate commands to create an install session, stream files into the\nstaging area, and then commit the install.  Streaming can accept data\nfrom stdin across adb, avoiding extra copy from push.\n\nExtend FileBridge to support blocking close().  Always destroy\nsession regardless of result.\n\nBug: 14975160\nChange-Id: Ic3f462e7d1901079b785e210228950cdfa676466\n"
    },
    {
      "commit": "513a074de68a4772a9900e90f38e74ff92c15e7c",
      "tree": "410c98a83b684a34063903496863247c303cb5cb",
      "parents": [
        "8d479b0c2ddb150182bcf510876a240cb869661b"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jul 08 17:10:32 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jul 08 17:41:29 2014 -0700"
      },
      "message": "Clean up IPackageManager install surface area.\n\nAlso more removal of encryption support.\n\nChange-Id: If525dc5a8422134515f225a8ac4731e968069468\n"
    },
    {
      "commit": "42a1d08df7d417fd4e67eabc91ff05ee77fd9995",
      "tree": "7bfa7e66b153087c56b19c6dd8b340e0ea2ddb42",
      "parents": [
        "95f621a1a4a0891075f1f9daf8e0323aab488793"
      ],
      "author": {
        "name": "Mike Reed",
        "email": "reed@google.com",
        "time": "Mon Jul 07 18:06:18 2014 -0400"
      },
      "committer": {
        "name": "Mike Reed",
        "email": "reed@google.com",
        "time": "Mon Jul 07 18:11:24 2014 -0400"
      },
      "message": "SkBitmap::Config is deprecated, use SkColorType\n\nChange-Id: Ida181d2aac760072cf2d01409edac37699dea216\n"
    },
    {
      "commit": "ab225b301b8b13a141053a33d5dd5eeccfc69887",
      "tree": "e79e890866f6002fb9656ade335cc6bd4b31d812",
      "parents": [
        "7218e9c6beaa066237c6b2aac6d10dd7dc84e0a2"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Jun 24 16:28:48 2014 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Jun 24 16:52:09 2014 -0700"
      },
      "message": "Add \u0027fullbackup\u0027 to bmgr\u0027s usage statement\n\nAlso make it handle the list of packages to be backed up as a single\nmultiple-app argument to fullTransportBackup() rather than N calls\neach backing up one app.\n\nChange-Id: I9fe4d5caca54fafef70ffe9af4c26e3941dc5d26\n"
    },
    {
      "commit": "b933055cf3f7f8ea89bfd3bc9c37a3891ff7310a",
      "tree": "7d68b96a6fd02ca6ece664d5c53ee9778ef49d17",
      "parents": [
        "9285d1bf9c57e5f1da8f8d8ef7a6a38b2f0e4ec3"
      ],
      "author": {
        "name": "Mike Reed",
        "email": "reed@google.com",
        "time": "Mon Jun 16 17:31:48 2014 -0400"
      },
      "committer": {
        "name": "Mike Reed",
        "email": "reed@google.com",
        "time": "Fri Jun 20 10:28:37 2014 -0400"
      },
      "message": "stop using (deprecated) SkBitmap::Config\n\nChange-Id: Ic75b5fc6996578e9d95bd3a220439ec1541d7c3b\n"
    },
    {
      "commit": "d3c8642dae9a1f6db60e2f8e5c7b32cd1b3169df",
      "tree": "8bad91681f0c47e401482db95f630ed6edf4d139",
      "parents": [
        "150bfcd73d53cd824b4ab20161a3d87710ce259b"
      ],
      "author": {
        "name": "RoboErik",
        "email": "epastern@google.com",
        "time": "Mon Jun 16 14:00:48 2014 -0700"
      },
      "committer": {
        "name": "RoboErik",
        "email": "epastern@google.com",
        "time": "Thu Jun 19 10:37:00 2014 -0700"
      },
      "message": "Remove some more old code and fix Media command\n\nRemoves some more hidden apis from AudioService/Manager. This also\nfixes up Media.java to support commands for the new service to help\nwith debugging. Also fixes a couple bugs that were found while fixing\nup Media.\n\nChange-Id: I68e4aa80a4de430b98236aafc883664b9432c62b\n"
    },
    {
      "commit": "f90f2f8dc36e7243b85e0b6a7fd5a590893c827e",
      "tree": "b2fb1fc49961c7c5f5c1712872ce2ffcfe550a89",
      "parents": [
        "c802c8cda234129c1ce3c7a939bd68a1d5813ce6"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Jun 06 14:27:00 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jun 18 19:20:08 2014 +0000"
      },
      "message": "Support multiple resource tables with same package\n\nIn order to support APK split features, the resource\ntable needs to support loading multiple resource\ntables with the same package but potentially new set\nof type IDs.\n\nThis adds some complexity as the type ID space changes\nfrom dense and ordered to potentially sparse.\n\nA ByteBucketArray is used to store the type IDs in\na memory efficient way that allows for fast retrieval.\n\nIn addition, the IDMAP format has changed. We no longer\nneed random access to the type data, since we store the\ntypes differently. However, random access to entries of\na given type is still required.\n\nChange-Id: If6f5be680b405b368941d9c1f2b5d2ddca964160\n"
    },
    {
      "commit": "8a4c9721a9e09d20c63381c13fa29bd9f7cbc3e3",
      "tree": "b2564620026c0ca6081de864b20ac1d5e6827135",
      "parents": [
        "564054146e7286b0d046591c0bd3195b0e4a6cf3"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jun 16 13:48:42 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jun 17 14:38:44 2014 -0700"
      },
      "message": "Plumb split APKs into public API.\n\nIntroduces new ApplicationInfo fields to surface zero or more split\nAPKs for an application.  Splice these APKs into both the class\nloader and resource system.  Cleaner building of these paths.\n\nRun dexopt() on all split APKs found after a parse, and populate\ninto ApplicationInfo.\n\nChange-Id: I4a376bf4492d84ea95aafa866e106ea43a43e492\n"
    },
    {
      "commit": "afc00e1c81a2ae00dc01bb980bc617f382441102",
      "tree": "116ff9d9668e3209f3950264f2c66b1474d10852",
      "parents": [
        "e54a764cfd83825096edd55dd22cc7b3a6af45da"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jun 17 10:44:05 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jun 17 20:27:39 2014 +0000"
      },
      "message": "Change am get-config command to use ABI string array\n\nThere is a list of supported ABIs in android.os.Build which\nis ordered by preference. This is a more flexible list to use\ninstead of 2 fixed ABIs.\n\nChange-Id: I6aa3b39b5ffa888ed83a870b937e18328dd6de39\n"
    },
    {
      "commit": "2c749d242759ea36c0229ea933f22b6363337b19",
      "tree": "26f9c01de17f8fca123212e2946e4093d8b9f819",
      "parents": [
        "b69fc08303af782539d09d1775e6f63d4ccad3a1"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jun 04 13:00:29 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Jun 16 23:01:19 2014 +0000"
      },
      "message": "New command to get device config\n\nChange-Id: I7172a3a150fd83e2382ca3e4e4a0188758189f14\n"
    },
    {
      "commit": "9ff53a7100b1a40f5d2df3eb19a2f3f2fff39a46",
      "tree": "162c23a51e116f9506e7d6801236dd2e2c8f3788",
      "parents": [
        "ad60891a6ecaf2a5815677b33e96afe7f49ee113"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Jun 03 17:20:07 2014 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Sun Jun 15 17:35:33 2014 -0700"
      },
      "message": "Implement full data backup through transport\n\nCurrently no timed/scheduled full-data backup operations are\nperformed by the OS, but the plumbing is now in place and can\nbe tested using \u0027adb shell bmgr fullbackup pkg [pkg2 pkg3 ...]\u0027.\n\nThe LocalTransport test transport implementation has been augmented\nto support the new full-data backup API as well.\n\nIn addition, \u0027adb backup\u0027 now takes the -compress/-nocompress\ncommand line options to control whether the resulting archive is\ncompressed before leaving the device.  Previously the archive was\nalways compressed.  (The default is still to compress, as it will\nusually reduce the archive size considerably.)\n\nInternally, the core implementation of gathering the full backup\ndata stream from the target application has been refactored into\nan \"engine\" component that is shared by both \u0027adb backup\u0027 and the\ntransport-oriented full backup task.  The archive file header\ngeneration, encryption, and compression logic are now factored out\nof the engine itself instead of being hardwired into the data\nhandling.\n\nBug 15329632\n\nChange-Id: I4a044faa4070d684ef457bd3e11771198cdf557c\n"
    },
    {
      "commit": "439688cf3940571fde9063a02e5f539857b66142",
      "tree": "c79b66dbdc0ececb24b6f10f6f1483edf90db1a3",
      "parents": [
        "104e14531ca2212117540d8b6abc06ab67564ebc",
        "6de057816f2feb8e0ecbd2e9ccf73ad53e4dc7ed"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 12 00:03:55 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jun 12 00:03:55 2014 +0000"
      },
      "message": "am 6d758619: Merge \"Implement control of auto power save mode.\" into lmp-preview-dev\n\n* commit \u00276d758619d90a0dda7f1136dcd44d0ac02cdada7e\u0027:\n  Implement control of auto power save mode.\n"
    },
    {
      "commit": "14272302a8b635bd8e9267c1411d0a7ef11bff45",
      "tree": "7d77f5ef5ca90889f4afed32bdf27e668b1afac6",
      "parents": [
        "95981dc8ad08002bab932cefcb6b07c6944491f5"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jun 10 23:13:02 2014 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jun 11 10:34:26 2014 -0700"
      },
      "message": "Implement control of auto power save mode.\n\nFollow the setting for auto power save mode in both\nbattery service and battery UI.  Default level is 15 when\nsetting is not set; otherwise it is whatever the setting\ngives, with 0 meaning auto battery save is off.\n\nChange how we define the \"turn off warn\" level to be\nan adjustment from the warn level, so we can have a good\nvalue for whatever auto setting is set.\n\nFix power manager to never go in to power save mode when\nplugged in, even if the user has manually turned it on.\n\nAdd new delete option to settings command, because I needed\nit for testing.\n\nChange-Id: I512b691df84399d50b8e751fd50732c6093ebe85\n"
    },
    {
      "commit": "dad8f819a710510be28e9fdeee84f9b5b2ddacbf",
      "tree": "34d947b5c4459e017b3e14bb3f43d8f0e7b02b53",
      "parents": [
        "e4d7fc02ab0c333f5cd898928f97e7bce812dfa0",
        "116bdbd823b607d860b039ec334a1f985eed7a7f"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jun 03 12:01:53 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jun 03 12:01:53 2014 +0000"
      },
      "message": "Merge \"Add an --abi argument to \"pm install\"\""
    },
    {
      "commit": "116bdbd823b607d860b039ec334a1f985eed7a7f",
      "tree": "948d436a288ed6e2edc62988df6394e736e92b82",
      "parents": [
        "8627cef5382035dac8f3e68823b239724cc39708"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu May 29 11:51:59 2014 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jun 03 11:35:49 2014 +0100"
      },
      "message": "Add an --abi argument to \"pm install\"\n\nThis allows callers to force an install to a particular\nABI. This is intended only for testing (and CTS) and is\nnot meant for usage by the installer package.\n\nbug: 14453227\n\n(cherry picked from commit 6431d11cd420536aaa9d93ae510a3151ccc4df1d)\n\nChange-Id: I85d4f8785deea02a6a4d3cb0b05e6ef8bf64826b\n"
    },
    {
      "commit": "d8e9050e22265ba49ff2d8b48f01162e09a4324c",
      "tree": "037fcc1b1aba728eed1b1e5fdb7c09c97bb5c807",
      "parents": [
        "559321abbfd2e66763accc172f3596e4cf7f9172",
        "a312c03fd830c489ffc81fad0812826b093b73ee"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jun 02 17:44:47 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 02 17:44:47 2014 +0000"
      },
      "message": "Merge \"Read data from stdin/stdout to follow adb change.\""
    },
    {
      "commit": "dfed4bc99f9f3d48ee7bf9e8ea051a8d5bc4f299",
      "tree": "166fb21faaced287ba8dfb8adc9324a8df436a33",
      "parents": [
        "8c29df5afcde5e1dd27c3ca21cfdec2af47205d1",
        "f7871c31469c6245c1b232a15104704f7481103c"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri May 30 11:51:03 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri May 30 11:51:03 2014 +0000"
      },
      "message": "am f7871c31: am b9b31f4b: am bd4d3203: Merge \"Support an ABI flag for instrumentation.\"\n\n* commit \u0027f7871c31469c6245c1b232a15104704f7481103c\u0027:\n  Support an ABI flag for instrumentation.\n"
    },
    {
      "commit": "f7871c31469c6245c1b232a15104704f7481103c",
      "tree": "cf332f40710fa1359c80c63c93532438a80991bf",
      "parents": [
        "92ab0b91cdcb83c3cb101386d01f04c7d7dfd404",
        "b9b31f4b8eda123e7b544d1a0fa886576064adca"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri May 30 10:49:00 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri May 30 10:49:00 2014 +0000"
      },
      "message": "am b9b31f4b: am bd4d3203: Merge \"Support an ABI flag for instrumentation.\"\n\n* commit \u0027b9b31f4b8eda123e7b544d1a0fa886576064adca\u0027:\n  Support an ABI flag for instrumentation.\n"
    },
    {
      "commit": "b9b31f4b8eda123e7b544d1a0fa886576064adca",
      "tree": "f08261f8c8c2458969df0c840a4789d5eb06463d",
      "parents": [
        "52b4146273ea29f6d1ed89e4de79f2d7ff0d71dc",
        "bd4d320344833ce67dad3a4e10a61d0502a81d0e"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri May 30 10:41:24 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri May 30 10:41:24 2014 +0000"
      },
      "message": "am bd4d3203: Merge \"Support an ABI flag for instrumentation.\"\n\n* commit \u0027bd4d320344833ce67dad3a4e10a61d0502a81d0e\u0027:\n  Support an ABI flag for instrumentation.\n"
    },
    {
      "commit": "a312c03fd830c489ffc81fad0812826b093b73ee",
      "tree": "7562a82de9ab19ffa0f1f5a2f9c9b83f91b81257",
      "parents": [
        "05ad48206a082057e17723d32493c153faa6881e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu May 29 18:03:22 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu May 29 18:03:22 2014 -0700"
      },
      "message": "Read data from stdin/stdout to follow adb change.\n\nChange-Id: I29ee5e05a538c6836f18b9cc9331c74f41936b29\n"
    },
    {
      "commit": "00f535845bebe4fba1de77ebd0119c7c23197a4f",
      "tree": "b951e26901f724289d97299103b4445ef3e8f1c3",
      "parents": [
        "a46d3e11587567fc3caa1a32112267bae4a68864",
        "9890e341bf9d565309cd7db5e6c4194c66c0a1d8"
      ],
      "author": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Wed May 28 18:31:38 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 28 18:31:38 2014 +0000"
      },
      "message": "Merge \"SurfaceFlinger: Add sourceCrop to screenshot\""
    },
    {
      "commit": "1bdbd4be02aec4fd164ba41c164735639b9c7e15",
      "tree": "419c917e1813053a43af5af700563bb021bbcffb",
      "parents": [
        "27692098d7afb77237a98d25da2e6cdfe0a85883"
      ],
      "author": {
        "name": "Kenny Guy",
        "email": "kennyguy@google.com",
        "time": "Wed May 14 19:53:22 2014 +0100"
      },
      "committer": {
        "name": "Kenny Guy",
        "email": "kennyguy@google.com",
        "time": "Fri May 23 18:37:34 2014 +0100"
      },
      "message": "Add ability to uninstall per user to adb shell pm.\n\nDefault is still uninstall for all users, but if --user\nis passed in it will just uninstall for that user.\nFor system apps if --user is supplied it will uninstall\nrather than revert to the current system version.\n\nChange-Id: If1be0f78f01391f7ac6b53150dfeeccd0c002899\n"
    },
    {
      "commit": "9890e341bf9d565309cd7db5e6c4194c66c0a1d8",
      "tree": "f885b4dcc80f68147440940388f386f69312a03c",
      "parents": [
        "c33fb2b5c014f37ce36dbc12eff1e969562f7d50"
      ],
      "author": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Thu May 22 16:12:54 2014 -0700"
      },
      "committer": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Fri May 23 09:19:02 2014 -0700"
      },
      "message": "SurfaceFlinger: Add sourceCrop to screenshot\n\nAdds a sourceCrop Rect parameter to screenshot commands, which allows\nclients to capture only a portion of the screen instead of the whole\nscreen.\n\nBug: 15137922\nChange-Id: I629447573cd34ffb96334cde7ba02490b9ea06d8\n"
    },
    {
      "commit": "8dcfefd652fa2c5612b3acbc4bf842d2dfb1cf21",
      "tree": "012fc44dd25c9ab1005d993df0db0b77711fa7fc",
      "parents": [
        "402120a2236b294dff9a51461cb22400a6ef67f6"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu May 15 18:12:59 2014 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri May 16 10:30:00 2014 +0100"
      },
      "message": "Support an ABI flag for instrumentation.\n\nAllows us to choose what ABI a process uses when\nlaunching it with \"adb shell am instrument\", for eg.\n\nadb shell am instrument --abi arm64-v8a component/runner\n\nNote that we only perform very basic validation of the\nABI. In general, there is no guarantee that the app will\nlaunch with the instruction set we choose, for eg. if it\nhas native libraries that are for a different ABI.\n\nbug: 14453227\n\nChange-Id: Ifb7e89b53675080dc87941091ee5ac360f218d7f\n"
    },
    {
      "commit": "72a194e6d5d8427ee9816364781b180afffc5393",
      "tree": "6c9ea3a505e79fec7400654915fa04ad36a07326",
      "parents": [
        "1e74c37f8e1acb595f407e0f65744bb6b00c9314",
        "1810927a9b8f6d2597d18c0e77389b4a6fcb5118"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu May 15 10:34:43 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu May 15 10:34:43 2014 +0000"
      },
      "message": "am 1810927a: am eabc93db: am c4c08803: Merge \"app_process: change app_process a symlink of primary version\"\n\n* commit \u00271810927a9b8f6d2597d18c0e77389b4a6fcb5118\u0027:\n  app_process: change app_process a symlink of primary version\n"
    },
    {
      "commit": "1810927a9b8f6d2597d18c0e77389b4a6fcb5118",
      "tree": "25d72c50802f56c6405f16172adb2d46e0277ff0",
      "parents": [
        "d850be5d1491d255a64db9bc95334748e455c782",
        "eabc93db1020be4b71f0db7d5b5d3a7991f3c264"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu May 15 09:45:33 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu May 15 09:45:33 2014 +0000"
      },
      "message": "am eabc93db: am c4c08803: Merge \"app_process: change app_process a symlink of primary version\"\n\n* commit \u0027eabc93db1020be4b71f0db7d5b5d3a7991f3c264\u0027:\n  app_process: change app_process a symlink of primary version\n"
    },
    {
      "commit": "eabc93db1020be4b71f0db7d5b5d3a7991f3c264",
      "tree": "55afbba6f2ef664c708013aa6233fe580526184b",
      "parents": [
        "c0f18b9d0cce0c140b1274055faabff732f1e27c",
        "c4c08803a8cc090aa27720e97df342231e8433af"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu May 15 09:41:40 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu May 15 09:41:40 2014 +0000"
      },
      "message": "am c4c08803: Merge \"app_process: change app_process a symlink of primary version\"\n\n* commit \u0027c4c08803a8cc090aa27720e97df342231e8433af\u0027:\n  app_process: change app_process a symlink of primary version\n"
    },
    {
      "commit": "559484ed6a3ed98980579e35d12543be2835aa35",
      "tree": "85168a027a7d7d333488e69da6337016d82c14e6",
      "parents": [
        "b7d7cbc9c3a9315a5c5ecd85e16f5916c4bc3f3a"
      ],
      "author": {
        "name": "Yongqin Liu",
        "email": "yongqin.liu@linaro.org",
        "time": "Tue May 06 23:30:40 2014 +0800"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed May 14 18:48:42 2014 +0100"
      },
      "message": "app_process: change app_process a symlink of primary version\n\nChange app_process to be a symlink to the primary version\nand have app_process32/app_process64 be the 32-bit/64-bit\nversions respectively.\n\nThis will make it possible to use the primary zygote for\nam/pm commands and other scripts that use app_process and\ndon\u0027t need a specific zygote.\n\nSigned-off-by: Yongqin Liu \u003cyongqin.liu@linaro.org\u003e\nChange-Id: Ibef545994eb95ddc82101c95df613ad1d06345e6\n"
    },
    {
      "commit": "7b81602f3c18df8a4ca0342c514af8f7e394c0d7",
      "tree": "eab3e4610cff0db0745e151cfacc780ae713b306",
      "parents": [
        "4ddebf7f5b85d082c56f6a8aad11bd0c5ca68fde"
      ],
      "author": {
        "name": "Robert Greenwalt",
        "email": "rgreenwalt@google.com",
        "time": "Fri Apr 18 15:25:25 2014 -0700"
      },
      "committer": {
        "name": "Lorenzo Colitti",
        "email": "lorenzo@google.com",
        "time": "Wed May 14 03:56:34 2014 -0700"
      },
      "message": "Enabling internal msg apis\n\nNetworkFactory and NetworkAgent.  First trying with wifi and\ngetting rid of WifiStateTracker.\n\nConflicts:\n\tapi/current.txt\n\tservices/core/java/com/android/server/ConnectivityService.java\n\nChange-Id: I7f0ec13d7d8988b32f3c6dc71f72012f3349fe02\n"
    },
    {
      "commit": "b6c04899e1ed614985d638b55dafe2c20e7b673a",
      "tree": "66efba07adcb948d6a14af641bb1457b8719913d",
      "parents": [
        "fd30a0e7b747eb4b781ef8def3008626f14eddfe",
        "c8a045d451522adab5226b0063f3a15d34542bf7"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu May 01 10:43:23 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu May 01 10:43:23 2014 +0000"
      },
      "message": "am c8a045d4: am 41f40581: Merge \"Fix x86 build in app_process.\"\n\n* commit \u0027c8a045d451522adab5226b0063f3a15d34542bf7\u0027:\n  Fix x86 build in app_process.\n"
    },
    {
      "commit": "fd30a0e7b747eb4b781ef8def3008626f14eddfe",
      "tree": "156b42f9d38003eabb8150c1e3e117d247f5b2b3",
      "parents": [
        "6c2e806200dc1a422aa681bfd78aae1eb8f1d508",
        "ff34f6faaad21f5f72decc0b6a0bbde8dab68e29"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu May 01 10:43:19 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu May 01 10:43:19 2014 +0000"
      },
      "message": "am ff34f6fa: am 27b03e62: Merge \"Create arch specific cache dirs during zygote startup.\"\n\n* commit \u0027ff34f6faaad21f5f72decc0b6a0bbde8dab68e29\u0027:\n  Create arch specific cache dirs during zygote startup.\n"
    }
  ],
  "next": "c8a045d451522adab5226b0063f3a15d34542bf7"
}
