)]}'
{
  "log": [
    {
      "commit": "c02f304c3a1dc45a7e44b9f91b38c62353850d30",
      "tree": "dd8f7c195ddee7cc64d0ef9debd04dfebd00e719",
      "parents": [
        "057df69e83ef7d53bcf6d6df96a0a460d231696e",
        "58b699c366dea7abc26f34c1e5f1cc6031c04e23"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Nov 25 17:39:16 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Nov 25 17:39:16 2014 +0000"
      },
      "message": "am 58b699c3: am 636baa0d: Merge \"Introduce revision codes for split APKs.\" into lmp-mr1-dev\n\n* commit \u002758b699c366dea7abc26f34c1e5f1cc6031c04e23\u0027:\n  Introduce revision codes for split APKs.\n"
    },
    {
      "commit": "88d2a3c0e1b4a8c53a489db5d627beb80b1b9957",
      "tree": "18761183dea3ba5e0c63283feb938934a3454294",
      "parents": [
        "4dfce43e976a294b3b575564c855214a8e5cef58"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Nov 22 16:49:34 2014 -0800"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Nov 24 12:13:11 2014 -0800"
      },
      "message": "Introduce revision codes for split APKs.\n\nApps delivered as multiple split APKs must have identical package\nnames, version code, and signatures.  However, developers may want\nto iterate quickly on a subset of splits without having to increment\nthe version code, which would require delivery of the entire app.\n\nThis change introduces \"revision codes\" which can vary between\nsplit APKs belonging to the same app.  An install is valid as long\nas the normal version code is identical across all splits.  Splits\ncan be added/removed to an app over time, but if a split is present\nacross an upgrade the revision code must not decrease.\n\nSince system apps could have been updated with splits, only revert\nto the built-in APKs if the version code is strictly greater than the\ndata version.  Also fix bug to enable inheriting from system apps\nwhen adding splits.\n\nBug: 18481866\nChange-Id: I34d8e14c141a8eb95c33ffe24b4e52d6af5c8260\n"
    },
    {
      "commit": "423ba098bd6ed9e90fa3f940b58c5c058c6cbee8",
      "tree": "322c55bc949858f36e60ed050747f62e4fdbc5b9",
      "parents": [
        "0626ec58243c9dc7f4812a453ef9456b1f7ff1f4"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 10 20:00:25 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Nov 13 15:25:34 2014 -0800"
      },
      "message": "Frameworks/base: Wall Werror in packages\n\nTurn on -Wall -Werror in packages/. Fix warnings.\n\nChange-Id: I4ec7256a7df46017e1895575719f2b5aca978bd0\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": "bb7b7bea19223c1eba74f525c7fe87ca3911813b",
      "tree": "9477730dcb2db25d345a9845188b48a01647446c",
      "parents": [
        "80030f90b61cc5479382264966bf1b7bf66f10c8"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Aug 19 16:18:28 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Aug 20 12:47:27 2014 -0700"
      },
      "message": "More progress towards split APKs in ASECs.\n\nTeach DefaultContainerService to install split APKs, which will be\nneeded when moving to/from ASECs.  Also support forward locking for\ntesting purposes, even though its deprecated.\n\nMove native library unpacking code to NativeLibraryHelper location\nwhere it can be shared by both DCS and PMS.  Also update footprint\ncalculation logic to mirror the later unpack codepaths.\n\nImmediately persist sealed sessions.  When resolving install\nlocations, prefer location of any existing install of that\npackage.  Lightweight parse requesting certificates now always\nverifies that all contents are signed correctly.\n\nBug: 16514385\nChange-Id: Ida1c4eb0f95b065104dd971e19126d4085ebf1f0\n"
    },
    {
      "commit": "742e790294b3441b79f715fe447069b63c6065db",
      "tree": "68ac792721f920e154e26f56c1d14b3ee01ba18d",
      "parents": [
        "2aaed141fa22b235ecbd009b11c426abfa5b847c"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Aug 16 19:09:13 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Aug 18 15:52:24 2014 -0700"
      },
      "message": "Progress towards staging ASECs.\n\nMove location selection logic into shared PackageHelper location,\nand share it between DCS and PackageInstaller.  Fix bugs related to\ninstalled footprint calculation; always count unpacked native libs.\n\nHave PMS do its own threshold checking, since it\u0027s fine to stat\ndevices.  PMS only ever deleted staging ASECs, so move that logic\ninto installer and nuke unclaimed staging ASECs.  Allocate legacy\nASEC names using PackageInstaller to make sure they don\u0027t conflict\nwith sessions.\n\nStart wiring up session to allocate ASEC and pass through staged\ncontainer for installation.\n\nFix bug to actually delete invalid cluster-style installs.\n\nBug: 16514385\nChange-Id: I325e0c4422fc128398c921ba45fd73ecf05fc2a9\n"
    },
    {
      "commit": "50af6d7ae646189c44c642717d24c1d1269e1134",
      "tree": "33db43be2f0a3fb627a7da48e8d4be5b2b199715",
      "parents": [
        "7b41467704f941b11af6aace3e40993afc7f6c6f"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Sat Jul 19 13:05:12 2014 -0700"
      },
      "committer": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Sat Jul 19 13:05:12 2014 -0700"
      },
      "message": "Remove deprecated locales - DO NOT MERGE\n\nChange-Id: Iac5489639edae2373ed0ce92f7d0fe22629a249a\n"
    },
    {
      "commit": "ff110bd61a69f7ed8602ae14b27f7befec76b2e7",
      "tree": "952fc963ae155edfc6f781611ee3dd1b68d3a071",
      "parents": [
        "3e9090524a9a2ba686d2c115ee8c65a8d379be12"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri Jul 04 18:30:45 2014 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu Jul 10 17:16:14 2014 +0100"
      },
      "message": "Multi-arch application installs.\n\nEach application now has two ABIs, the primary\nand the secondary. The app is always launched with\nthe primary, but the secondary might be used by other apps\nthat load the given applications code. This implies we\nmust:\n\n- dex2oat the app both ways.\n- extract shared libraries for both abis.\n\nThe former is relatively straightforward but the latter\nrequires us to change the layout for shared libs that we\nunpack from applications. The bulk of this change deals\nwith the latter.\n\nThis change continues to fill in nativeLibraryPath during\nscans for backwards compatibility. This will be removed in\na future patch.\n\nChange-Id: Ia943dd11ef815c5cbfc60f17929eaa2a652a385a\n"
    },
    {
      "commit": "d746057f2414cba2bdc69257cc5be8cb681bb592",
      "tree": "d25c88f1e3e5406bdb3fa149df0cb596602a302f",
      "parents": [
        "255edb556e289a53d1c62a700028c25dab90010e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Jul 06 20:44:55 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jul 08 00:38:57 2014 -0700"
      },
      "message": "Change new file installs to be cluster-based!\n\nNow that all the other pieces are in place, we\u0027re ready to start\ninstalling new file-based packages as a cluster (the new unified\ndirectory-based layout).  This greatly simplifies the renaming\nprocess.\n\nAlso add helper methods to ApplicationInfo to give a much clearer\nmapping between it and internal field names, since we can\u0027t change\nthe public API.\n\nAdd recursive restorecon().\n\nBug: 14975160\nChange-Id: I72a63c5ddbc594c2fec4a91dd59f73ef253fbfd7\n"
    },
    {
      "commit": "8ca00fc68ebc6b8943e51773f4aaec82db58c79d",
      "tree": "66ca4bff82f551ff1a521c9bef26cff6fa28fa8c",
      "parents": [
        "374c4b83ae3277430763ad88e3786741bdcd5623",
        "9de2621072ba2cf18cb528c8fd2609adc73dd7cb"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Sun Jul 06 18:08:24 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 02 18:50:12 2014 +0000"
      },
      "message": "Merge \"Import translations. DO NOT MERGE\""
    },
    {
      "commit": "9de2621072ba2cf18cb528c8fd2609adc73dd7cb",
      "tree": "6c584565e9855548c5869076ac2f2764cc4d1d1f",
      "parents": [
        "ad46ffef4b88e533cc2e67f132b74d1b90df72df"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Sat Jul 05 15:14:46 2014 -0700"
      },
      "committer": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Sat Jul 05 15:14:46 2014 -0700"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: I7a8d4c4a5758261843535c247ceaf20c3d57e257\nAuto-generated-cl: translation import\n"
    },
    {
      "commit": "be520fba1e45c77ca20eb66005a0cf19e10939a1",
      "tree": "d08aaf3c60d405b46502b60af9ecc169c20ff415",
      "parents": [
        "0c54798aac8a86fed24b14a66f09797d58ad0399"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jul 04 18:23:17 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Jul 05 19:16:53 2014 -0700"
      },
      "message": "Teach DCS about cluster packages.\n\nFor the time being, DCS is going to still be doing heavy lifting for\nsome install tasks, so it need to know how to handle both monolithic\nand cluster packages.  This change is mostly plumbing work to\neventually handle any various splits APKs that we may encounter.\n\nBug: 14975160\nChange-Id: I39848d5666f9083cb4eca493e5cdaa868f3f99fb\n"
    },
    {
      "commit": "0c54798aac8a86fed24b14a66f09797d58ad0399",
      "tree": "087a4fa0fc86f65a26d72adcb3b8de2ad5cd765f",
      "parents": [
        "73767b9d607d99b3a027619b5c6b7f1a09b7673d"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Jul 05 15:46:38 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Jul 05 15:49:07 2014 -0700"
      },
      "message": "Start removing ContainerEncryptionParams.\n\nThe new PackageInstallerSession APIs will allow installers to deliver\nbits directly into system protected storage, so we no longer need\nencrypted containers.\n\nChange-Id: I8b598cb149b7dfd1d41e6626c1359610a573edf1\n"
    },
    {
      "commit": "73767b9d607d99b3a027619b5c6b7f1a09b7673d",
      "tree": "4906ccdb54022a1a0b47950c5cb0546c585c75c0",
      "parents": [
        "9810f39717f3625222af9d710f7d8f5acca28449"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jul 04 20:18:13 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jul 04 21:00:33 2014 -0700"
      },
      "message": "Extract native code from split APKs.\n\nIn the new split APK world, multiple APKs work together to define a\nsingle package.  This means that native code may be split among those\nAPKs.  To handle this, extend NativeLibraryHelper to examine all\nAPKs in a package ordered by splitName.\n\nA package has valid native code as long as one matching ABI is found\ninside.  The \"best\" ABI found across all APKs is picked for the\nentire package.  No attempt is made to ensure that every native\nlibrary defined is available for the picked ABI; that\u0027s the\nresponsibility of the installer.\n\nRe-introduce PackageLite to represent a lightweight parsing of an\nentire package, which may be a single monolithic APK or a cluster\nof one or more APKs.\n\nRemove native code extraction from InstallerSession, since it\u0027ll be\nhandled inside PMS for this release.\n\nBug: 14975160\nChange-Id: I4f4db0f82e88a46101c7777499ebc0a11fd911f9\n"
    },
    {
      "commit": "57dcf5b177b56195421535938544f32d8b591b42",
      "tree": "602931c441094568468a898c6209ce457f9ae53b",
      "parents": [
        "6ee242a58c659738a58986a1c7573eb019a42ad5"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jun 18 17:46:05 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jul 02 19:03:54 2014 -0700"
      },
      "message": "Slow progress towards APK clusters.\n\nDifferentiate between \"split APKs\" and \"cluster packages\".  A cluster\npackage is a directory containing zero or more APKs (base+splits),\nand a monolithic package is a single APK (base).\n\nPackageSetting will use the directory name as its codePath, so track\nthe baseCodePath separately.  Clarify documentation in several\nplaces.\n\nRequire that all installers provide file:// URIs through existing\nhidden APIs; PackageInstaller hasn\u0027t been able to read content://\nURIs for a long time.\n\nBug: 14975160\nChange-Id: I1c6fed1b55205c2474b09871161a98a26669d22e\n"
    },
    {
      "commit": "cef0b39b9211882f59b6bfe1148e2cd247056693",
      "tree": "03394664c25a7981063b558a76936278f8f4ea4f",
      "parents": [
        "160a6e5b99de15ce755e2e5521dce32d81ab180a"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu Jun 12 17:19:43 2014 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed Jul 02 12:43:52 2014 +0100"
      },
      "message": "Fix native crashes when APKs can\u0027t be opened.\n\nThere was lax / incomplete error checking around the\nconstruction of Apk handles. This change changes the ApkHandle\nAPI and makes it throw IOException if the zipfile couldn\u0027t\nbe opened.\n\nAdditionally :\n- Fix a resource leak in DefaultContainerService\n- Report errors correctly during package moves.\n\nbug: 15563874\n(cherry picked from commit ec4516470d7ce6e47769591d678c838bd3f6f388)\n\nChange-Id: Ia35b464355467d0d36faf34fae85acbbab3f2896\n"
    },
    {
      "commit": "167f20bfdf28a870e19ddc6276ed6d78746f599c",
      "tree": "b8792275ae8e8935531e448429e88fa22266e4c2",
      "parents": [
        "eb5b366411d79fd194bc931ee3604f6e812cc048"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Sun Jun 29 22:18:19 2014 -0700"
      },
      "committer": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Mon Jun 30 14:36:19 2014 +0000"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: I535470c423b374d61cdd11ded404f8f80e94af74\nAuto-generated-cl: translation import\n"
    },
    {
      "commit": "275e085d5a42ced54bb79e40ff76c77539e7d82d",
      "tree": "4de6a262ffb6132f0387b44c582e26dfea02e6b7",
      "parents": [
        "b593539faf6b27c7c631c9286a442b01c25848ab"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jun 17 18:18:49 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jun 18 16:04:13 2014 -0700"
      },
      "message": "Stronger PackageParser contract, more split work.\n\nRequire that method callers always provide relevant paths, instead of\nrelying on constructor.  Move DisplayMetrics to be an overall parser\nparameter, and move PARSE_TRUSTED_OVERLAY to flags.\n\nParse split APKs and apply deterministic ordering based on split\nnames.  Assert consistent package name and version code across all\nsplit APKs in a package, and enforce unique split names and required\nbase APK.\n\nCollect certificates for split APKs, enforcing they\u0027re all signed\nconsistently.  Better flow control and resource cleanup when\ncollecting certs.  Refactor validation code so it\u0027s easier to reason\nabout.  Cleaner maintenance of read buffer when draining stream\ncontents.\n\nChange-Id: I8bc8c62095fbb933227b9e76ad8771f4b1246fe8\n"
    },
    {
      "commit": "c4858a2ba972e86436d629c4d3f18eb49116de14",
      "tree": "39a0881ce85d09ddd277f050c28f0d3cba07df7d",
      "parents": [
        "b87de28f50e9f02a365f35348f8da6cc2629bc1c"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jun 16 10:51:20 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jun 16 13:20:18 2014 -0700"
      },
      "message": "Switch PackageParser to reference single path.\n\nIt previously kept mPath separate from mScanPath for some very odd\nedge cases around moving apps-on-SD.  This changes it to always use\na single path, refactors moving to keep separate paths.\n\nRefactors method names in PackageParser to be clearer about their\nAPK-versus-package relationship.\n\nBeginnings of a split package parser.  Instead of requiring that\ncallers check error codes when null, switch to always throwing on\nparse errors, to require that callers deal with the error.  Longer\nterm the entire parser should switch to this style, but its too\npervasive for a simple refactoring.\n\nChange-Id: If071d8e55e46e56cc201fadfb51cb471713ae973\n"
    },
    {
      "commit": "2cbc51f5ac5d726c5306e9af8bc2f82f87b75189",
      "tree": "c9f934a927907f5a3711d3b88e8b89c97d68450f",
      "parents": [
        "c32a244e907719e03d0fae42b20401dcd2c595fc",
        "00e3c58d0232952bdcafd02f71e6c9fb00b4d248"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jun 03 14:11:55 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 03 14:11:55 2014 +0000"
      },
      "message": "am 00e3c58d: am 73f7cd98: Merge \"Fix build.\"\n\n* commit \u002700e3c58d0232952bdcafd02f71e6c9fb00b4d248\u0027:\n  Fix build.\n"
    },
    {
      "commit": "c32a244e907719e03d0fae42b20401dcd2c595fc",
      "tree": "6aa66d59b39ddf1a1e378fb60473a6b011dc4398",
      "parents": [
        "5770f2bfab686bd455d5999a76eed7d16098f453",
        "dd2e9d3386d2d74f99f79bcad951ff5cdefa6fab"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jun 03 13:58:35 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 03 13:58:35 2014 +0000"
      },
      "message": "am dd2e9d33: am 7cb13f8a: Merge \"Scan for renderscript files before deciding ABIs.\"\n\n* commit \u0027dd2e9d3386d2d74f99f79bcad951ff5cdefa6fab\u0027:\n  Scan for renderscript files before deciding ABIs.\n"
    },
    {
      "commit": "26c6c03196be0248f3cf3e71383d89268f645bf5",
      "tree": "5966c3cbdced5a093094ef469a142f88778d15b3",
      "parents": [
        "7cb13f8a0a40f3d971a953b330f38bfcfb001c5e"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jun 03 14:54:36 2014 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jun 03 14:54:52 2014 +0100"
      },
      "message": "Fix build.\n\nBad resolution of a manual rebase.\n\nChange-Id: I56d4c7a343c8fd7a715f983b2db15767849f9af7\n"
    },
    {
      "commit": "d47e38b6342fea93b007319431634a4bcfee452c",
      "tree": "4f6365ddf8421fbe2c4238d26ab53d005cc0976e",
      "parents": [
        "7ed98c43f8cbcfbb4862205a72455ab39359a011"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri May 16 16:45:56 2014 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jun 03 12:58:35 2014 +0100"
      },
      "message": "Scan for renderscript files before deciding ABIs.\n\nThe presence of \".bc\" files in an APK implies\nincompatibility with any of the 64 bit ABIs.\n\nbug: 14900093\n\nChange-Id: I66ca339a9a149cb3b7e7b349033d80acdeb4140a\n"
    },
    {
      "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": "6431d11cd420536aaa9d93ae510a3151ccc4df1d",
      "tree": "880f75d4410e2a8cd8c1edf29297b8b14b561669",
      "parents": [
        "032c5c054c331b63f2d45ee9c497ac852faec633"
      ],
      "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:11:47 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\nChange-Id: Icb1528c0cd35b1aa9323386cb35ff4aaba374fcb\n"
    },
    {
      "commit": "f982274db91685e279aea67e510c1401bb465c61",
      "tree": "1ab44ecd8e7c6fc4355a40f191c3de6058ad064c",
      "parents": [
        "1fcc3b18969815ab1a386823fa246f483465dd04"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Tue May 20 09:08:39 2014 -0700"
      },
      "committer": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Tue May 20 09:08:39 2014 -0700"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: If356617f03ddecc5b3512f53e4061887c9e74bb0\nAuto-generated-cl: translation import\n"
    },
    {
      "commit": "d9e61018626d3fedc6ab6169d5ad0d228bd71128",
      "tree": "513e8a39ae4c18e05bfe4a1fd276ecf9c623c9f3",
      "parents": [
        "8f6278df67a445ad33bed417a4fd69debe8f0ee1",
        "10596fbcce710a76ffc7e917400df13af5c2ebcb"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 28 21:22:01 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Apr 28 21:22:01 2014 +0000"
      },
      "message": "am 05678e17: resolved conflicts for merge of 3ce4f3d0 to master\n\n* commit \u002705678e17e8c079a1c1c144e23e40a7a644a0b040\u0027:\n  Track libcore.os\u0027 move to android.system.\n"
    },
    {
      "commit": "10596fbcce710a76ffc7e917400df13af5c2ebcb",
      "tree": "a4cee8efb6d7ea955252f5d985a4c155bd6eede4",
      "parents": [
        "b609ea3884c27e95d530905e458b407acebddb5b",
        "3ce4f3d0af8b20f915631ab927aafa76a6105135"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 28 13:53:25 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 28 13:53:25 2014 -0700"
      },
      "message": "resolved conflicts for merge of 3ce4f3d0 to master\n\nChange-Id: Id5c5997ad8f801b32e1dbd97413ea42e38c27210\n"
    },
    {
      "commit": "34385d352da19805ae948215e2edbeedd16b7941",
      "tree": "5295ae3854135ea3cb0c57698971ee17f47ea46c",
      "parents": [
        "3f4867f49d6c1932117e3519ce10d11f37829f19"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 28 11:11:32 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 28 11:11:32 2014 -0700"
      },
      "message": "Track libcore.os\u0027 move to android.system.\n\n(This is partial, but should cover everything in AOSP master except\nfor the zygote.)\n\nChange-Id: I1042c99245765746a744c44e714095cb2c6cb75d\n"
    },
    {
      "commit": "6b5a2f97b7165f54ab64c22d304cb09d26195d3f",
      "tree": "64bff87df390864f0021ce2ceb08b90edaba8c0d",
      "parents": [
        "b6e0e1228bfd38f5ba971194afc5c31d99980fa1"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Wed Apr 23 12:12:46 2014 -0700"
      },
      "committer": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Wed Apr 23 12:12:46 2014 -0700"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: Ic8c5ae13c6ed3ad711170586a245452195c6d963\nAuto-generated-cl: translation import\n"
    },
    {
      "commit": "38250d9b845ff95f2abb7daa747e267cd0dba77d",
      "tree": "3c64e4743eac6e7995cf1c9dd055c542dfb45184",
      "parents": [
        "90840ec29dec173f5fbc8197bcf1889bde5bd262"
      ],
      "author": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Thu Apr 17 18:14:50 2014 -0700"
      },
      "committer": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Fri Apr 18 16:39:47 2014 -0700"
      },
      "message": "Use LOCAL_JNI_SHARED_LIBRARIES to install JNI libs.\n\nChange-Id: Ibef01983891377b859d28cff801f48ef5d8eabb2\n"
    },
    {
      "commit": "56f43240f920ca64173c156cccc055e16c88e192",
      "tree": "267637402e1a474bc89c3f1e59729bc0621b949d",
      "parents": [
        "ddd4a9b9c329274d56a72d84f11dc0148215c406"
      ],
      "author": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Thu Apr 17 18:14:50 2014 -0700"
      },
      "committer": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Thu Apr 17 18:14:50 2014 -0700"
      },
      "message": "Use LOCAL_JNI_SHARED_LIBRARIES to install JNI libs.\n\nChange-Id: Ibef01983891377b859d28cff801f48ef5d8eabb2\n"
    },
    {
      "commit": "d11f223c535ed9ce628fe5aaf0fd5692dd0cf9e4",
      "tree": "433adc8269acd26f88e47207e35df63d77662409",
      "parents": [
        "e5e8444ce864e7ac5d07308b9a5c5ca2caaa4e0a",
        "286a247e4c8fcecb59636f668678d24e33142744"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu Apr 10 10:37:17 2014 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu Apr 10 10:38:31 2014 +0100"
      },
      "message": "resolved conflicts for merge of 286a247e to master\n\nChange-Id: I63df9d482da3ce2ac851959223b9180020ffad0c\n"
    },
    {
      "commit": "1378aba7aeeb7f6dd6cc2503968ba7b0e58d9333",
      "tree": "7c69781ce86ea7fcf88775cb514a49a7824898f9",
      "parents": [
        "a6f5e79dd182b05909fa53109e74638afcd7ee12"
      ],
      "author": {
        "name": "Ramin Zaghi",
        "email": "ramin.zaghi@arm.com",
        "time": "Fri Feb 28 15:03:19 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed Apr 09 17:16:40 2014 +0100"
      },
      "message": "Re-implement native library search and copies.\n\nWe now use a two step approach :\n\n- First we look through the list of shared libraries in an\n  APK, and choose an ABI based on the (priority)  list of ABIs\n  a given device supports.\n- Then we look through the list of shared libraries and copy\n  all shared libraries that match the ABI we\u0027ve selected.\n\nThis fixes a long-standing bug where we would sometimes copy\na mixture of different ABIs to the device, and also allows us\nto clearly pick an ABI to run an app with.\n\nThe code in NativeLibraryHelper has been refactored so that all\nfile name validation \u0026 matching logic is done in a single place\n(NativeLibrariesIterator). This allows us to avoid a lot of\nredundant logic and straightens out a few corner cases (for eg.\nwhere the abi determination \u0026 copying logic do not agree on\nwhat files to skip).\n\nbug: https://code.google.com/p/android/issues/detail?id\u003d65053\nbug: 13647418\n\nChange-Id: I34d08353f24115b0f6b800a7eda3ac427fa25fef\nCo-Authored-By: Zhenghua Wang \u003czhenghua.wang0923@gmail.com\u003e\nCo-Authored-By: Ramin Zaghi \u003cramin.zaghi@arm.com\u003e\nCo-Authored-By: Narayan Kamath \u003cnarayan@google.com\u003e\n"
    },
    {
      "commit": "38bae539f8208be542474eb05ab635cc9c0f3bdd",
      "tree": "d8b10476f9ba69142cf8bc868b10b993b483b255",
      "parents": [
        "3732f8d078b69b76461a50ce7a5fa8c9a1a61a42"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Mon Dec 09 13:55:11 2013 -0800"
      },
      "committer": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Mon Dec 09 22:41:12 2013 +0000"
      },
      "message": "Remove deprecated locales\n\nBug:11340849\nChange-Id: Ib99486303927a6bce308b113d70f8e5b5bce4a13\n"
    },
    {
      "commit": "6090995951c6e2e4dcf38102f01793f8a94166e1",
      "tree": "37f32f4b269fc26a18e3249a18459a476c473266",
      "parents": [
        "266f48cc042dda828109eb135088cdb6f0f7c1d5"
      ],
      "author": {
        "name": "John Spurlock",
        "email": "jspurlock@google.com",
        "time": "Tue Nov 19 16:54:46 2013 -0500"
      },
      "committer": {
        "name": "John Spurlock",
        "email": "jspurlock@google.com",
        "time": "Wed Nov 20 11:31:47 2013 -0500"
      },
      "message": "Remove unused imports from frameworks/base.\n\nChange-Id: Ia1f99bd2c1105b0b0f70aa614f1f4a67b2840906\n"
    },
    {
      "commit": "27b7534f8edfc6bcf4568e56a5c48e4b444fd4ff",
      "tree": "18b1ebf000a72f394dbef79ef2c94e060b24433e",
      "parents": [
        "a31d3fa2935637fe98ddbdd2a9e409e146d21959"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Wed Aug 28 18:32:51 2013 -0700"
      },
      "committer": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Wed Aug 28 18:32:51 2013 -0700"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: I6b9b8488aabcd5c903c1fa32b66b04d9b29101ac\nAuto-generated-cl: translation import\n"
    },
    {
      "commit": "6dbfa15f980bd141ae764214c1754ebe06347714",
      "tree": "ed28ef7795071517b16e84b55c584288684abfda",
      "parents": [
        "b48c6885c589dcf43ad5064b7207d6690850363f"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Mon Aug 26 09:50:53 2013 -0700"
      },
      "committer": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Mon Aug 26 09:50:53 2013 -0700"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: I626a2582ed52cc4fe4c45d52c6f15527e1d5715e\nAuto-generated-cl: translation import\n"
    },
    {
      "commit": "f27b037012498793cf639b634cf1b53c73d5ecab",
      "tree": "b40b48fa31c9d66bf47491bd425c7f5ac6eb115f",
      "parents": [
        "938326721d11efe0cc41efc2420892cd81995acb"
      ],
      "author": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Mon Aug 19 08:20:40 2013 -0700"
      },
      "committer": {
        "name": "Baligh Uddin",
        "email": "baligh@google.com",
        "time": "Mon Aug 19 08:20:40 2013 -0700"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: Ifff3fa5dd9cfb5a7f3fc84f4cf14ffa42446fbe0\nAuto-generated-cl: translation import\n"
    },
    {
      "commit": "7f392defccfae54dc8169e5ad82c2616e0713c8e",
      "tree": "3d647e7c869d6cb60f08c3ddaabff33aa12d4906",
      "parents": [
        "1abdb7123025e52512b2ed7a518f8c754c35f50a"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Aug 11 17:42:17 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Aug 11 17:42:17 2013 -0700"
      },
      "message": "Catch a few extra users of UserEnvironment.\n\nChange-Id: I3112773b72c329893e4118ef1c4f4087d899139e\n"
    },
    {
      "commit": "a7ac8be1f564ad27c0b1f4796b60f3eaaa8dc611",
      "tree": "dacda19d3869843eba29e24e7f07a1b3f8c2918e",
      "parents": [
        "11396cfd6fd03a72569046b02715455ea0bb186d",
        "dff4ec87e7b942b7b4410f639fc74c2cffb386d6"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 11 10:16:46 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jul 11 10:16:46 2013 -0700"
      },
      "message": "am dff4ec87: am e16a21c6: resolved conflicts for merge of 4a59376d to stage-aosp-master\n\n* commit \u0027dff4ec87e7b942b7b4410f639fc74c2cffb386d6\u0027:\n  Track libcore API change.\n"
    },
    {
      "commit": "e16a21c6b4f108813e5f5e00f30e0ff075de504c",
      "tree": "97f03d1ca4030d0925ba82fd41398cf428aef0f8",
      "parents": [
        "fb231fea6cd4dac7323b1df74006b294c3c9bfef",
        "4a59376d5ee031e930e61292ed9e92e96e956724"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 09 15:24:13 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 09 15:25:23 2013 -0700"
      },
      "message": "resolved conflicts for merge of 4a59376d to stage-aosp-master\n\nChange-Id: I0e40180b46dc58781c218b8d382299dab73d49cc\n"
    },
    {
      "commit": "befd0b1bdfb4492425944a1b7fcf6d10eaed9b4c",
      "tree": "b0e6320cc4cfef37271bffea6b859ac3139e3757",
      "parents": [
        "fa42e774bc48c3172023c8c49610baa469c19e39"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 09 14:46:18 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 09 14:46:18 2013 -0700"
      },
      "message": "Track libcore API change.\n\nChange-Id: Ib818a7f21325c5f918bf497033a90d76b25ec9e7\n"
    },
    {
      "commit": "ccbf84f44c9e6a5ed3c08673614826bb237afc54",
      "tree": "854e35665f7754b3b0d1b4aaadc7b4927c3ea9ce",
      "parents": [
        "4ffa23379f95771fcdc63a2e35586b7e2c0b23a5"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed May 08 15:25:41 2013 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Jun 17 12:47:35 2013 -0700"
      },
      "message": "Some system apps are more system than others\n\n\"signatureOrSystem\" permissions are no longer available to all apps\nresiding en the /system partition.  Instead, there is a new /system/priv-app\ndirectory, and only apps whose APKs are in that directory are allowed\nto use signatureOrSystem permissions without sharing the platform cert.\nThis will reduce the surface area for possible exploits of system-\nbundled applications to try to gain access to permission-guarded\noperations.\n\nThe ApplicationInfo.FLAG_SYSTEM flag continues to mean what it is\nsays in the documentation: it indicates that the application apk was\nbundled on the /system partition.  A new hidden flag FLAG_PRIVILEGED\nhas been introduced that reflects the actual right to access these\npermissions.\n\nAt some point the \"system\" permission category will be\nrenamed to \"privileged\".\n\nBug 8765951\n\nChange-Id: I6f0fd9cdb9170e076dfc66d83ecea76f8dd7335d\n"
    },
    {
      "commit": "5adb34f022bdc856e98483579a299f89a3c28d5c",
      "tree": "e771432ae36eaf84e97fe64c73e4bc146a0b919a",
      "parents": [
        "007d4d7040c9b41de584e79ba7dbd15d25f54971"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Apr 25 11:35:12 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Apr 25 11:35:12 2013 -0700"
      },
      "message": "Always close incoming PFD to avoid leaking.\n\nChange-Id: I9559bb1e83c9bf2f9fd2af9c7b0d8b9e3aadc4ae\n"
    },
    {
      "commit": "d685894212e6dbeac1fda4996903c1da115d49a6",
      "tree": "c52d05c78811e79a869afbcdbe55a906e38f2fa1",
      "parents": [
        "9fa49cc3308f6af593d780581121afc3c1d7e046"
      ],
      "author": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Tue Apr 09 21:54:12 2013 -0700"
      },
      "committer": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Tue Apr 09 21:54:12 2013 -0700"
      },
      "message": "Add liblog\n\nBug: 8580410\nChange-Id: I746aa8258866508c3a725d0773faf4518096548f\n"
    },
    {
      "commit": "63d0a067997cecf9c6e97a17852f9b657bbba48e",
      "tree": "f0adf8683e433a706074a5390292fce6df56928e",
      "parents": [
        "02a4cec107f1f07409fd03106b1cde56043894fa"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Mar 01 16:12:55 2013 -0800"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Mar 01 16:36:52 2013 -0800"
      },
      "message": "Improve performance of storage measurement.\n\nWhen calculating directory sizes of data living on emulated external\nstorage, translate the path to use the internal backing data, which\navoids going through the emulation layer.  It carefully retreats to\nthe original path when it runs into trouble.\n\nTesting with a hierarchy of 10 directories deep and 2 directories\nand 10 files wide at each level, this change improves performance\nfrom 5900ms before to 250ms after; over 20 times faster (!).\n\nBug: 8172425\nChange-Id: Ia7365416f091e102bf7345a49f7d7209a22580a9\n"
    },
    {
      "commit": "221d59f723584d316ea225bdaf1bc75cbfd7a794",
      "tree": "8fb340b3273665a86fe5c20d3f64db300bc3a591",
      "parents": [
        "18eeb4574e5a445405e476a4f89a44af02e24cc5",
        "afdd978ccd8d45ac789873dd4cf0ab0dd3f46d20"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Nov 29 14:25:40 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Nov 29 14:25:40 2012 -0800"
      },
      "message": "am afdd978c: am 68e0da7e: Merge \"Quiet down a lot of logging.\" into jb-mr1.1-dev\n\n* commit \u0027afdd978ccd8d45ac789873dd4cf0ab0dd3f46d20\u0027:\n  Quiet down a lot of logging.\n"
    },
    {
      "commit": "40e9f2922cae76ffcbc521481e5be8e80e8744ef",
      "tree": "8eb1822dd2832b729d4b262b616ecc050d9cf266",
      "parents": [
        "ba4ac51823c59152e2167365b81ac56857b6b4d0"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Nov 27 19:12:23 2012 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Nov 27 19:12:23 2012 -0800"
      },
      "message": "Quiet down a lot of logging.\n\nAlso fix a little problem where the USER_STARTED broadcasts\nwere not being sent as ordered broadcasts(!).\n\nChange-Id: I3aa3e0a9b3900967cdd2d115ee103371b0a50c41\n"
    },
    {
      "commit": "58ed5d748c0b9b64845975ef5844ad313de7c3f6",
      "tree": "507af3879bc894eb854712a1fe6c0953805a895c",
      "parents": [
        "9197d170b770f2b87abd0cd0e13dcf71e5a181c2",
        "768d9e1a72ceee7d4a5f608776b87b62d6ce4a04"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 07 11:52:12 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 07 11:52:12 2012 -0800"
      },
      "message": "am 768d9e1a: Merge \"Correct executable bit for source files\"\n\n* commit \u0027768d9e1a72ceee7d4a5f608776b87b62d6ce4a04\u0027:\n  Correct executable bit for source files\n"
    },
    {
      "commit": "3a084af2e90849aaa8beb3a610189e3399c63ea0",
      "tree": "ba4b87d227674fd68f9ea395649fde32778620f0",
      "parents": [
        "9d547d6934f64189e368c0b190fb4cf49c95a557"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 07 10:19:47 2012 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 07 10:27:31 2012 -0800"
      },
      "message": "Correct executable bit for source files\n\nMany media files and source code files were marked as executable in Git.\nRemove those.\n\nAlso a shell script and python script were not marked as executable.\n\nChange-Id: Ieb51bafb46c895a21d2e83696f5a901ba752b2c5\n"
    },
    {
      "commit": "cea3743499f4bb8e5f28a2e57686d7af313169c5",
      "tree": "f762b85645c8e05ab1ad5f322e9f45daa7cffc26",
      "parents": [
        "a3e90798b7ad3ed62e5b31842c699b2f98bd457b"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Oct 18 14:57:33 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Oct 18 17:21:59 2012 -0700"
      },
      "message": "Try to free cache before giving up on install\n\nTry to get installd to free up cache before giving up when there is too\nlittle space free.\n\nBug: 7232123\nChange-Id: Ie3c8ca8dfc190abbb9a29a7baee31f32e9de7d69\n"
    },
    {
      "commit": "625239a05401bbf18b04d9874cea3f82da7c29a1",
      "tree": "b7d6cdc6c51342262763ad251870350759800ed3",
      "parents": [
        "e00d33cf05a111c9be605d3d59db911cd983fcb9"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Sep 26 22:03:49 2012 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 27 16:22:53 2012 -0700"
      },
      "message": "Migrate more Secure settings to Global.\n\nMigrate networking, storage, battery, DropBox, and PackageManager\nrelated Secure settings to Global table.\n\nBug: 7232014, 7231331, 7231198\nChange-Id: I772c2a9586a2f708c9db95622477f235064b8f4d\n"
    },
    {
      "commit": "752cd922f7091dfd5401faf70dc248934a9dbb6d",
      "tree": "687e7c87a3fa71ac84c3fc5db8327d452a7cddc3",
      "parents": [
        "5a370882f87321629f98f6149ac946a57e25dfa8"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Sep 23 16:25:12 2012 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Sep 23 16:44:34 2012 -0700"
      },
      "message": "Always bind to DefaultContainerService as OWNER.\n\nWhen PackageManagerService deals with external storage, always bind\nto DefaultContainerService as USER_OWNER.  This avoids binding to a\nstopped user, which would fail.\n\nBug: 7203111\nChange-Id: I8e303c7558e8b5cbe4fea0acc9a472b598df0caa\n"
    },
    {
      "commit": "dfa45309e09bcdbad877e4e6a6005f348962d64d",
      "tree": "464ef2f255c93afb6c3907c3d3c69c91c3db08d8",
      "parents": [
        "8b29d63d0857337057db707549ef1faed39792fd"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Sep 12 16:25:22 2012 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 13 01:04:15 2012 -0700"
      },
      "message": "Give DefaultContainerService all external storage.\n\nNow we can bind to just one instance of DCS, instead of requiring\none-per-user. This also means we can operate on otherwise-stopped\nusers.\n\nBug: 7003520\nChange-Id: I4881e064ae8942907f6a02c6b868926223455cdc\n"
    },
    {
      "commit": "7767eac3232ba2fb9828766813cdb481d6a97584",
      "tree": "41cc717fb9f11190e9da3dc12d61faf23a22861d",
      "parents": [
        "1552586283f329253edc4786a6cf40c5bb69ea36"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Aug 23 18:25:40 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Aug 24 13:53:13 2012 -0700"
      },
      "message": "Keep track of whether an app is installed for each user.\n\nThis add a new per-user state for an app, indicating whether\nit is installed for that user.\n\nAll system apps are always installed for all users (we still\nuse disable to \"uninstall\" them).\n\nNow when you call into the package manager to install an app,\nit will only install the app for that user unless you supply\na flag saying to install for all users.  Only being installed\nfor the user is just the normal install state, but all other\nusers have marked in their state for that app that it is not\ninstalled.\n\nWhen you call the package manager APIs for information about\napps, uninstalled apps are treated as really being not visible\n(somewhat more-so than disabled apps), unless you use the\nGET_UNINSTALLED_PACKAGES flag.\n\nIf another user calls to install an app that is already installed,\njust not for them, then the normal install process takes place\nbut in addition that user\u0027s installed state is toggled on.\n\nThe package manager will not send PACKAGE_ADDED, PACKAGE_REMOVED,\nPACKAGE_REPLACED etc broadcasts to users who don\u0027t have a package\ninstalled or not being involved in a change in the install state.\nThere are a few things that are not quite right with this -- for\nexample if you go through a full install (with a new apk) of an\napp for one user who doesn\u0027t have it already installed, you will\nstill get the PACKAGED_REPLACED messages even though this is\ntechnically the first install for your user.  I\u0027m not sure how\nmuch of an issue this is.\n\nWhen you call the existing API to uninstall an app, this toggles\nthe installed state of the app for that user to be off.  Only if\nthat is the last user user that has the app uinstalled will it\nactually be removed from the device.  Again there is a new flag\nyou can pass in to force the app to be uninstalled for all users.\n\nAlso fixed issues with cleaning external storage of apps, which\nwas not dealing with multiple users.  We now keep track of cleaning\neach user for each package.\n\nChange-Id: I00e66452b149defc08c5e0183fa673f532465ed5\n"
    },
    {
      "commit": "c32e190ea6da8c9acd8dc1a29a6e8794ecf7d857",
      "tree": "d337fdee137eb4d3f99412547949599045dff095",
      "parents": [
        "4efade8a85d1352d91dcb4f4be2c337223688840",
        "a9c3846194b69f1bfa73066be670c9d77f6dd0d7"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 29 16:23:49 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 29 16:23:49 2012 -0700"
      },
      "message": "resolved conflicts for merge of a9c38461 to master\n\nChange-Id: Ie7044c4f9f15384c3edd328fa8e2932c731d9d5c\n"
    },
    {
      "commit": "183ce028f10442dd6ada59de8fa531d690134663",
      "tree": "bb826af501467e58f564c7bf0675fa4868aba77d",
      "parents": [
        "074b54fbc0b6254c0ba308e0cf2e86c1cc929348"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 29 15:00:21 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 29 15:00:21 2012 -0700"
      },
      "message": "Fix issue #6761130: Clearing app data in settings does not clear app\u0027s USB storage\n\nThe package manager calls to clear data / clear cache were not also\nhaving default container service clear the data on external storage.  Now\nthey do.\n\nChange-Id: Ib5e5eb6adf2cac5a4cc094cc1a02ac8cfb6a2edf\n"
    },
    {
      "commit": "d0a2845ab3a5b7d92d58188764bc04e5a4a16508",
      "tree": "2ad470ae475e57a9581a2489054551a4f08cd1b3",
      "parents": [
        "f6c168942776c1fa700f5da57f844e34de25ddf5"
      ],
      "author": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Thu Jun 21 13:15:26 2012 -0700"
      },
      "committer": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Thu Jun 21 13:15:26 2012 -0700"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: Iad1ec06b30d1e06958ae84f36d860f9ec522135f\n"
    },
    {
      "commit": "9a05cfd1e8a226d13801a74cee873efc7c00afe8",
      "tree": "18b3eb056f30ad2d8fc985a7054c4e9685196c12",
      "parents": [
        "93e417b560a3c7ddb832b78b17982937b4a88a12"
      ],
      "author": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Wed Jun 20 19:58:14 2012 -0700"
      },
      "committer": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Wed Jun 20 19:58:14 2012 -0700"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: Ic0044b2b8a5d2973a6fcc10f947bdf3b47c0bb6d\n"
    },
    {
      "commit": "c801e3ed0bb74606a98802c7e568835f0b1cfb8d",
      "tree": "1b516d0e93887f6fea450fa2f372adb1ab1df330",
      "parents": [
        "5293d0cb2e0689dafd5ed821d479babfa6e008f9"
      ],
      "author": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Wed Jun 20 12:17:27 2012 -0700"
      },
      "committer": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Wed Jun 20 12:17:27 2012 -0700"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: If56cf4c763d2994bfe838b5b9ebab92a585a135b\n"
    },
    {
      "commit": "b8151ecd6ef4faa5c16d0a4c3abb45ec84d1f97a",
      "tree": "18d849f66b9abbe1519eeb2f4901ada5c5a80cbc",
      "parents": [
        "1c1ca050e19b98c21d5b964930c4fc6f0d9ae567"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Apr 18 18:02:48 2012 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Jun 12 18:18:29 2012 -0700"
      },
      "message": "Add an icon to the user information.\n\nStore the icon in the user folder under /data/system,\nsimilar to how the wallpaper is stored.\n\nChange-Id: Id8ccb55b9e2ba7b4c557505a7f69f04eca1518cf\n"
    },
    {
      "commit": "2ace60c1d62ee08499d3c29fee5826f4933824ba",
      "tree": "6d121d25edfcf6b3fbf3cf2d8894eb59aec9cb0d",
      "parents": [
        "092642402807e3eba381c5ed4c1c3661c1a25ba6"
      ],
      "author": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Fri May 25 13:24:26 2012 -0700"
      },
      "committer": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Fri May 25 13:24:26 2012 -0700"
      },
      "message": "Import translations. DO NOT MERGE\n\nChange-Id: Ic32791829a4f220236aacfc5004471894db915a7\n"
    },
    {
      "commit": "a69b7eb1fc6ab6f47411493a17463fe7a43b8b3f",
      "tree": "d62579288a0c7b6575999070a86c2308023fd884",
      "parents": [
        "728e43948c9b4d18a900fa50acad8d2734947b21"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon May 14 14:47:06 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon May 14 15:02:19 2012 -0700"
      },
      "message": "Change thread priority for disk measurement to bg\n\nChange the thread priority for all disk measurement and statfs calls to\nbackground priority.\n\nAlso move the measurement fully into the measurement task since it makes\nmore sense.\n\nBug: 6332097\nChange-Id: Iafc2151313ad9b14117daf67e933dccd32f68d54\n"
    },
    {
      "commit": "103d53005e7a3c2735f4ac76fa9b795a7e7e39d7",
      "tree": "da5b4a423467f932654ca2db1494bd9e34210f58",
      "parents": [
        "a25079e6bafcfd77135a852f0e838738d80606ef"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu May 10 10:21:06 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu May 10 11:48:21 2012 -0700"
      },
      "message": "Use long instead of int for file offsets\n\nUse long instead of int so we don\u0027t run into a 2GB file limit.\n\nFix possible overflows in offset and length.\n\nChange-Id: Idb3a34f5600f9c2372b9c89256f21757049fa43b\n"
    },
    {
      "commit": "ceb1b0bfaea56251796b08c07b963de7403d84eb",
      "tree": "fea73b05f6b4d47da174eca362693958cf5d785a",
      "parents": [
        "476b03b0c0d5cae4d1b114c6f80858d59ba36cad"
      ],
      "author": {
        "name": "Anonymous Coward",
        "email": "nobody@android.com",
        "time": "Tue Apr 24 10:35:16 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon May 07 16:34:49 2012 -0700"
      },
      "message": "Add encryption parameters to package installation\n\nChange-Id: Ic9f8ab9f8110f08bb3c00725cfce5b8ee7b766f3\n"
    },
    {
      "commit": "bf023589b3d9994f43823c7cb0450d278b084f9b",
      "tree": "6ed973d10a584b68efd2efd6654953ab158538c4",
      "parents": [
        "e849230f444653e692024b4321044cb9f6188919"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed May 02 16:56:15 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed May 02 17:09:57 2012 -0700"
      },
      "message": "Fix some problems with ASECs\n\nOn devices that had external storage, permissions weren\u0027t set correctly\non non-forward-locked applications. Also, moving forward locked\napplications didn\u0027t work since DefaultContainerService wasn\u0027t able to\nread it.\n\nFixed some faulty unit tests as well.\n\nBug: 6427212\nChange-Id: I5c1f0bf5278549069c78939f0708c4c43a7d4006\n"
    },
    {
      "commit": "6dceb88f1c7c42c6ab43834af2c993d599895d82",
      "tree": "cbdc33b4dd84f7ad388a4f331c0e7a3056e142e5",
      "parents": [
        "7725180c646d1976a2a2097735862a75ec47c544"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Apr 12 14:23:49 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Apr 25 14:17:02 2012 -0700"
      },
      "message": "Allow forward locked apps to be in ASECs\n\nWe couldn\u0027t put forward-locked apps in ASEC containers before since we\ndidn\u0027t have any permissioned filesystems. This adds the ability for\nforward-locked applications to be in ASEC containers.\n\nThis means that forward locked applications will be able to be on the SD\ncard now.\n\nThis change also removes the old type of forward-locking that placed\nparts of apps in /data/app-private.  Now all forward-locked applications\nwill be in ASEC containers.\n\nChange-Id: I17ae0b0d65a4a965ef33c0ac2c47e990e55707ad\n"
    },
    {
      "commit": "9cbe986a446dffea2e9f59b86800f834b02d766a",
      "tree": "63725587ac50668011a054f82c69f6ddf25b9248",
      "parents": [
        "816e4f758302aaf3b115b5914d48732ed78af946"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Apr 22 18:56:43 2012 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Apr 22 18:56:43 2012 -0700"
      },
      "message": "Expose statfs() through IMediaContainerService.\n\nBug: 6346248\nChange-Id: I03ae02578f546fc9f19652cbdece56e2e0ab6a1c\n"
    },
    {
      "commit": "6215d3ff4b5dfa52a5d8b9a42e343051f31066a5",
      "tree": "fa31802ed64676368447b67d20567fc1e806c79d",
      "parents": [
        "c9c76a82c6d0bf2362044d899013832882f32c94"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Wed Jan 04 20:05:49 2012 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Wed Jan 04 20:05:49 2012 +0000"
      },
      "message": "Rename (IF_)LOGI(_IF) to (IF_)ALOGI(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/156801\n\nBug: 5449033\nChange-Id: Ib08fe86d23db91ee153e9f91a99a35c42b9208ea\n"
    },
    {
      "commit": "2fbd56a652f29e7a54f7aaab25ea031a1f8decb0",
      "tree": "7a7dcc8ec47c29dd12ac55d7912b1e931de6f13a",
      "parents": [
        "fe5f0aae6546ff673a6f01298f427bcd568bdd1a"
      ],
      "author": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Wed Nov 02 09:41:15 2011 -0700"
      },
      "committer": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Wed Nov 02 09:41:15 2011 -0700"
      },
      "message": "Import revised translations.\n\nChange-Id: I71efb16f2c6b257dfd444728c7e56ada662e6f77\n"
    },
    {
      "commit": "b0d150aa53ad34ea0a5b0da74bbdeb9ecd5a46b7",
      "tree": "2370b4dc7c81ff7880e1871a74353e263281bc25",
      "parents": [
        "b5c45e00967b9d0a6411098a598ad6b40f3b2074"
      ],
      "author": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Tue Oct 18 15:03:21 2011 -0700"
      },
      "committer": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Tue Oct 18 15:03:21 2011 -0700"
      },
      "message": "Import revised translations.\n\nChange-Id: I83ab00ec220b7c0ba0d37e7f4c91e945e35aab39\n"
    },
    {
      "commit": "05ca4c90644921df9193d92b2abdc81ef77e4a62",
      "tree": "94c9e61b0c3d364f68a194c0a65199451410fc35",
      "parents": [
        "15bbaeb0753f5336a5e8ee07e6f796657ecefb73"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Sep 15 10:36:25 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Sep 23 16:03:03 2011 -0700"
      },
      "message": "Allow non-required package verifiers\n\n* Verifiers can be specified in the AndroidManifest.xml\n\n* Those verifiers can respond to the new Intent action\n\n* PackageManager API for those verifiers: verifyPendingInstall\n\nChange-Id: I4892bce2e6984871e6e93c60a1ca0dae145f5df5\n"
    },
    {
      "commit": "d2509fd83597595914ef0627685e917380863eb6",
      "tree": "31ae51c4cb2664615c08ceb99f6363b084199cb4",
      "parents": [
        "d61a3a1bed57fc33fb0fa132521746bb58bba6be"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Sep 12 12:29:43 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Sep 12 12:29:43 2011 -0700"
      },
      "message": "Add boot mode where only \"core apps\" are started.\n\nA core app is one that has coreApp\u003d\"true\" in its manifest tag.\n\nThe system can successfully boot (though a little painfully) with\nonly framework-res.apk, SettingsProvider.apk, SystemUI.apk,\nDefaultContainerService.apk, and Launcher2.apk set as core apps.\n\nCurrently this boot mode is always turned off.\n\nChange-Id: Ieaa4a8031c2c391a12996aa8d8b1d65fc2b09d6b\n"
    },
    {
      "commit": "8da527d8435beda54b83e117c718c5d145c94ecd",
      "tree": "801776d718fb5bfb6033756f0cf6cadda7b4ec18",
      "parents": [
        "c3ccfb8eec47cdc0911c35b387d17659af25fbe9"
      ],
      "author": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Mon Aug 22 11:09:13 2011 -0700"
      },
      "committer": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Mon Aug 22 11:09:13 2011 -0700"
      },
      "message": "Import revised translations.\n\nChange-Id: I51335fa15a40d471010dbcc96e228b170f06ce7e\n"
    },
    {
      "commit": "61942c579dd8d30f77a9a501b31bd7a485b0d4bc",
      "tree": "0ae70b82b2f15a3c7789c9318640c17fcc8b766a",
      "parents": [
        "186c1683ce6a6c7e845b06b8c0706ef7950c6608"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Aug 15 12:46:04 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Aug 15 12:46:35 2011 -0700"
      },
      "message": "Fix external size calculations\n\nUnfortunately fixed internal size calculations for HC, but never the\nexternal size calculations.\n\nBug: 5113898\nChange-Id: Idfe8af0ba74a20aa767eb9abac431ee1c74dcf8e\n"
    },
    {
      "commit": "f5121a9b802c6ddd3661ed5cae602380dbe67090",
      "tree": "a1a10eddf61e5e159f0d71a17e2cc47a09856752",
      "parents": [
        "260e9105d7fc7b11c26a6843658df89b98d65971"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Aug 10 16:23:32 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Aug 10 17:00:30 2011 -0700"
      },
      "message": "Better errors from copyResource\n\nCopy resource would fail without a good error code when the file\ncouldn\u0027t be found during copy.\n\nAlso destroy the target container ID during move operations since it\nmight exist. If the copy failed due to it existing, it would get\ndestroyed anyway. This way the user has a chance to have a good outcome\nthe first time.\n\nBug: 3375299\nBug: 5113898\nChange-Id: I00559833f0801bc50e7cc031b462495e37a6b4ab\n"
    },
    {
      "commit": "1ebd74acf9977daa42133507e970dab88e08f0ef",
      "tree": "c95bde1090f19e78201f15b54866ada88ab7cbf2",
      "parents": [
        "62c7b37590b1a692384a55949d3b9eba221a3652"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Aug 03 15:09:44 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Aug 03 16:03:42 2011 -0700"
      },
      "message": "Better error codes for missing files\n\nMake sure that files that don\u0027t exist aren\u0027t returning bogus \u0027out of\nspace\u0027 error codes.\n\nAdd some Javadoc so I can remember what each thing does in an IDE.\n\nAdd copyright header to NativeLibraryHelper\n\nBug: 3375299\nChange-Id: Iac46019160921daca65b21d38897e5165063316e\n"
    },
    {
      "commit": "2efd2dbbac9eac89620683696c6076463c3a1cd6",
      "tree": "ca48adf4208daee43a4444a0fdb61fcb939858c5",
      "parents": [
        "b7d95a46dfacf04896d5b084f13bcbe6eab33633"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Jul 19 16:32:49 2011 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Jul 28 16:01:20 2011 -0700"
      },
      "message": "Support full-backup encryption and global backup password\n\nIf the user has supplied a backup password in Settings, that password\nis validated during the full backup process and is used as an encryption\nkey for encoding the backed-up data itself.  This is the fundamental\nmechanism whereby users can secure their data even against malicious\nparties getting physical unlocked access to their device.\n\nTechnically the user-supplied password is not used as the encryption\nkey for the backed-up data itself.  What is actually done is that a\nrandom key is generated to use as the raw encryption key.  THAT key,\nin turn, is encrypted with the user-supplied password (after random\nsalting and key expansion with PBKDF2).  The encrypted master key\nand a checksum are stored in the backup header.  At restore time,\nthe user supplies their password, which allows the system to decrypt\nthe master key, which in turn allows the decryption of the backup\ndata itself.\n\nThe checksum is part of the archive in order to permit validation\nof the user-supplied password.  The checksum is the result of running\nthe user-supplied password through PBKDF2 with a randomly selected\nsalt.  At restore time, the proposed password is run through PBKDF2\nwith the salt described by the archive header.  If the result does\nnot match the archive\u0027s stated checksum, then the user has supplied\nthe wrong decryption password.\n\nAlso, suppress backup consideration for a few packages whose\ndata is either nonexistent or inapplicable across devices or\nfactory reset operations.\n\nBug 4901637\n\nChange-Id: Id0cc9d0fdfc046602b129f273d48e23b7a14df36\n"
    },
    {
      "commit": "66269ea6f68f2f25888ce1080c94ac782742fafc",
      "tree": "0ecbefcdbecf98cbacd428a422e6a2a846ac726e",
      "parents": [
        "e432a0005180ba9ac2c1d7822c4761b475fddc51"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jul 12 14:14:01 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jul 26 10:14:58 2011 -0700"
      },
      "message": "Move extract native libraries to JNI code\n\nThe built-in ZipFile class was quite a long time to find an unpack\nlibraries. Move everything to using the libutils ZipFileRO class that\ngoes quite a bit faster. Initial measurements are 6 times faster than\nthe Java code.\n\nAlso, read files off the disk and compare their CRC against the APK\u0027s\nCRC to see if we need to write the new file to disk. This also cuts down\nthe bootup time by up to a second per APK that has native files.\n\nChange-Id: Ic464a7969a17368fb6a6b81d026888c4136c7603\n"
    },
    {
      "commit": "6d470b71766303a1b05861fc4ec8941916d4c7ec",
      "tree": "b76efea4c0e79e670e2a333b4e05688afbe33a72",
      "parents": [
        "3106a9b7f5c5c6a62d3fa5772d8c2bb41d22c6eb"
      ],
      "author": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Mon Jun 20 14:40:53 2011 -0700"
      },
      "committer": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Mon Jun 20 14:40:53 2011 -0700"
      },
      "message": "Import revised translations.\n\nChange-Id: Ie30d36d7416f687f2d84b0bdf6547cda96446f37\n"
    },
    {
      "commit": "8447a13f9cdc87b5dbb865ad2d55fe2d6ea87294",
      "tree": "f3dee6702f3efc269f2858398f4fd6f5ebc15ac5",
      "parents": [
        "3453b1c584f456a18f17d74a72c044b4e39c6405"
      ],
      "author": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Thu May 26 15:34:01 2011 -0700"
      },
      "committer": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Thu May 26 15:34:01 2011 -0700"
      },
      "message": "Import revised translations.\n\nChange-Id: I10a93a6f3a274354e88263d86a8855d1e7121f58\n"
    },
    {
      "commit": "d022c23aed0d022057c0074a158b522c83e906e4",
      "tree": "f3ea5813b838aca632dfbaa4cf627f72625b25de",
      "parents": [
        "0e5e2e2b2bb3d6c3a0216181df29e6bfdc71256f",
        "62e1b4e9d41a01db423b5e4684ecf529ed46106d"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Mar 15 14:48:56 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 15 14:48:56 2011 -0700"
      },
      "message": "Merge \"Revise free space checks for package installs\""
    },
    {
      "commit": "62e1b4e9d41a01db423b5e4684ecf529ed46106d",
      "tree": "661d7d6a17fade942bcfb6ff2e3b03292c3e698e",
      "parents": [
        "6f3a75e13b86a3f40fe34e3ebd17b118791a73a4"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Mar 14 17:13:39 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Mar 14 17:18:24 2011 -0700"
      },
      "message": "Revise free space checks for package installs\n\nChange-Id: Ie72bbab77aa89a50ec096edc1f471eab74829e67\n"
    },
    {
      "commit": "3070af08821ee86f06a9cc6b58dbb79c82946b94",
      "tree": "350ed99dcd32f33f936639c946b0176ed6022693",
      "parents": [
        "e3f075622da4e78772abf21a5a219a0d48bc6c04"
      ],
      "author": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Mon Mar 14 14:02:13 2011 -0700"
      },
      "committer": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Mon Mar 14 14:25:59 2011 -0700"
      },
      "message": "frameworks/base: remove LOCAL_PRELINK_MODULE\n\nChange-Id: I54dd62ebef47e7690afa5a858f3cad941b135481\nSigned-off-by: Iliyan Malchev \u003cmalchev@google.com\u003e\n"
    },
    {
      "commit": "300c13a48132f03d48462b9cd3ec41331a71a411",
      "tree": "b784943ca9d8e6988d9e0db62da448b8e9d10441",
      "parents": [
        "26c1ab2e58f47ac94e638f69b9b626cc6b1925b6"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jan 18 13:04:40 2011 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jan 18 13:55:42 2011 -0800"
      },
      "message": "Erase OBB files when removing packages\n\nOBB files on USB storage or SD card should be removed when an\napplication is removed.\n\nBug: 3356804\nChange-Id: Ifbbf043368b125fcd47fd74e5cd2e5167a8deb00\n"
    },
    {
      "commit": "366949c2d934435ff9ef8082408ca36ff14a2241",
      "tree": "5821f9a8976fa55430d071850242604a51259ae9",
      "parents": [
        "3c372789ea0b7836c6a9fe4852fac0de3f29fbbf"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Jan 14 17:18:14 2011 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Sun Jan 16 16:21:15 2011 -0800"
      },
      "message": "Put externalSize measurements in PackageStats\n\nWhen measuring a package\u0027s usage, put the external size in the\nPackageStats as well. This will allow programs using a lot of space on\nthe external card to be held accountable.\n\nBug: 3308791\nChange-Id: If2df07bdbf6ffb31577074fad8f4a87ca4e89086\n"
    },
    {
      "commit": "c16aea5ee8079a3c1fc45e44d296493eddf7e3c1",
      "tree": "3473b5ae49fd86159816511a9a2611924bd2d37c",
      "parents": [
        "68b9f6f90a8e659a3e40a010f8ad46382f0deeb8"
      ],
      "author": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Thu Dec 23 14:12:01 2010 -0800"
      },
      "committer": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Thu Dec 23 14:12:01 2010 -0800"
      },
      "message": "Import revised translations.\n\nChange-Id: Ia6a9c2838156dd6f83aea9c4809c57f663c710af\n"
    },
    {
      "commit": "34e48955a5c02c398872ccf4d544d4fab22132de",
      "tree": "f2dcf4e9f961a7cd8058418c5325532bf5ab84da",
      "parents": [
        "475593e249c53a8dc43f9cd43f528867c6a4074b"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Dec 07 11:56:24 2010 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Dec 07 11:56:24 2010 -0800"
      },
      "message": "DefaultContainerService\u0027s JNI library is required\n\nChange from LOCAL_JNI_SHARED_LIBRARIES to LOCAL_REQUIRED_MODULES to make\nsure the JNI library is built and included when DefaultContainerService\nis built.\n\nChange-Id: I322c72415237c2b70bff345d50e2a9e4f2e6d988\n"
    },
    {
      "commit": "aa183e2c9a279cb6aef7dc77855facfae795b6f8",
      "tree": "9f0a53f90dcfb2e720a5e62e38e357cc98fdabd9",
      "parents": [
        "d8b3f2e8eee5f24de6653a918613674e9495f751"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Dec 02 18:00:38 2010 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Sat Dec 04 08:29:23 2010 -0800"
      },
      "message": "Add measurement API to DefaultContainerService\n\nSystem applications that don\u0027t have \"media_rw\" access need some way to\nmeasure the size of directories on the SD card and other internal media.\nAdd this API to DefaultContainerService so they can simply bind to the\nservice and make an RPC.\n\nBug: 3203974\nChange-Id: I4e1bcd7a1b702b156c011ecc04f6915022cb258a\n"
    },
    {
      "commit": "d09a98173b99852c78c0a14282612836178cc2ab",
      "tree": "1175dd939420a8cade18d3a12051ac117b949826",
      "parents": [
        "cd023f98fab0f01603f006c3029a73cd820b4678"
      ],
      "author": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Thu Dec 02 14:05:29 2010 -0800"
      },
      "committer": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Thu Dec 02 14:05:29 2010 -0800"
      },
      "message": "Rename Indonesian and Hebrew translations to match Locale.java conventions\n\nChange-Id: Icf4f1896d13a4b6bf86503b16bde189f1834fdcc\n"
    },
    {
      "commit": "4da12f07b5c1ecd7cea7f44081a744523936bd41",
      "tree": "d5cd71220a8a0f8912c397a02d12e55f8fee45a0",
      "parents": [
        "a7f76874f5493e6f18be91c1d13e572d68f1dd20",
        "1de6ca69cc541ccdd651071c8bd5629af4e09664"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Dec 01 14:23:19 2010 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Dec 01 14:23:19 2010 -0800"
      },
      "message": "am 1de6ca69: am 938d0972: Merge \"Grant ACCESS_ALL_DOWNLOADS to DefaultContainerService\" into gingerbread\n\n* commit \u00271de6ca69cc541ccdd651071c8bd5629af4e09664\u0027:\n  Grant ACCESS_ALL_DOWNLOADS to DefaultContainerService\n"
    },
    {
      "commit": "1de2eac9d0a9ef03ecf9f964893ca889487f5403",
      "tree": "a071dd240438c42f99961aa1a997f6fa95e0583e",
      "parents": [
        "b483d5cd134cda393824fd8e9c1a5443bd868ae6"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Dec 01 11:37:36 2010 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Dec 01 11:37:53 2010 -0800"
      },
      "message": "Grant ACCESS_ALL_DOWNLOADS to DefaultContainerService\n\nBe compatible with the old DownloadProvider behavior of being able to\noperate on content URIs returned from .insert()\n\nBug: 3242328\nChange-Id: I7dad15ac0fefa867c3c8a33a579fc9899ac80262\n"
    },
    {
      "commit": "113141e0914d36c378c26507b8d9dc0bb634bc8d",
      "tree": "18ae5720f0c146cc49efd51723522266b1bc7c58",
      "parents": [
        "c6aa9edc3658b9e624aa604786d5d70570bca0f7"
      ],
      "author": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Wed Nov 17 16:24:41 2010 -0800"
      },
      "committer": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Wed Nov 17 16:24:41 2010 -0800"
      },
      "message": "Import initial translations for 20 new locales.\n\nChange-Id: I37d479c9d6293eb57d68ad686d00838445a18890\n"
    },
    {
      "commit": "6362b3f077ab8e4662f499c32beb1006c3967f42",
      "tree": "911cc1cb03fac7bc8a0c50579f2f47242325f65e",
      "parents": [
        "820b9e0d3b6f94fe0b524aebf756ce25df273e6a"
      ],
      "author": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Tue Nov 09 17:25:54 2010 -0800"
      },
      "committer": {
        "name": "Eric Fischer",
        "email": "enf@google.com",
        "time": "Tue Nov 09 17:25:54 2010 -0800"
      },
      "message": "Import revised translations.\n\nChange-Id: I9fe6a999fc665faefbf0e7e222d5dfb4fdbcd3b1\n"
    },
    {
      "commit": "e1ff214e32ed5c546a7603b07b054908c4d93312",
      "tree": "d61485a78a33eaedf4494cbdf21e48225d49b4e7",
      "parents": [
        "84e8827a477cdf3d8c2b67e370395b22ec1963ad"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Oct 12 11:20:01 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Oct 12 11:30:56 2010 -0700"
      },
      "message": "Add API to check for emulated external storage\n\nWhen the storage is emulated, we don\u0027t want to install ASEC containers\nto it. This adds the API to check when the external storage is emulated\nand uses it to check whether or not to install packages to the external\nstorage in an ASEC container.\n\nBug: 3024387\nChange-Id: Ia0318aca9e4938a4897deaada5603a4c7c1d0f48\n"
    },
    {
      "commit": "13cc0a06fce4ec54574c9bf2084752961a144c24",
      "tree": "77af62b768870dc45b26c56978f70332fad66d94",
      "parents": [
        "fc32a6023676c2f1b13c890c7295cccad6f0000c",
        "4309b52fe19de5241113d8f9ebcdf52741e086a9"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Sep 30 19:47:06 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Sep 30 19:47:06 2010 -0700"
      },
      "message": "am 4309b52f: am 735de3b3: Hash keys with MD5; track IBinders not IInterface\n\nMerge commit \u00274309b52fe19de5241113d8f9ebcdf52741e086a9\u0027\n\n* commit \u00274309b52fe19de5241113d8f9ebcdf52741e086a9\u0027:\n  Hash keys with MD5; track IBinders not IInterface\n"
    },
    {
      "commit": "735de3b38abbd6564082a819377673ee593744a6",
      "tree": "ec309587616c5abbc49df83d7d21b6a3b3e9dfbd",
      "parents": [
        "27358a69b33eaa268ee75ef778ec824c8085adcc"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Sep 30 14:11:39 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Sep 30 17:25:05 2010 -0700"
      },
      "message": "Hash keys with MD5; track IBinders not IInterface\n\nUsing a plaintext password doesn\u0027t work unless it\u0027s a certain length, so\njust hash the plaintext password with MD5 to make it the right length\nfor the twofish encryption.\n\nTracking the IInterface doesn\u0027t make much sense since it\u0027s different\neach time, so track the IBinder instead. That way we can unlinkToDeath\nthe binder when the last thing it\u0027s holding onto goes away.\n\nChange-Id: Id828d25b4d74f27e9d8b4bfb3909c964469cc473\n"
    },
    {
      "commit": "bff405f91001237ec94ec64f86fa2370c4509559",
      "tree": "c492bfa8bacef42800f47b1638b1812275cecb6d",
      "parents": [
        "e63f20b5fe373822758182226d7512859d8e8356",
        "d8e8186c887fe47977721315f439465771a96374"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Sep 28 18:16:50 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Sep 28 18:16:50 2010 -0700"
      },
      "message": "resolved conflicts for merge of d8e8186c to master\n\nChange-Id: Ica3f6cd958717ea7033cab8b4bf9cd3425c1e1c5\n"
    },
    {
      "commit": "05105f7abe02b2dff91d6260b3628c8b97816bab",
      "tree": "f42676d818548d76b2c55045a1bcc4866d6feec1",
      "parents": [
        "ea2cf2f936b03f1720bc43863e41c89ea2a7903a"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Sep 22 17:29:43 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Sep 28 17:23:26 2010 -0700"
      },
      "message": "Update OBB API to include callbacks\n\nAdd a callback for users of the StorageManager API to be able to receive\nnotifications when the requested operation completes for mountObb and\nunmountObb.\n\nAdd NDK API to get to ObbInfo like the Java API has.\n\nAlso update the docs for the API and remove the \"STOPSHIP\" comments.\n\nChange-Id: I23a4409c7f8b74d3169614beba920b4d667990a4\n"
    }
  ],
  "next": "818c830c59fb8fb0fe7576f1e5a073ab599227c8"
}
