)]}'
{
  "log": [
    {
      "commit": "76da37e1cf5c1381d9ccbaca86463fca52bd40f5",
      "tree": "1f81253db8a6e991f23fc30f5b71f88952100565",
      "parents": [
        "df9dee869c9efa18619b28691c88415b4f115df7"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu May 19 18:25:28 2016 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri May 20 15:04:09 2016 -0700"
      },
      "message": "Performance improvements in AssetManager\n\nChange the implementation of getLocales() to iterate the set of\nconfigurations using a templated method, instead of using the result\nof getConfigurations().\n\nAlso remove the check for AndroidManifest.xml when adding an asset path.\nThis is unneccessary.\n\nBug:28625993\nChange-Id: I16de5da598d0c371421d1dc8eee054dce9baf53a\n"
    },
    {
      "commit": "8ac51d14b614ba6a12df2ba90d50a01f50d548aa",
      "tree": "b2afded5a45d6c5d14569b6691354d1613c1eb81",
      "parents": [
        "b42afe9be02b23c50c0479e93df2a853be7c369a"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue May 10 10:01:12 2016 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue May 10 10:45:52 2016 -0700"
      },
      "message": "Resource shared libraries: fix theme references\n\nTheme values that would reference other theme values would not work\nif they were declared in a shared library.\n\nWe now introduce a parallel resource type to TYPE_DYNAMIC_REFERENCE,\nTYPE_DYNAMIC_ATTRIBUTE, which allows us to lookup and resolve\ntheme value references from shared libraries.\n\nBug:28687378\nChange-Id: I4f2364e3e8b567679f90784fcaaea12b6b05e926\n"
    },
    {
      "commit": "7134ce35406f942dd640a95583430b39e770f0da",
      "tree": "8e20bbd6fcb41e4af7bacc93c4dc08f4a3e08cc9",
      "parents": [
        "5bddeaa9bce6325c900eeabaa6a1cdfaf83910c6"
      ],
      "author": {
        "name": "Shammi Khattar",
        "email": "skhattar@codeaurora.org",
        "time": "Wed Apr 06 15:33:03 2016 -0700"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu Apr 28 15:07:34 2016 +0000"
      },
      "message": "ZipUtils: Fix wrong timestamps when getEntryInfo\n\n\"tm_mon\" format should align with \"ZipEntry::setModWhen\" in aapt.\n\"tm_isdst\" should be initialized, or it will because random value\nand cause error in function mktime().\n\nBUG:28021145\n\n(cherry picked from commit bb0eb3f4cb33c077b296a18555a9a1a966ff696b)\n\nChange-Id: Ia39cf63fcd4bb39c24af080562960279106f526c\n"
    },
    {
      "commit": "ff5808d223d6359448afc532717b8ccfdc5182d8",
      "tree": "39db02737ed994b392e44838612d7ec610f1edd4",
      "parents": [
        "0dd17c840645e6d1fd67276b45420ca742df6110"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Feb 23 17:49:53 2016 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Mar 09 17:33:14 2016 -0800"
      },
      "message": "AssetManager: Cache a pre-filtered list of configurations\n\nWhen we set the parameters for a ResTable, we can pre-filter which\nresources match and only look at that smaller list when getting entries.\nThis helps A LOT with types that have many configurations, like strings\nand all their various locales.\n\nWe must store the cached entries in a parallel data structure because parts\nof the main Type object are shared with other ResTables, causing data races.\n\nBug:25499111\nChange-Id: I63e37dcbd683fc9f1e7d0f3a6ed4c1c01e0fc575\n"
    },
    {
      "commit": "53185a50d18239088f5a2f3cf9a11a6da7a286fb",
      "tree": "26cc3c3216f092f7e96cb29970a8dd0ec0828ef3",
      "parents": [
        "310355d28e73ff4192e597b99af202a9045fa7e2",
        "fa7d78ae872b8b96ac4a6f945da0627707b00798"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Mar 07 20:22:23 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 07 20:22:24 2016 +0000"
      },
      "message": "Merge \"Revert \"AssetManager: Cache a pre-filtered list of configurations\"\" into nyc-dev"
    },
    {
      "commit": "fa7d78ae872b8b96ac4a6f945da0627707b00798",
      "tree": "6d35b8d1190dc8b8c4c72df05d688a6d7b2946c9",
      "parents": [
        "d4b169173ad7805369204277580d3942cb08174a"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Mar 07 19:39:56 2016 +0000"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Mar 07 19:39:56 2016 +0000"
      },
      "message": "Revert \"AssetManager: Cache a pre-filtered list of configurations\"\n\nThere is a race due to the modification of shared data structures in the framework ResTable.\n\nSee b/27499488\n\nThis reverts commit d4b169173ad7805369204277580d3942cb08174a.\n\nChange-Id: I3f400a2ad3b5ffc652b84dd5fe777f7cf34b5548\n"
    },
    {
      "commit": "7960898f6f886aadda1dd3d7a89106dde9f44217",
      "tree": "a69917218d192b8050ffeb70b39e0cfaee75c32e",
      "parents": [
        "ba5c35b79731e91edc4d452d5e6b49a8b5434a55"
      ],
      "author": {
        "name": "Roozbeh Pournader",
        "email": "roozbeh@google.com",
        "time": "Thu Mar 03 15:06:46 2016 -0800"
      },
      "committer": {
        "name": "Roozbeh Pournader",
        "email": "roozbeh@google.com",
        "time": "Thu Mar 03 15:19:37 2016 -0800"
      },
      "message": "Fix script-related parts of locale resource matching\n\nPreviously, a bit was kept to find if the script of a locale was\nexplicitly \"provided\" in a resource. This was not backward\ncompatible, and failed in some edge cases when the package was\ncreated with older versions of AAPT that did not set the bit.\n\nThe cases would happen when the old resource had an explicit script\nspecified in its locale, but since the \"provided\" bit was not set in\nthe package, we would assume that the script was computed by us.\n\nThis CL replaces the \"provided\" bit with a \"computed\" bit, so the\ndefault value of the bit (set to \"false\" for old packages) would be\ncorrect.\n\nBug: 27156990\nChange-Id: I99e7f1ad8f70c90e25ab3640ed34cc1a6f8d1d64\n"
    },
    {
      "commit": "d4b169173ad7805369204277580d3942cb08174a",
      "tree": "0acb1db94d43505bbb2db989a9d23757b6729976",
      "parents": [
        "ab9a9b09fdd9b8c9f666149f9840a09a97b91885"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Feb 23 17:49:53 2016 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Feb 25 15:29:17 2016 -0800"
      },
      "message": "AssetManager: Cache a pre-filtered list of configurations\n\nWhen we set the parameters for a ResTable, we can pre-filter which\nresources match and only look at that smaller list when getting entries.\nThis helps A LOT with types that have many configurations, like strings\nand all their various locales.\n\nBug:25499111\nChange-Id: Ie6894c44bc67e16a10dbe028c8f3e119e5c29ac7\n"
    },
    {
      "commit": "27953c349fa1c46698f57ae5f26339560c21adac",
      "tree": "e6be55731d70f74688c8ba84c91fd31d7901cc0b",
      "parents": [
        "c92035b1aa2b064d97377795553c11261f7e7cce"
      ],
      "author": {
        "name": "Roozbeh Pournader",
        "email": "roozbeh@google.com",
        "time": "Mon Feb 01 13:49:52 2016 -0800"
      },
      "committer": {
        "name": "Roozbeh Pournader",
        "email": "roozbeh@google.com",
        "time": "Mon Feb 01 14:56:52 2016 -0800"
      },
      "message": "Make default resources a better match for en-US requests\n\nWhen locale fallback landed, resources which specified an \u0027English\u0027\nlocale started to be considered a better match for en-US, even though\ntraditionally, apps tend to ship US English resources under their\ndefault locale.\n\nThis fixes that, and makes en-US requests match default locales.\n\nBug: 26756573\nBug: 26789680\nBug: 26803868\nChange-Id: I460c276bfc6ddba0439dcdf87497a0aece0fa05d\n"
    },
    {
      "commit": "7cdb3e3e2dad1d48d666fe44e37e724341a2c507",
      "tree": "15ebc76a170c7f83032636025da637c71b7fc99c",
      "parents": [
        "ac7c606c90bcf3bfea2b04f518680baf5549b9f5"
      ],
      "author": {
        "name": "Roozbeh Pournader",
        "email": "roozbeh@google.com",
        "time": "Fri Jan 22 14:44:53 2016 -0800"
      },
      "committer": {
        "name": "Roozbeh Pournader",
        "email": "roozbeh@google.com",
        "time": "Fri Jan 22 14:47:09 2016 -0800"
      },
      "message": "Move localeScriptWasProvided to end of ResTable_config\n\nThis is to try and be safer with different versions potentially\ninterpreting the data differently.\n\nChange-Id: I599b6a20d908e8379727a5b06cc6631f1954bcff\n"
    },
    {
      "commit": "6cfa1cc4b0a60dcae6f97efd3efdd6f6033ab3be",
      "tree": "089e92e80acf1d3a987d812dbed2d248a100f080",
      "parents": [
        "17351b673522e52fab0e0ed371fa0f68e3a2879a",
        "3d3fe5026a6a3e951ef56ad16a100b8d5ae84574"
      ],
      "author": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Fri Jan 22 00:31:40 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 22 00:31:40 2016 +0000"
      },
      "message": "Merge \"Add choreographer API to the NDK.\""
    },
    {
      "commit": "3d3fe5026a6a3e951ef56ad16a100b8d5ae84574",
      "tree": "80cf611c06bd2e4b1ba0965db1bd5b3ccc8bb1e8",
      "parents": [
        "e501c39e2cbfbe4cac473e97f8cae55ace3bb48c"
      ],
      "author": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Fri Dec 04 17:59:42 2015 +0000"
      },
      "committer": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Thu Jan 21 16:30:33 2016 -0800"
      },
      "message": "Add choreographer API to the NDK.\n\nChange-Id: Icb8cffd3cd3bd06814466be72db3e26f6a62cbc6\n"
    },
    {
      "commit": "b927c559e1ef8530b08712507f320502627db298",
      "tree": "f0d2fd051cb4486239e6f6187e0da53e416fdaeb",
      "parents": [
        "ac3e599069e1b87ea190f008aef60a506c8561c7"
      ],
      "author": {
        "name": "Roozbeh Pournader",
        "email": "roozbeh@google.com",
        "time": "Fri Jan 15 11:23:42 2016 -0800"
      },
      "committer": {
        "name": "Roozbeh Pournader",
        "email": "roozbeh@google.com",
        "time": "Thu Jan 21 13:47:22 2016 -0800"
      },
      "message": "Implement smarter locale resource selection\n\n* Add support for determining script from language and region.\n* Add support for determining special parents of locales.\n* Add support for smart comparison of locales with only a difference\n  in region, using the locale parentage tree.\n* Fix LocaleData.matchScore() to not fallback to old locale matching\n  behavior if we can\u0027t determine a script.\n* Allow four-character variant codes. (Previously, only five- to\n  eight-character variant codes were allowed.)\n\nBug: 7296673\nBug: 26589793\nChange-Id: Ibde0a48c0564ff383b41068095a5cbacfe7b94bc\n"
    },
    {
      "commit": "1c686f2ce6cbfa3fdb598f452aa31d38f3eb2320",
      "tree": "231683457601efdf2050ebc9ae863b99c3f056ed",
      "parents": [
        "c1f9e7c4875e791e108c79382508aab8d171f25f"
      ],
      "author": {
        "name": "Roozbeh Pournader",
        "email": "roozbeh@google.com",
        "time": "Fri Dec 18 14:22:14 2015 -0800"
      },
      "committer": {
        "name": "Roozbeh Pournader",
        "email": "roozbeh@google.com",
        "time": "Mon Jan 04 13:53:54 2016 -0800"
      },
      "message": "Avoid matching system locales in locale negotiation\n\nAlso:\n1. Add AssetManager method for finding non-system locales: This is\nused in per-app locale negotiation. (Normally,\nAssetManager#getLocales() returns both system and non-system\nlocales.)\n\n2. Match pseudolocales correctly in locale negotiation.\n\nBug: 25800576\nBug: 26236938\nChange-Id: I116caf3a91c290deb4ad68b291c65b7035b18dd4\n"
    },
    {
      "commit": "a6d7e3fb9c9233b9ae46b702d17433854c43d6a0",
      "tree": "3b1a5c2f45dd4e56ac320d28edb61525702fb599",
      "parents": [
        "81d74743107b372424fb8f7439357bdd608f8caf"
      ],
      "author": {
        "name": "Tao Bai",
        "email": "michaelbai@google.com",
        "time": "Tue Sep 01 18:49:54 2015 -0700"
      },
      "committer": {
        "name": "Tao Bai",
        "email": "michaelbai@google.com",
        "time": "Tue Sep 08 18:48:42 2015 -0700"
      },
      "message": "Load app resource as shared library.\n\n- Added aapt command line flag --app-as-shared-lib to build app resources\n  that could be loaded as shared lib at runtime.\n- Added new method AssetManager.addAssetPathAsSharedLibrary() to load an\n  app resource as shared library.\n\nBug 22487604\n\nChange-Id: Ib9b33c35f9c2b7129f3ba205de03d4564623ea39\n"
    },
    {
      "commit": "2349332f9f69189d7889692b9aafd6f80070e352",
      "tree": "393ede4dbdb82f272405d9d641db8e02526b66a2",
      "parents": [
        "0f9f0189822c6bee498b23c93512b6be0e9d1358"
      ],
      "author": {
        "name": "Filip Gruszczynski",
        "email": "gruszczy@google.com",
        "time": "Wed Jul 29 17:02:59 2015 -0700"
      },
      "committer": {
        "name": "Filip Gruszczynski",
        "email": "gruszczy@google.com",
        "time": "Mon Aug 10 13:47:31 2015 -0700"
      },
      "message": "Only relaunch activity on significant size configuration changes.\n\nCurrently if the configuration width/height/smallest width changes, we\nrelaunch the activity or invoke onConfigurationChanged callback. When it\ncomes to size based configuration changes it might not be necessary: if\nthe size change doesn\u0027t pass one of the threshold defined by the\nresources, it means there is no need to relaunch the activity.\n\nIn this CL the ActivityManager will receive the thresholds from the\napplication and use them to decide, whether to relaunch the activity.\nThe application reads the thresholds from the resources, specifically\nfrom resource qualifiers used by the app.\n\nChange-Id: Ie3cf0a172dc1ba0b865cf30c2962e7cfd9ad8436\n"
    },
    {
      "commit": "34fe3df8519523dbb4bc27010fa57f259d5e868d",
      "tree": "08282d0b6cc64337f57e5d9964bf14d42580fddb",
      "parents": [
        "84a378f256bf7925ceb5d2c039a033d3e59b75df"
      ],
      "author": {
        "name": "Yusuke Sato",
        "email": "yusukes@google.com",
        "time": "Fri Jun 19 17:18:07 2015 -0700"
      },
      "committer": {
        "name": "Yusuke Sato",
        "email": "yusukes@google.com",
        "time": "Mon Jun 22 16:11:32 2015 -0700"
      },
      "message": "Let findSupportedAbi and hasRenderscriptBitcode scan only relevant files\n\nfor better performance. Without the optimization, these two functions\nmay check more than 100k file names in the pre-installed APK files,\nwhich can take a few seconds to finish even on a recent device.\n\nBug: 21957428\nChange-Id: I315fd3c6d5aa1076b993752525de449a9933de12\n"
    },
    {
      "commit": "4600dd053dbdbd4b95f3b11057a1cc55b99f9c77",
      "tree": "c4bb116de6b55b054a73083165c9512fbf21c164",
      "parents": [
        "5e063b1da52cca1b93b19bdf7be694aabf95d336"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jun 16 12:02:57 2015 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed Jun 17 08:40:25 2015 +0000"
      },
      "message": "ZipFileRO: Use precise widths for zip file types.\n\ngetEntryInfo crashes on 64-bit devices because \"long\" types\nwere being passed int pointers (that pointed to a stack frame)\nthat were reinterpret_cast\u0027ed to long* (sigh.). To fix this issue\nonce and for all, use types with explicitly defined widths.\n\nThis change also removes some dead invariant checking from\nAsset.cpp instead of cleaning it up.\n\nNote that we\u0027ve introduced a wart in NativeLibraryHelper, where\nwe need to deal with zlib\u0027s uLong type, which is \"at least 32 bits\nwide\".\n\nbug: 21622286\n\nChange-Id: Iae675a9601db7aae03a8b80b40321d2cc1d97f50\n"
    },
    {
      "commit": "2738c96d998dedfae5b4670d588d0cd299c4ca0f",
      "tree": "76b8571676d42a9c0b3bfa00f1937eebf2c05698",
      "parents": [
        "038959e851603500eb39b52fef33cbe75dbd73e3"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu May 14 14:25:36 2015 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri May 15 15:10:58 2015 -0700"
      },
      "message": "Add -round and -notround qualifier to android runtime/aapt\n\nThe round qualifier denotes a device with a screen shape that\nis round. The qualifier shows up after the \u0027long/notlong\u0027 qualifier\nand before the orientation \u0027port/land/square\u0027 qualifiers.\n\nChange-Id: I3044258b2703a9165694b79725bade770fa6cea1\n"
    },
    {
      "commit": "e54d245b993e1347cb32c23a6bdc907a45fab324",
      "tree": "be087de6d12733ca9800724ac77103a0b2173964",
      "parents": [
        "424681e43e454bfcbceb863ddccb875ea57ec26f"
      ],
      "author": {
        "name": "Alan Viverette",
        "email": "alanv@google.com",
        "time": "Wed May 06 10:41:43 2015 -0700"
      },
      "committer": {
        "name": "Alan Viverette",
        "email": "alanv@google.com",
        "time": "Wed May 06 10:41:43 2015 -0700"
      },
      "message": "Improve keying for theme caches, rebase system theme on config change\n\nThemes now use an array of applied styles rather than a String to store\ntheir history. They are keyed based on a hash code computed from the\nhistory of applied styles. The themed drawable cache has been abstracted\nout into its own class.\n\nAlso updates system context to use DayNight as the default and ensures\nthat GlobalActions uses the correct context, which exercises the change.\n\nCTS tests have been added in another CL.\n\nBug: 20421157\nChange-Id: I9eb4b7dffd198ad24d02f656eaf0839570b59caa\n"
    },
    {
      "commit": "c1d527926e1c82828e42bdc0c7abf50f6decc0a7",
      "tree": "48cfc47946a00d3c2126aa62fbf8e47e89e3dbf9",
      "parents": [
        "5551aca2b8ec9fe7ab5ffda8dad82ee104556962"
      ],
      "author": {
        "name": "Alan Viverette",
        "email": "alanv@google.com",
        "time": "Tue May 05 09:49:03 2015 -0700"
      },
      "committer": {
        "name": "Alan Viverette",
        "email": "alanv@google.com",
        "time": "Tue May 05 09:49:03 2015 -0700"
      },
      "message": "Add API for obtaining changing configurations bitmask from Theme\n\nRequired to know when to reload the system context\u0027s theme in response\nto configuration changes, and thus needed to support the DayNight theme.\n\nBug: 20267825\nChange-Id: I7df5e28b7a6d8b611ea030032544cf4800788514\n"
    },
    {
      "commit": "39606e9f78a1b2aa4e82b47e978471cd1158d1df",
      "tree": "3e21c499055b91d18693283d095113c82e2a0c42",
      "parents": [
        "4c08b1bab279fec1a66f1af701ee5c2054eba9ac",
        "7b09e7a9f3ef804e9cd159023b64eac1ef8b7931"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Apr 15 00:07:01 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Apr 15 00:07:01 2015 +0000"
      },
      "message": "am 7b09e7a9: am 44d7989a: am 571c5a26: Merge \"Fix UB in ResourceTable::stringToInt.\"\n\n* commit \u00277b09e7a9f3ef804e9cd159023b64eac1ef8b7931\u0027:\n  Fix UB in ResourceTable::stringToInt.\n"
    },
    {
      "commit": "571c5a26f767f67118f34ca0d426aeeb4a287b2c",
      "tree": "c6019f3417f18d7b7c80342aae5f78cfd649ca80",
      "parents": [
        "d693690aee3ee94878ab59ee86d8db8ce5bb3789",
        "1b4f316651096f0ef9301b4ffde4816a08a54ab5"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Apr 14 23:25:26 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 14 23:25:27 2015 +0000"
      },
      "message": "Merge \"Fix UB in ResourceTable::stringToInt.\""
    },
    {
      "commit": "f04046dfb0696113c8c1a3cf7425b7d6d85378b3",
      "tree": "e63f638dba4d37e0a44bc3f2932557acd9bf3b57",
      "parents": [
        "f75355e4df08fadc545b691f4e633aa5ff961ca6",
        "e24d36b7b744540ccd3401609248ed9d48be4cc9"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Apr 09 19:06:11 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Apr 09 19:06:11 2015 +0000"
      },
      "message": "am e24d36b7: am 1f799a6b: am d9f32b16: Merge \"Ensure alignment of Res_png_9patch.\"\n\n* commit \u0027e24d36b7b744540ccd3401609248ed9d48be4cc9\u0027:\n  Ensure alignment of Res_png_9patch.\n"
    },
    {
      "commit": "a18cee52d953196ce12550df2ac5a14fbf359802",
      "tree": "eeb5ce69df8d5b1ea15ad991fc6ed3d449802faf",
      "parents": [
        "47c1cf4b35616059409a0674382c2318494e877b"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Apr 07 18:38:42 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Apr 09 10:41:38 2015 -0700"
      },
      "message": "Ensure alignment of Res_png_9patch.\n\nThis doesn\u0027t alter the alignment of the data within the struct, but\nenforces that this structure will be appropriately aligned when used.\n\nThe image_info struct has this struct preceded by a bool, which causes\nodd alignment for the members of this struct.\n\nChange-Id: Ia2ef5c81b2f961c0f61858a10a7821d82f600919\n"
    },
    {
      "commit": "1b4f316651096f0ef9301b4ffde4816a08a54ab5",
      "tree": "f141604343f4114337483ed0fb30fe36f4750310",
      "parents": [
        "47c1cf4b35616059409a0674382c2318494e877b"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Apr 07 18:43:15 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Apr 08 14:12:21 2015 -0700"
      },
      "message": "Fix UB in ResourceTable::stringToInt.\n\nWas here because UBsan found integer overflow in the parsing for hex\nnumbers, since hex numbers here are actually unsigned but assigned to\na signed integer.\n\nAlso fixes a number of missing error conditions.\n\nChange-Id: Iaea576daedfc6c75521cde02de3fe9dd0198a3b7\n"
    },
    {
      "commit": "e6c28f7c3a7f148bf91dcc5d05642997dff09e9f",
      "tree": "b77d2e2132ef718c50ef4606420764a7ee43b97e",
      "parents": [
        "d945e6b4850cf2257f12e6abdb685198fb2fdbb9",
        "6f6ceb7e1456698b1f33e04536bfb3227f9fcfcb"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Apr 03 00:06:31 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Apr 03 00:06:34 2015 +0000"
      },
      "message": "Merge \"AAPT2\""
    },
    {
      "commit": "6f6ceb7e1456698b1f33e04536bfb3227f9fcfcb",
      "tree": "0a1f8e354c4714f162f849b09a5d5da757c6d5b8",
      "parents": [
        "041ca26d028ae314d416cb107721ea7267af6aca"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Nov 14 14:48:12 2014 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Apr 02 17:02:48 2015 -0700"
      },
      "message": "AAPT2\n\nFirst checking of AAPT2. The individual phases of AAPT2 work, but there\nare some missing pieces.\n\nFor early testing we are missing:\n- Need to properly mark file references and include them in package\n- Need to package into zip\n\nFinal AAPT for apps we are missing:\n- Need to crush PNGs\n- Need to parse 9-patches\n- Need to validate all of AndroidManifest.xml\n- Need to write align method to align resource tables for splits.\n\nFinal AAPT for apps + system we are missing:\n- Need to handle overlays\n- Need to store comments for R file\n- Need to handle --shared-lib (dynamic references too).\n\nNew AAPT features coming:\n- Need to import compiled libraries\n    - Name mangling\n    - R file generation for library code\n\nChange-Id: I95f8a63581b81a1f424ae6fb2c373c883b72c18d\n"
    },
    {
      "commit": "11ae768cf1b8348e761ad9c09e98788da1e591b1",
      "tree": "fa4a4e9fffc83e61af98476d41df4252e3cd1323",
      "parents": [
        "e7f931c4505a6bd62e01bef5193dd724571a672b"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Mar 24 18:48:10 2015 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Mar 26 18:57:36 2015 -0700"
      },
      "message": "Add payload-size preflight stage to full transport backup\n\nWe now peform a total-size preflight pass before committing data to the\nwire.  This is to eliminate the large superfluous network traffic that\nwould otherwise happen if the transport enforces internal quotas: we\nnow instead ask the transport up front whether it\u0027s prepared to accept\na given payload size for the package.\n\nFrom the app\u0027s perspective this preflight operation is indistinguishable\nfrom a full-data backup pass.  If the app has provided its own full-data\nhandling in a subclassed backup agent, their usual file-providing code\npath will be executed.  However, the files named for backup during this\npass are not opened and read; just measured for their total size.  As\nfar as component lifecycles, this measurement pass is simply another\ncall to the agent, immediately after it is bound, with identical\ntimeout semantics to the existing full-data backup invocation.\n\nOnce the app\u0027s file set has been measured the preflight operation\ninvokes a new method on BackupTransport, called checkFullBackupSize().\nThis method is called after performFullBackup() (which applies any\noverall whitelist/blacklist policy) but before any data is delivered\nto the transport via sendBackupData().  The return code from\ncheckFullBackupSize() is similar to the other transport methods:\nTRANSPORT_OK to permit the full backup to proceed; or\nTRANSPORT_REJECT_PACKAGE to indicate that the requested payload is\nunacceptable; or TRANSPORT_ERROR to report a more serious overall\ntransport-level problem that prevents a full-data backup operation\nfrom occurring right now.\n\nThe estimated payload currently does not include the size of the\nsource-package metadata (technically, the manifest entry in its\narchive payload) or the size of any widget metadata associated with\nthe package\u0027s install.  In practice this means the preflighted size\nunderestimates by 3 to 5 KB.  In addition, the preflight API currently\ncannot distinguish between payload sizes larger than 2 gigabytes;\nany payload estimate larger than that is passed as Integer.MAX_VALUE\nto the checkFullBackupSize() query.\n\nBug 19846750\n\nChange-Id: I44498201e2d4b07482dcb3ca8fa6935dddc467ca\n"
    },
    {
      "commit": "8a9355a98ece3d7fc9d022e759d05378060c86e2",
      "tree": "d6d76f94f2688f9bcee4c961dafc4cc3ec97a6bd",
      "parents": [
        "9c329b8b6440823ef94bffebc0b1098e8b2ad622"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Mar 10 16:55:43 2015 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Mar 16 22:25:26 2015 +0000"
      },
      "message": "Output modified bcp47 tag in ResTable_config::toString()\n\nWe expect to be able to parse the output of ResTable_config::toString(),\nso it should use modified bcp47 (b+en+Latn+US).\n\nChange-Id: I597a1779a1fa5cff171c473e6a0368d93b9c7722\n"
    },
    {
      "commit": "847514499f5920d073f5cd402dd0d3bbd19ac2c1",
      "tree": "f6b20dcbbdb9809a4d0f9678f9c2a04626a03c62",
      "parents": [
        "6e14c5705c5acf9d6036060252f257a084cd7578",
        "3523e4fcb3c74a5dee2f4497e2b8ec7b9e2b5e57"
      ],
      "author": {
        "name": "Leon Scroggins III",
        "email": "scroggo@google.com",
        "time": "Tue Jan 27 18:33:46 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jan 27 18:33:46 2015 +0000"
      },
      "message": "am 3523e4fc: am efe085ff: Merge \"Handle bad ninepatch data.\" into lmp-mr1-dev\n\n* commit \u00273523e4fcb3c74a5dee2f4497e2b8ec7b9e2b5e57\u0027:\n  Handle bad ninepatch data.\n"
    },
    {
      "commit": "a730ef3f77fc495bc90199b4d45efab26d609782",
      "tree": "f88830bbe9186aacc9f79c849dce761f61ef875a",
      "parents": [
        "aa6945ac7904611499ae4ad33799d1f1fe434d32"
      ],
      "author": {
        "name": "Leon Scroggins III",
        "email": "scroggo@google.com",
        "time": "Tue Jan 27 11:12:02 2015 -0500"
      },
      "committer": {
        "name": "Leon Scroggins",
        "email": "scroggo@google.com",
        "time": "Tue Jan 27 16:41:16 2015 +0000"
      },
      "message": "Handle bad ninepatch data.\n\nChanges proposed by Ben Hawkes of Google Project Zero.\n\nNinePatchPeeker.cpp:\nInstead of asserting, return false for bad data.\n\nResourceTypes.h:\nStore ninepatch values as unsigned.\n\nBUG:19151999\nChange-Id: Ibe35e7569f632c6bb8a34a7701e26bb6ed547ec2\n"
    },
    {
      "commit": "d9bd08864eaf9d8847d974eadb81806b9e086a2d",
      "tree": "7f3f1caed8501f6409955deb27db6fa211fbca62",
      "parents": [
        "a9c122af60621597f1d008c8a283074309383aac",
        "554a6f5278ec05077d8252249afc911897fbfe76"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jan 20 21:55:12 2015 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jan 20 21:55:12 2015 +0000"
      },
      "message": "am aee7225e: Merge \"Process base APK\" into lmp-mr1-dev\nautomerge: 554a6f5\n\n* commit \u0027554a6f5278ec05077d8252249afc911897fbfe76\u0027:\n  Process base APK\n"
    },
    {
      "commit": "42eea270a0a2bc54f454312817c41ac357e3a884",
      "tree": "36a4b3f3f658c40be17f3ce7c4bc3b6836bc817a",
      "parents": [
        "8d47bc97e642cd0d0caf31d09efe05d8dc233f27"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Jan 15 17:01:39 2015 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Jan 16 14:11:30 2015 -0800"
      },
      "message": "Process base APK\n\nThe base APK may have resources with configurations that compete\nagainst some splits. The base APK must be involved in the selection\nof splits.\n\nBug:18982001\nChange-Id: Ieb29b5a36cf2c68e7831484d98a9fd275acd97e8\n"
    },
    {
      "commit": "49138184dee54357b1923f302e4b3fedd73ca34f",
      "tree": "865df305f680cb41daf7216664d4b2a0edc133b3",
      "parents": [
        "b8794c76d677ef04c96b9edc002fe6e1f53022c7",
        "9568307cf32c8abc6703dc7a1b0b0fee56c4f8f5"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Jan 15 01:39:29 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jan 15 01:39:29 2015 +0000"
      },
      "message": "am 9568307c: am 43a4a8c7: Fix redundant file backups\n\n* commit \u00279568307cf32c8abc6703dc7a1b0b0fee56c4f8f5\u0027:\n  Fix redundant file backups\n"
    },
    {
      "commit": "43a4a8c777fbb8f71540ac7fbe82674489ef557b",
      "tree": "ab4f4b3a27124b244aa8b3cbb013c674da07731d",
      "parents": [
        "a2fa3d219bc148c196b0eb3cf7b3b1bd453e830b"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Jan 08 18:42:33 2015 -0800"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed Jan 14 16:36:30 2015 -0800"
      },
      "message": "Fix redundant file backups\n\nWe\u0027d observed a bug in which an unchanged file was nevertheless\nbeing redundantly transmitted for backup on every backup pass.\nThe underlying issue turns out to have been the FileBackupHelper\nbase implementation\u0027s logic for diffing the prior-state file\nset against the current state, in the case when there had been\ndeletions of prior files.  In addition, there was also a\nparallel bug in which file checksums were not calculated\nproperly in some cases, leading to at least one additional\nredundant backup of the file in question.\n\nBug 18694053\n\nChange-Id: Ie0dec06486b5fef4624561737019569c85d6b2a0\n"
    },
    {
      "commit": "347040cf84401601b0d5cbb1d76e4648d1c8a461",
      "tree": "55aaab9d50d252ad2ed6bc03f35bf42ebe0cec3e",
      "parents": [
        "a349a9e71aecf93d7d6d7d3e0d93d3e06291a519",
        "740acf213c56c406132294790fa2fadd0380cfa7"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Dec 11 00:07:02 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Dec 11 00:07:02 2014 +0000"
      },
      "message": "am 740acf21: am c7801877: Merge \"Fix issue where non-resource attributes would cause obtainStyleAttributes to fail\" into lmp-mr1-dev\n\n* commit \u0027740acf213c56c406132294790fa2fadd0380cfa7\u0027:\n  Fix issue where non-resource attributes would cause obtainStyleAttributes to fail\n"
    },
    {
      "commit": "5dce5e67dbdcd14882edf3f64fba671c77577ee4",
      "tree": "685d15b6cbb42c2d3bd50825f0b4198c3bd1ee7d",
      "parents": [
        "4df65bf1eb454814954421403da9f8b5fcb82180"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Dec 10 10:47:53 2014 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Dec 10 10:51:48 2014 -0800"
      },
      "message": "Fix issue where non-resource attributes would cause obtainStyleAttributes to fail\n\nA sentinal value of 0x00000000 was used to mark the first time an AttributeFinder\nwas used. If the resource ID of an attribute was also 0x00000000 (which occurs with\nnon-resource attributes, like \u0027style\u0027), then it would be mistaken as the sentinel\nstart value.\n\nBug:18421787\nChange-Id: I4be353e0f8c940cb6f262d155129f048dcc444ae\n"
    },
    {
      "commit": "e97908d32ee8ea80138d085260a0eac93841c722",
      "tree": "0fb24cd7ef6cf6236d3451296937262b78fe2efc",
      "parents": [
        "501bf216dc9068c8169687437d8d6594cd1e1165",
        "0953ab276449cf8d2b27d4f68cb213dfe317a3b4"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Dec 05 11:06:21 2014 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Dec 05 11:06:21 2014 -0800"
      },
      "message": "Merge commit \u00270953ab27\u0027 into manualmerge\n\nChange-Id: I36dea45f7571096136ea7bda5e2680bd85a0df32\n"
    },
    {
      "commit": "8e5362f20e2bc41b1dcf130a613b7e0b3cd1db58",
      "tree": "e395d9177a329782dd5be2a5ec228b1abe3093a2",
      "parents": [
        "c0707c007d8322338e9f46f5ccb04b5582e75845",
        "503071ae41374a66f61e53e05a91243473db83b9"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Dec 04 09:21:45 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Dec 04 09:21:45 2014 +0000"
      },
      "message": "am 503071ae: am a2b5067a: Merge \"RRO: prevent duplicate system overlays\"\n\n* commit \u0027503071ae41374a66f61e53e05a91243473db83b9\u0027:\n  RRO: prevent duplicate system overlays\n"
    },
    {
      "commit": "9b624c186cb6059dfb3ec24bfb6386a0fc17b88c",
      "tree": "e57516e076eddb75d4c657704522f43067153c2a",
      "parents": [
        "92ad4dd017a13364b4001bdb04911202932f81c2"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Nov 19 17:49:26 2014 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Dec 03 15:59:20 2014 -0800"
      },
      "message": "AAPT: Move private attrs to new type for framework\n\nPrivate attributes are typically placed after public\nattributes in the resource table. Each time a new version\nof the Android framework is released, new public attributes\ntake the place of the private attributes, and the private\nattributes are shifted after the new public ones.\n\nThis means that any apps built against the newer SDK\nmay inadvertently be using private attributes on older\ndevices.\n\nThis change moves all private attributes to a completely\ndifferent type ID, so there will never be collisions across\nversions.\n\nThese private attributes are automatically moved to a synthesized\ntype only for the system resources.\n\nBug:18263655\n\nChange-Id: I7a850512953fadcc9f3524d509cea30249782db8\n"
    },
    {
      "commit": "a2b5067aeef5b2d68a7a2f7b4edc7ee0908b5d5b",
      "tree": "db4b1a0c53a697fb010a6feba69e9b2bb11250fd",
      "parents": [
        "abdaa32dd79c915d0e419560c8eaa64e3d946b77",
        "cb7b63d928cd562ea66d10d816056b984f50193a"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Dec 03 17:44:17 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Dec 03 17:44:18 2014 +0000"
      },
      "message": "Merge \"RRO: prevent duplicate system overlays\""
    },
    {
      "commit": "11bdd5b10b5f921b657283fa94463263171218d5",
      "tree": "f439482e80559f310178bb050de770ca86fb0b23",
      "parents": [
        "a9a3e24835b08828aa252bf079067a5f810a0792",
        "06d8b7b8d216cbfcd4cd987649672a5856ccd797"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Nov 17 12:17:16 2014 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Nov 17 12:17:16 2014 -0800"
      },
      "message": "Merge commit \u002706d8b7b8\u0027 into manualmerge\n\nConflicts:\n\tcore/jni/android_util_AssetManager.cpp\n\nChange-Id: I77b72d0d3ec8184ccd97419e4c76b7d55b1a52ca\n"
    },
    {
      "commit": "5bf0c65eef972e743ca02e93f8d5ad7df5097931",
      "tree": "28c3f347ee4b4c25547911cb737f38614b18b3b1",
      "parents": [
        "bc1d97556d32a45ceca5db3e2af12cd3d4cf5590",
        "f89a2fdacb2ba907f180188dc79f9de81e3eb254"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Sat Nov 08 02:04:43 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sat Nov 08 02:04:43 2014 +0000"
      },
      "message": "am f89a2fda: Merge \"Frameworks/base: Fix two warnings in cmds\"\n\n* commit \u0027f89a2fdacb2ba907f180188dc79f9de81e3eb254\u0027:\n  Frameworks/base: Fix two warnings in cmds\n"
    },
    {
      "commit": "ebee1379eaf4306eb2de9437844009aa7eb18c28",
      "tree": "165544f1e460464e14c41e8b88f73107e1668494",
      "parents": [
        "487ae9b8dc3e08c1a830d519a801a07cd59c8f2b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 07 16:28:19 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Sat Nov 08 01:04:45 2014 +0000"
      },
      "message": "Frameworks/base: Fix two warnings in cmds\n\nChange-Id: Ifb9c7fb7a2d28c13010ddc186bea5f5f0daefb4a"
    },
    {
      "commit": "dc9c109af815100d497184e6dadebceed7f3bf1d",
      "tree": "51bb2aa4ff78b0ebcdbe1cc474c76dd2d38d7a37",
      "parents": [
        "9a0aa553ad9f6657cbbf0a182566c481e191e6b7",
        "487ae9b8dc3e08c1a830d519a801a07cd59c8f2b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 07 15:03:46 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 07 15:14:02 2014 -0800"
      },
      "message": "resolved conflicts for merge of 487ae9b8 to lmp-mr1-dev-plus-aosp\n\nChange-Id: I395f184d885a7ef30aa113ab01fcaacc94243008\n"
    },
    {
      "commit": "2204f0bf56af53b588a01701b8cf9cd05b1b3ff9",
      "tree": "d163b59ccc8d10a3181bc77ea99f83c94e6748ce",
      "parents": [
        "59701b9ba5c453e327bc0e6873a9f6ff87a10391"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Oct 21 23:04:54 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 07 13:35:05 2014 -0800"
      },
      "message": "Frameworks/base: Wall Werror in libs/androidfw\n\nTurn on -Wall -Werror in libs/androidfw. Fix warnings. Refactor\nsome code.\n\nChange-Id: I66fe54ace433c15dee5de328b149ca142f74b2dd\n"
    },
    {
      "commit": "cb7b63d928cd562ea66d10d816056b984f50193a",
      "tree": "0078c4cd3321ca9d533432f7092da58d2a6fa2f0",
      "parents": [
        "96198ebae8deab14b434645f628213db492abdbc"
      ],
      "author": {
        "name": "Mårten Kongstad",
        "email": "marten.kongstad@sonymobile.com",
        "time": "Fri Nov 07 10:57:15 2014 +0100"
      },
      "committer": {
        "name": "Zoran Jovanovic",
        "email": "zoran.jovanovic@sonymobile.com",
        "time": "Fri Nov 07 16:08:22 2014 +0100"
      },
      "message": "RRO: prevent duplicate system overlays\n\nSystem overlays, ie overlays with targetPackage\u003d\"android\", were loaded\ntwice, which caused all sorts of issues. Ensure they are only loaded\nonce, which will be during Zygote initialization.\n\nBug: 17765434\nChange-Id: Ia5064045c77f713c58fb78adc3942f6af1abdc93\n"
    },
    {
      "commit": "a7d1d73a477fe512d9ea69ee2883084630ec24c4",
      "tree": "bbc94feb57cfcead2f9d44d8a4192085ee4d7d6a",
      "parents": [
        "efd8a85d30c35ca4a274835f10e371289bb9bc5e"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Oct 01 18:24:54 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Nov 04 16:34:34 2014 -0800"
      },
      "message": "Implement back-tracking when searching for attributes in XML or resource bag\n\nShared libraries have their package ID assigned at run-time, so some\nof the guarantees we used to have about sort order of attributes in\nbags or XML elements no longer hold.\n\nThis CL adds back-tracking and can jump to the nearest attribute with the\nsame package ID and continue searching.\n\nThis means that attributes with the same package ID must be sorted by increasing\nresource ID, as was the case before.\n\nAttributes with the same package ID must be grouped together, but the groups can\nbe in any order. Ex: 0x02010001, 0x02010002, 0x01010000, 0x01010010, 0x7f010032\n\nBug:17666947\nChange-Id: I9c198bbb6ca788849aac85b6323606ea5d9550d6\n"
    },
    {
      "commit": "668f0a356cba44c22d8ca0c9f4711613885d46a9",
      "tree": "2a761d729c706abe8c4fca98e89d818e961a5168",
      "parents": [
        "3c7efdc00506e6561ca08933f0b2acf5e3f16b02",
        "4bf58108d442b37ab4adf5ce3a4ecd63472ce254"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Nov 03 23:38:42 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Nov 03 23:38:43 2014 +0000"
      },
      "message": "Merge \"Fix issues that will be present in C++11\" into lmp-mr1-dev"
    },
    {
      "commit": "4bf58108d442b37ab4adf5ce3a4ecd63472ce254",
      "tree": "2b6359ad85861bf339e6a45813c599ab683fc7c3",
      "parents": [
        "e8d9810cdef5b3e288f54f42adc3205532343406"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Nov 03 11:21:19 2014 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Nov 03 11:49:47 2014 -0800"
      },
      "message": "Fix issues that will be present in C++11\n\n- char16_t is a distinct type, so stay consistent\n  with it throughout the code base.\n- char16_t is defined as minimum size of 16 bits.\n  Since we mmap and cast data structures onto raw memory,\n  we need a precise definition (uint16_t), so we cast between\n  that (and static_assert that they are the same size).\n\nChange-Id: I869c32637543bbcfb39d2643e7d9df10d33acd3c\n"
    },
    {
      "commit": "f2969405020a72e282c348a6ea201d56e9f8d4ba",
      "tree": "e128dfe858f314d151ad3462e77f18d4aa973f66",
      "parents": [
        "720a5c51beb5beab442832ea8d169aa5b4edb43f"
      ],
      "author": {
        "name": "Alan Viverette",
        "email": "alanv@google.com",
        "time": "Wed Oct 29 17:09:36 2014 -0700"
      },
      "committer": {
        "name": "Alan Viverette",
        "email": "alanv@google.com",
        "time": "Wed Oct 29 17:09:36 2014 -0700"
      },
      "message": "Distinguish unspecified and explicit null values in resources\n\nBUG: 17919345\nChange-Id: Ic4f04f7dd0f986f58a749b5950d80c1cfdb074ea\n"
    },
    {
      "commit": "8d2556f0de2786367babaafbf1c34b24926e48ca",
      "tree": "fcd53787b65f0ff0e1449b3ba1794d5edc79be32",
      "parents": [
        "26d5da351e5fbeb23605a643923e896bb3a0d57c",
        "ecdaa576af69361538738b9982b22d25017012a3"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Sep 19 18:37:15 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 19 18:37:15 2014 +0000"
      },
      "message": "am 8bdb265f: am 19f9d54f: Merge \"Fix backwards compat problem with AAPT public attrs\" into lmp-dev\n\n* commit \u00278bdb265f0a73bc6f2114ca70f141c214a23696c7\u0027:\n  Fix backwards compat problem with AAPT public attrs\n"
    },
    {
      "commit": "82a2dd8efe48d3a4e04655f01329da857ace4b7d",
      "tree": "9c5ec064aeba43cf4b27fd4bb36e31f0bf425f35",
      "parents": [
        "49c0e7375b237bc6eff8746ae91466ea6a660233"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Sep 17 18:34:15 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Sep 18 14:05:24 2014 -0700"
      },
      "message": "Fix backwards compat problem with AAPT public attrs\n\nAAPT has traditionally assigned resource IDs to public attributes,\nand then followed those public definitions with private attributes.\n\n--- PUBLIC ---\n| 0x01010234 | attr/color\n| 0x01010235 | attr/background\n\n--- PRIVATE ---\n| 0x01010236 | attr/secret\n| 0x01010237 | attr/shhh\n\nEach release, when attributes are added, they take the place of the private\nattributes and the private attributes are shifted down again.\n\n--- PUBLIC ---\n| 0x01010234 | attr/color\n| 0x01010235 | attr/background\n| 0x01010236 | attr/shinyNewAttr\n| 0x01010237 | attr/highlyValuedFeature\n\n--- PRIVATE ---\n| 0x01010238 | attr/secret\n| 0x01010239 | attr/shhh\n\nPlatform code may look for private attributes set in a theme. If an app\ncompiled against a newer version of the platform uses a new public\nattribute that happens to have the same ID as the private attribute\nthe older platform is expecting, then the behavior is undefined.\n\nWe get around this by detecting any newly defined attributes (in L),\ncopy the resource into a -v21 qualified resource, and delete the\nattribute from the original resource. This ensures that older platforms\ndon\u0027t see the new attribute, but when running on L+ platforms, the\nattribute will be respected.\n\nWe still need to address this problem in the platform moving forward,\nas this will only help us in the transition from pre L to L.\n\nBug:17520380\nChange-Id: Ia2a985798b50006c21c7c3431d30d9598f27cd91\n"
    },
    {
      "commit": "20ec4fa2294a91e5ff87839280904aba4a050cf6",
      "tree": "975bff3addce4062cb4227f7d96d1f36a16c7ed0",
      "parents": [
        "ddb605d4b2fa544bab69a72a288e578f2dd37f52",
        "6c585756b4c66058af85bb8d6524ffa94af79e62"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Sep 08 22:25:54 2014 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Sep 08 22:25:54 2014 -0700"
      },
      "message": "resolved conflicts for merge of 6c585756 to lmp-dev-plus-aosp\n\nChange-Id: I5a25f2bac44ac5efcd7462af91005e09680a1d96\n"
    },
    {
      "commit": "f348c15ecf78e9d58b8238ffcf1d78a279e3a862",
      "tree": "fad413b2f2b3d849eaf83e607a8336683adb8b63",
      "parents": [
        "2a1ed46decbc8e21a39367a4b7770111392167c3"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Sep 08 18:28:00 2014 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Sep 08 18:30:08 2014 -0700"
      },
      "message": "Use char16_t for char things.\n\nWhen compiling in C++ mode, the compiler will complain about conversions\nfrom uint16_t to char16_t. Be consistent in using char16_t for strings.\n\nChange-Id: I052b6176ced635162920b31560052d9a64f92764\n"
    },
    {
      "commit": "ad2d07d2d98a46babb2a9472413fe9ce5080ca76",
      "tree": "40be93c366de29a74421b20cf8ae10c34ac34dfd",
      "parents": [
        "032402cff1fe5dc3a6b2adae3d4c13fb771cd91f"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Aug 27 16:21:08 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Aug 27 18:28:49 2014 -0700"
      },
      "message": "Stamp platform version code into app Apks\n\nThe versionCode of theframework resources that an app is built against\ngets stamped inside an app\u0027s AndroidManifest.xml in the \u003cmanifest\u003e\ntag as \"platformBuildVersionCode\" and \"platformBuildVersionName\"\nattributes.\n\nBug:17207635\nChange-Id: Id573c3dffcbca38eec9c0eb3e89f4a547e3361d3\n"
    },
    {
      "commit": "31245b4f06003f1c8cd44c31b387c96ab4e282f9",
      "tree": "ec59d73e6b6e563876ed8c4e5de331b4df17549e",
      "parents": [
        "5b8e5a7d4c930b42e1a3c2b3e67144b89d37efa2"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Aug 22 19:10:56 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Aug 25 17:47:30 2014 -0700"
      },
      "message": "Introduce anydpi density resource qualifier\n\nThis is meant to be used with scaleable vector\ndrawables, and are chosen as the best match unless\nthere is a configuration that matches the density\nrequested exactly.\n\nBug:17007265\nChange-Id: Ic3288d0236fe0bff20bb1599aba2582c25b0db32\n"
    },
    {
      "commit": "6022debdbcc4498736580640c6287b57872617a2",
      "tree": "17fa702311166e6f78ad07af3e767ca672817135",
      "parents": [
        "e02f340d9a0c4f841376c3db8ec93f65e7e58417"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Aug 20 14:59:19 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Aug 20 17:55:33 2014 -0700"
      },
      "message": "AAPT: Fix regression generating dynamic ref table for shared libraries\n\nAAPT stopped generating dynamic reference tables for shared libraries.\n\nChange-Id: Ib0025811bdca1a4756eb21080dd6b6bb3fc1ca3d\n"
    },
    {
      "commit": "833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1",
      "tree": "a57e8389088178108de1424faf41ea3bb87c934a",
      "parents": [
        "5c09e8ad5ee8e67976066366527ee58792551953"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jun 18 15:06:01 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Aug 04 18:48:14 2014 -0700"
      },
      "message": "AAPT support for feature splits\n\nThis change allows the developer to add a base package for\nwhich to build a feature split. The generated resource types\nwill begin after the base APK\u0027s defined types so as not\nto collide or override resources.\n\nMultiple features can be generated by first choosing an\narbitrary order for the features. Then for each feature,\nthe base APK and any preceding features are specified\nwith the --feature-of flags.\n\nSo with a base APK \u0027A\u0027 and features, \u0027B\u0027, and \u0027C\u0027,\n\u0027B\u0027 would be built with\n\naapt package [...] --feature-of A [...]\n\nand \u0027C\u0027 would be built with\n\naapt package [...] --feature-of A --feature-of B [...]\n\nChange-Id: I1be66e3f8df9a737b21c71f8a93685376c7e6780\n"
    },
    {
      "commit": "7df3625d5bb28d11cce9ac23429f5e3c6ebac030",
      "tree": "432f9013a91bede42c82486575b37507cd66718d",
      "parents": [
        "999d394adee533c55fce38bd632ffd4f1af91362"
      ],
      "author": {
        "name": "Martin Kosiba",
        "email": "mkosiba@google.com",
        "time": "Thu Jan 16 16:25:56 2014 +0000"
      },
      "committer": {
        "name": "Marcin Kosiba",
        "email": "mkosiba@google.com",
        "time": "Thu Jul 17 18:10:02 2014 +0100"
      },
      "message": "Allow for appending of resources to an AssetManager.\n\nBUG: 11505352\nChange-Id: Ifa290580a6dc63c2f471d0bbf5f066db14aed4d7\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": "0a0454fdcc7aeac6e57f9466da8f39bcf5f3f6ec",
      "tree": "ee5502e236507ebf43a8b365bcf10466b49be61b",
      "parents": [
        "dd79334f7ecb39135058c2049cd933b4b930a3d1",
        "642421aa7f284817cc1a972a7f9c7a64696a0116"
      ],
      "author": {
        "name": "John Spurlock",
        "email": "jspurlock@google.com",
        "time": "Fri Apr 04 19:34:11 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Apr 04 19:34:11 2014 +0000"
      },
      "message": "am 642421aa: am 5c31e487: Merge \"Introduce new UI_MODE_TYPE_WATCH and qualifier.\" into klp-modular-dev\n\n* commit \u0027642421aa7f284817cc1a972a7f9c7a64696a0116\u0027:\n  Introduce new UI_MODE_TYPE_WATCH and qualifier.\n"
    },
    {
      "commit": "642421aa7f284817cc1a972a7f9c7a64696a0116",
      "tree": "e51a5b2c212bd95c4a052fcbd6b0bb0f0fce4976",
      "parents": [
        "8f81d29558bb0c97187d5ae3a7ee696ec13b264a",
        "5c31e487c4577e1c47ee7c949325d6a13f0d462e"
      ],
      "author": {
        "name": "John Spurlock",
        "email": "jspurlock@google.com",
        "time": "Fri Apr 04 19:28:09 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Apr 04 19:28:09 2014 +0000"
      },
      "message": "am 5c31e487: Merge \"Introduce new UI_MODE_TYPE_WATCH and qualifier.\" into klp-modular-dev\n\n* commit \u00275c31e487c4577e1c47ee7c949325d6a13f0d462e\u0027:\n  Introduce new UI_MODE_TYPE_WATCH and qualifier.\n"
    },
    {
      "commit": "6c191299a73388cd593809c0b66bafbd08fd2982",
      "tree": "86466cc5d46bb13d87ae71c906349957edd3a7fb",
      "parents": [
        "8db6d9af58b9b81dbd764acd3f6a379afb539bf6"
      ],
      "author": {
        "name": "John Spurlock",
        "email": "jspurlock@google.com",
        "time": "Thu Apr 03 16:37:27 2014 -0400"
      },
      "committer": {
        "name": "John Spurlock",
        "email": "jspurlock@google.com",
        "time": "Fri Apr 04 15:21:53 2014 -0400"
      },
      "message": "Introduce new UI_MODE_TYPE_WATCH and qualifier.\n\nDefault ui mode to watch if we have FEATURE_WATCH.\n\nBug:13395758\nChange-Id: Ie5ff95de60e69e91ad3612c7d2f1fca7f49061bd\n"
    },
    {
      "commit": "de898ff42912bd7ca1bfb099cd439562496765a4",
      "tree": "849b591a99a7e6a8fd790aedca3afff6f6b6eade",
      "parents": [
        "05f79758cd2688f89444a38baba326a0a1c1a438"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jan 29 18:20:45 2014 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Mar 25 12:09:56 2014 -0700"
      },
      "message": "Shared library resource support\n\nShared libraries can now export resources for applications\nto use.\n\nExporting resources works the same way the framework exports\nresources, by defining the public symbols in res/values/public.xml.\n\nBuilding a shared library requires aapt to be invoked with the\n--shared-lib option. Shared libraries will be assigned a package\nID of 0x00 at build-time. At runtime, all loaded shared libraries\nwill be assigned a new package ID.\n\nCurrently, shared libraries should not import other shared libraries,\nas those dependencies will not be loaded at runtime.\n\nAt runtime, reflection is used to update the package ID of resource\nsymbols in the shared library\u0027s R class file. The package name of\nthe R class file is assumed to be the same as the shared library\u0027s\npackage name declared in its manifest. This will be customizable in\na future commit.\n\nSee /tests/SharedLibrary/ for examples of a shared library and its\nclient.\n\nBug:12724178\nChange-Id: I60c0cb8ab87849f8f8a1a13431562fe8603020a7\n"
    },
    {
      "commit": "b5c4e7fd3866bbe30d7ea4d7bc463da5a70970e2",
      "tree": "1348a14b7c5edf6d71960411b9c05defbac1f57b",
      "parents": [
        "df897d08cebb013795ae679eef842a38b5153252",
        "92860a74c6e57fb66b28afe95c13e7c0f97f831e"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Mar 10 10:57:05 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Mar 10 10:57:05 2014 +0000"
      },
      "message": "resolved conflicts for merge of 92860a74 to master\n\nChange-Id: I3036ef9f1251c756092dc5ee2c4fed8146855e1e\n"
    },
    {
      "commit": "6381dd4ff212a95be30d2b445d40ff419ab076b4",
      "tree": "ea96f7e229cafae41f7be46a3cf0345edd2dc869",
      "parents": [
        "3fc3b9fd1bf71351bf1ff2d49d6e10b6acabf068"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Mar 03 17:12:03 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Mar 10 10:00:02 2014 +0000"
      },
      "message": "LP64: Make 9 patches architecture agnostic.\n\nThe Res_png_9patch struct had several pointer members\nwhose size differed between 32 and 64 bit platforms.\n\nThese members have been replaced by uint32_t offsets\nto serialized data. The serialized form for 9patches\nplaces a Res_png_9patch object at the beginning of\nserialized data, followed by int32_t arrays of xDivs,\nyDivs and colors.\n\nNote that these offsets are not strictly required,\nsince they can be computed from the values of numXDivs,\nnumYDivs \u0026 numColors, however they are called in tight\nloops so having them computed once is a beneficial.\n\nThis change also removed the unused patch_equals function\nfrom aapt\u0027s Image.cpp.\n\nChange-Id: I3b9ac8ae5c05510d41377cae4dff1c69b40c2531\n"
    },
    {
      "commit": "788fa41482b9d398591b7db8b0b01839029611ad",
      "tree": "ab94d4040351d79cca717a8b7e21fc6be5d0fcb5",
      "parents": [
        "48620f1d1b03e1cb4e0dce4999e0a4c2daf3a1b2"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jan 21 15:32:36 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri Feb 14 14:08:57 2014 +0000"
      },
      "message": "Extended locales in AAPT / AssetManager.\n\nSupport 3 letter language codes, script codes \u0026\nvariants. The bulk of the changes are related to\nthe implementation of command line filtering of\nlocales etc. The previous code assumed that the\nvalue of each \"axis\" (locale, density, size etc.)\ncould be represented by a 4 byte type. This is\nno longer the case.\n\nThis change introduces a new class, AaptLocaleValue\nwhich holds a (normalized) locale parsed from a\ndirectory name or a filter string. This class takes\nresponsibility for parsing locales as well as\nwriting them to ResTable_config structures, which is\ntheir representation in the resource table.\n\nThis includes minor changes at the java / JNI level\nfor AssetManager. We now call locale.toLanguageTag()\nto give the native layer a well formed BCP-47 tag.\nI\u0027ve removed some duplicated parsing code in\nAssetManager.cpp and replaced them with functions on\nResTable_config. The native getLocales function has\nbeen changed to return well formed BCP-47 locales as\nwell, so that the corresponding java function can use\nLocale.forLanguageTag to construct a Locale object\nout of it.\n\nFinally, this change introduces default and copy\nconstructors for ResTable_config to prevent having\nto memset() the associated memory to 0 on every\nstack allocation.\n\n(cherry-picked from commit 91447d88f2bdf9c2bf8d1a53570efef6172fba74)\n\nChange-Id: I1b43086860661012f949fb8e5deb7df44519b854\n"
    },
    {
      "commit": "48620f1d1b03e1cb4e0dce4999e0a4c2daf3a1b2",
      "tree": "f3cb2956e73be5cddeef2792622d52a638f643a7",
      "parents": [
        "24d8fa739b7ca0791174af260ed95cdc139e0903"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Jan 20 13:57:11 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri Feb 14 14:08:23 2014 +0000"
      },
      "message": "AssetManager support for 3 letter lang/country codes.\n\n- 3 letter codes are packed into the existing 32 bit locale\n  field in ResTable_config\n- We introduce new fields for script / variant information.\n\nNote that we define a \"match\" between two ResTable_config\nstructures to be purely on the basis of their language \u0026\ncountry (disregarding the script and the variant). However,\nconfigs with scripts and variants are considered to be more\nspecific than those without.\n\n(cherry picked from commit 378c6775a62d9c461cde51f06c1b14bb014c78fd)\n\nChange-Id: I7dce82a3fe2412834252723f458826ae41535a78\n"
    },
    {
      "commit": "d5c8044e7e1f1402fdd4a035690329294ab07b33",
      "tree": "7963a5beae4395899c6b3892d18f1fd8f08e9606",
      "parents": [
        "cbdec7dd8c45f70c678029783ab2f5657f6b36bd",
        "1cbea39fe1740d7d1c3e4aa0e4771a99a56c79ef"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Feb 12 14:41:25 2014 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Feb 12 14:41:25 2014 -0800"
      },
      "message": "resolved conflicts for merge of 1cbea39f to master\n\nChange-Id: Ib33484546c6a03cbc4cd96e97d9d785d68e10700\n"
    },
    {
      "commit": "1cbea39fe1740d7d1c3e4aa0e4771a99a56c79ef",
      "tree": "609e7c7ad6a58d44191de97af33a11d9a5e1c78d",
      "parents": [
        "7594767e55e011101ed9341f01d40730fdbd4cc7",
        "dd3d95f182a634acdcc1b1e8e4954234d048eb54"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Feb 12 14:05:30 2014 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Feb 12 14:08:06 2014 -0800"
      },
      "message": "resolved conflicts for merge of dd3d95f1 to klp-volantis-dev\n\nChange-Id: I96c0f0da852a0b3cf8aef9158678d38aa30f456f\n"
    },
    {
      "commit": "4385d37813897be979ff13262bc464979c74e3dd",
      "tree": "96a45d931fc70ae774e7532f8117515ebece3708",
      "parents": [
        "f991771f81953f5d355eb905d05a784ed7287016"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 11 13:56:21 2014 -0800"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed Feb 12 10:11:34 2014 +0000"
      },
      "message": "Fix build.\n\nAt least part of what is broken.  Other stuff still seems to be.\n\n(cherry picked from 32bb5fae353b5bb6275e75952e89c514c7369cee)\n\nChange-Id: I280376645166fe772ff7a31ff2e8494dce2adbf8\n"
    },
    {
      "commit": "ecbeae74f299f44f9ec4c79ddd885e999d4e1b64",
      "tree": "060184a770f7410ef85c57416bb2422f0abea051",
      "parents": [
        "89492190b39e301d8203d0a9a9f6b11120c16ecb"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Feb 11 18:02:06 2014 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Feb 11 18:02:06 2014 -0800"
      },
      "message": "Use size_t* in AssetManager::createIdmap\n\nResTable::createIdmap takes a size_t*, and the idmap command is\npassing in a size_t*, make AssetManager::createIdmap take a\nsize_t*.  Should fix the mac build.\n\nChange-Id: Idc16dedfe2aa7367c75f89a937a8242d494e8f8e\n"
    },
    {
      "commit": "d9e385b111ebf811beb0f29178a2fbd4d667509f",
      "tree": "99be89e7fadb00b002536146ee76ac5d415c5a3d",
      "parents": [
        "4e795ebe1783623a28a988f77b4f0f11d54e73be"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 11 13:56:21 2014 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@google.com",
        "time": "Tue Feb 11 22:47:42 2014 +0000"
      },
      "message": "Fix build.\n\nAt least part of what is broken.  Other stuff still seems to be.\n\nChange-Id: I367dc0377bd5b4e59d9d9b68f3506bf1d64aa591\n(cherry picked from commit 32bb5fae353b5bb6275e75952e89c514c7369cee)"
    },
    {
      "commit": "32bb5fae353b5bb6275e75952e89c514c7369cee",
      "tree": "e1cb0e8fbdd8c7aa03f1971e4a55da7f8e6d7b68",
      "parents": [
        "6adfd86ca94f3eabb93fb1b4a0b9b0ea50895dcd"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 11 13:56:21 2014 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 11 14:22:14 2014 -0800"
      },
      "message": "Fix build.\n\nAt least part of what is broken.  Other stuff still seems to be.\n\nChange-Id: I367dc0377bd5b4e59d9d9b68f3506bf1d64aa591\n"
    },
    {
      "commit": "47b80be208fcc1d4824bc24959080233a44041db",
      "tree": "2aacece40a95afd54ecd3e446c83fb0a7db4a448",
      "parents": [
        "43750f19e74edf64c1f1332a2e39de0372845d38",
        "be49403a0362c18edaeafe59ac09baac14294dee"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@android.com",
        "time": "Tue Feb 11 20:44:38 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Feb 11 20:44:38 2014 +0000"
      },
      "message": "am be49403a: am 0cd115e1: am 578087e3: Merge \"New command line tool \\\u0027idmap\\\u0027\"\n\n* commit \u0027be49403a0362c18edaeafe59ac09baac14294dee\u0027:\n  New command line tool \u0027idmap\u0027\n"
    },
    {
      "commit": "d6b473713f43dec0828971854fe1018642cfaf27",
      "tree": "4f946766a00098f6f7e33ed74a6e6df7dbab40df",
      "parents": [
        "66ebe94757b18146d429855274e451545ed7ea75"
      ],
      "author": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Mon Feb 10 15:56:36 2014 -0800"
      },
      "committer": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Tue Feb 11 10:47:36 2014 -0800"
      },
      "message": "Move inputservice over to frameworks/native\n\nRemove all of the pieces except the PointerController and SpriteController over\nto frameworks/native in preparation for inputflinger. Those two need to stay in\nframeworks/base for now because they depend on Skia currently. In the long run\nthey should be merged into either the InputManager or the WindowManager rather\nthan as a part of the inputservice / inputflinger.\n\nTry 2.\n\nChange-Id: I84259356d3eb8efc5aefb9d6b311b5fc590ea3ed\n"
    },
    {
      "commit": "91447d88f2bdf9c2bf8d1a53570efef6172fba74",
      "tree": "dc46e96130696c26e8fd3883227314ef5c0b7ad1",
      "parents": [
        "378c6775a62d9c461cde51f06c1b14bb014c78fd"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jan 21 15:32:36 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Feb 10 15:50:16 2014 +0000"
      },
      "message": "Extended locales in AAPT / AssetManager.\n\nSupport 3 letter language codes, script codes \u0026\nvariants. The bulk of the changes are related to\nthe implementation of command line filtering of\nlocales etc. The previous code assumed that the\nvalue of each \"axis\" (locale, density, size etc.)\ncould be represented by a 4 byte type. This is\nno longer the case.\n\nThis change introduces a new class, AaptLocaleValue\nwhich holds a (normalized) locale parsed from a\ndirectory name or a filter string. This class takes\nresponsibility for parsing locales as well as\nwriting them to ResTable_config structures, which is\ntheir representation in the resource table.\n\nThis includes minor changes at the java / JNI level\nfor AssetManager. We now call locale.toLanguageTag()\nto give the native layer a well formed BCP-47 tag.\nI\u0027ve removed some duplicated parsing code in\nAssetManager.cpp and replaced them with functions on\nResTable_config. The native getLocales function has\nbeen changed to return well formed BCP-47 locales as\nwell, so that the corresponding java function can use\nLocale.forLanguageTag to construct a Locale object\nout of it.\n\nFinally, this change introduces default and copy\nconstructors for ResTable_config to prevent having\nto memset() the associated memory to 0 on every\nstack allocation.\n\nChange-Id: I899a56a9a182ee6be52b9389d1ae59266f5482e9\n"
    },
    {
      "commit": "378c6775a62d9c461cde51f06c1b14bb014c78fd",
      "tree": "a91dcdabe03325db4f22b07ed863bbd012a70efb",
      "parents": [
        "dd99d87a125526fc31ef3601a5f1c0edace99a7a"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Jan 20 13:57:11 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Feb 10 15:33:30 2014 +0000"
      },
      "message": "AssetManager support for 3 letter lang/country codes.\n\n- 3 letter codes are packed into the existing 32 bit locale\n  field in ResTable_config\n- We introduce new fields for script / variant information.\n\nNote that we define a \"match\" between two ResTable_config\nstructures to be purely on the basis of their language \u0026\ncountry (disregarding the script and the variant). However,\nconfigs with scripts and variants are considered to be more\nspecific than those without.\n\nChange-Id: I3c2e909ebbebdbbd0ab72a639d531b2b9fdbd9b9\n"
    },
    {
      "commit": "48d22323ce39f9aab003dce74456889b6414af55",
      "tree": "510aa964078d251874e2c0e7c8556f237b5710c4",
      "parents": [
        "65a05fd56dbc9fd9c2511a97f49c445a748fb3c5"
      ],
      "author": {
        "name": "Mårten Kongstad",
        "email": "marten.kongstad@sonymobile.com",
        "time": "Fri Jan 31 14:43:27 2014 +0100"
      },
      "committer": {
        "name": "Zoran Jovanovic",
        "email": "zoran.jovanovic@sonymobile.com",
        "time": "Mon Feb 03 11:20:30 2014 +0100"
      },
      "message": "Runtime resource overlay, iteration 2\n\nSupport any number of overlay packages. Support any target package.\n\nUPDATED PACKAGE MATCHING\n------------------------\nIn Runtime resource overlay, iteration 1, only a single overlay package\nwas considered. Package matching was based on file paths:\n/vendor/overlay/system/framework-res.apk corresponded to\n/system/framework-res.apk. Introduce a more flexible matching scheme\nwhere any package is an overlay package if its manifest includes\n\n    \u003coverlay targetPackage\u003d\"com.target.package\"/\u003e\n\nFor security reasons, an overlay package must fulfill certain criteria\nto take effect: see below.\n\nTHE IDMAP TOOL AND IDMAP FILES\n------------------------------\nIdmap files are created by the \u0027idmap\u0027 binary; idmap files must be\npresent when loading packages. For the Android system, Zygote calls\n\u0027idmap\u0027 as part of the resource pre-loading. For application packages,\n\u0027idmap\u0027 is invoked via \u0027installd\u0027 during package installation (similar\nto \u0027dexopt\u0027).\n\nUPDATED FLOW\n------------\nThe following is an outline of the start-up sequences for the Android\nsystem and Android apps. Steps marked with \u0027+\u0027 are introduced by this\ncommit.\n\nZygote initialization\n   Initial AssetManager object created\n+    idmap --scan creates idmaps for overlays targeting \u0027android\u0027, \\\n           stores list of overlays in /data/resource-cache/overlays.list\n   AssetManager caches framework-res.apk\n+  AssetManager caches overlay packages listed in overlays.list\n\nAndroid boot\n   New AssetManager\u0027s ResTable acquired\n     AssetManager re-uses cached framework-res.apk\n+    AssetManager re-uses cached \u0027android\u0027 overlays (if any)\n\nApp boot\n   ActivityThread prepares AssetManager to load app.apk\n+  ActivityThread prepares AssetManager to load app overlays (if any)\n   New AssetManager\u0027s ResTable acquired as per Android boot\n\nSECURITY\n--------\nOverlay packages are required to be pre-loaded (in /vendor/overlay).\nThese packages are trusted by definition. A future iteration of runtime\nresource overlay may add support for downloaded overlays, which would\nlikely require target and overlay signatures match for the overlay to\nbe trusted.\n\nLOOKUP PRIORITY\n---------------\nDuring resource lookup, packages are sequentially queried to provide a\nbest match, given the constraints of the current configuration. If any\npackage provide a better match than what has been found so far, it\nreplaces the previous match. The target package is always queried last.\n\nWhen loading a package with more than one overlay, the order in which\nthe overlays are added become significant if several packages overlay\nthe same resource.\n\nHad downloaded overlays been supported, the install time could have been\nused to determine the load order. Regardless, for pre-installed\noverlays, the install time is randomly determined by the order in which\nthe Package Manager locates the packages during initial boot. To support\na well-defined order, pre-installed overlay packages are expected to\ndefine an additional \u0027priority\u0027 attribute in their \u003coverlay\u003e tags:\n\n    \u003coverlay targetPackage\u003d\"com.target.package\" priority\u003d\"1234\"/\u003e\n\nPre-installed overlays are loaded in order of their priority attributes,\nsorted in ascending order.\n\nAssigning the same priority to several overlays targeting the same base\npackage leads to undefined behaviour. It is the responsibility of the\nvendor to avoid this.\n\nThe following example shows the ResTable and PackageGroups after loading\nan application and two overlays. The resource lookup framework will\nquery the packages in the order C, B, A.\n\n        +------+------+-     -+------+------+\n        | 0x01 |      |  ...  |      | 0x7f |\n        +------+------+-     -+------+------+\n            |                           |\n        \"android\"                Target package A\n                                        |\n                       Pre-installed overlay B (priority 1)\n                                        |\n                       Pre-installed overlay C (priority 2)\n\nChange-Id: If49c963149369b1957f7d2303b3dd27f669ed24e\n"
    },
    {
      "commit": "65a05fd56dbc9fd9c2511a97f49c445a748fb3c5",
      "tree": "f832a1d344dc2102ebbf247a46dcd2839761161a",
      "parents": [
        "c064a1b5d9a68bb5513e6ed64a067ab822e98764"
      ],
      "author": {
        "name": "Mårten Kongstad",
        "email": "marten.kongstad@sonymobile.com",
        "time": "Fri Jan 31 14:01:52 2014 +0100"
      },
      "committer": {
        "name": "Zoran Jovanovic",
        "email": "zoran.jovanovic@sonymobile.com",
        "time": "Mon Feb 03 09:47:16 2014 +0100"
      },
      "message": "New command line tool \u0027idmap\u0027\n\nIntroduce a new tool \u0027idmap\u0027 to handle generation and verification of\nidmap files. The tool is modelled on \u0027dexopt\u0027, and is intended to be\nused similarly, notably by \u0027installd\u0027.\nSee cmds/idmap/idmap.cpp for further documentation on \u0027idmap\u0027.\n\nNote: this commit is interdependent on a commit in project build/ to add\n\u0027idmap\u0027 to PRODUCT_PACKAGES.\n\nNote: the changes to androidfw are only stubs. The actual implementation\nwill be provided in Runtime resource overlay, iteration 2.\n\nChange-Id: I7131b74ece1e46c8a9c0a31d103e686aa07da2bb\n"
    },
    {
      "commit": "7c4887f66bfa3dad16f8b03dc825ade96d7de130",
      "tree": "9ed404cd4e19d5a28b75fe132fae66bce4550276",
      "parents": [
        "e05b7b50e234e8ed2471f5ad96bb3d715067e9f3"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Jan 27 17:32:37 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri Jan 31 13:47:27 2014 +0000"
      },
      "message": "Change ResourceType cookies to int32_t.\n\nAlso change the order of parameters in ResTable constructors\nto avoid ambiguity.\n\n(cherry picked from commit 00b314436f4fdfada4bbf1e79ec12e9fa38aeaf1)\n\nChange-Id: I874c5d03c134dc3c331fba423b5280366296287c\n"
    },
    {
      "commit": "00b314436f4fdfada4bbf1e79ec12e9fa38aeaf1",
      "tree": "d1d6075692ef537e80d05255a13204a61f0f8a04",
      "parents": [
        "729b12c7a91f9caa65af77197cf6a8814a5a2051"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Jan 27 17:32:37 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jan 28 16:27:52 2014 +0000"
      },
      "message": "Change ResourceType cookies to int32_t.\n\nAlso change the order of parameters in ResTable constructors\nto avoid ambiguity.\n\nChange-Id: If7bfa1f640dddca39b9f26a3ce84081fa7b6e6e3\n"
    },
    {
      "commit": "a0c6260705c841f501282e0e337970ca9a00e064",
      "tree": "5bbe084bd77b819306f743d5fba14ab4a9fff55e",
      "parents": [
        "f85e41f29a0e9313c2d4725f9d9648591ea49f3b"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri Jan 24 13:51:51 2014 +0000"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Jan 27 10:31:11 2014 -0800"
      },
      "message": "AssetManager cookies should be int32_t and not void*.\n\nCookies are really indices into vectors and arrays, so\nthey don\u0027t need to be void*. We choose int32_t instead\nof size_t to allow their width to be well specified.\n\nChange-Id: I319f271bd4f102dee7cb9f00df4c75ea697456f5\n"
    },
    {
      "commit": "ca0b0c18e7eef130e40679b0e77bbcd9a8c901cc",
      "tree": "0de7e7dc08faddb8fc32dbd148fb85e6fa48fda3",
      "parents": [
        "90f58dbf79057b185b04c5003c8bcae10116409b"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Dec 16 15:04:10 2013 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Jan 27 10:31:11 2014 -0800"
      },
      "message": "Fix MCC/MNC typo\n\nManual merge of https://android-review.googlesource.com/70831 across\nthe header refactoring.\n\nChange-Id: I28b6a61e89b68d914124122882976a9d2f81a609\n"
    },
    {
      "commit": "560566d2915c03bed338fc532ac7f7aa3620cfdf",
      "tree": "05c38c1fdcea2989eab2ff6e2934afa4f1f09326",
      "parents": [
        "e1aa223657dd1def8609b377afa86a024bfd4e14"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Dec 03 13:16:03 2013 +0000"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Jan 27 10:31:11 2014 -0800"
      },
      "message": "Reimplement ZipFileRO in terms of libziparchive.\n\nThis lets us share zip archive processing code with both\nthe runtime (Art, dalvik) and critical java code\n(StrictJarFile).\n\nThis change also moves several utility methods to ZipUtils\nand dedups code across several zip inflation methods.\n\nOne of the side effects of this change is that several\nprocessing loops are now O(n) instead of O(n^2).\n\nbug: 10193060\n\n(cherry picked from commit afd31e08299008fdc5c2813f21b2573f29dc53df)\n\nChange-Id: Iae67e62f1dc6dfc3f43e29bc38e3ffd1cb14d191\n"
    },
    {
      "commit": "16c4d154dca43c662571129af31b27433b919a32",
      "tree": "ca326aee44fd70c7db61f7a9632c0d29f6565414",
      "parents": [
        "9ab9b93eae8b2fc747d6101cf0e4c19b2218715f"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Jan 24 13:27:13 2014 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Jan 27 10:31:10 2014 -0800"
      },
      "message": "Revert \"move libandroidfw to frameworks/native\"\n\nThis reverts commit 84b6292c33d71b5739828d08aa8101d1954577f2.\n"
    },
    {
      "commit": "745d4efc8369d255341d810790132660e33d3b61",
      "tree": "f28ae30721d932409fd8189ac6ef5c0289d106c2",
      "parents": [
        "9fc157a4767f54d1cff53dc9489638b67aec2da3"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Jan 27 11:17:22 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Jan 27 11:20:24 2014 +0000"
      },
      "message": "AssetManager cookies should be int32_t and not void*.\n\nCookies are really indices into vectors and arrays, so\nthey don\u0027t need to be void*. We choose int32_t instead\nof size_t to allow their width to be well specified.\n\n(cherry picked from commit ebfdd0f467e39c3af8d92cade78263935340acb7)\n(cherry picked from commit a7fa2e592e2e579e5acdb903dba83fc074ebc215)\n(cherry picked from commit a9d5701b034ed2d9771b3f0943e1add00741d7cd)\n\nChange-Id: I2aed3db568b6fdc487bf99e2c5dd123206736fda\n"
    },
    {
      "commit": "4482e7cb67c516453a67d73e98a085a5f3576953",
      "tree": "c3e17c68af640b8ed4c4f1881e7798ef4095f154",
      "parents": [
        "a0ab49bb52f44eac97f81117d6864edd6a2e0487"
      ],
      "author": {
        "name": "Mårten Kongstad",
        "email": "marten.kongstad@sonymobile.com",
        "time": "Tue Nov 26 14:48:22 2013 +0100"
      },
      "committer": {
        "name": "Zoran Jovanovic",
        "email": "zoran.jovanovic@sonymobile.com",
        "time": "Mon Dec 16 12:42:36 2013 +0100"
      },
      "message": "Fix ResTable_config::CONFIG_* typo (MCC vs MNC)\n\nIn commit 08d5b8f, the ResTable_config::CONFIG_* enum was incorrectly\nchanged to assign the same value to both CONFIG_MCC and CONFIG_MNC:\n    - CONFIG_MCC \u003d 0x0001,\n    - CONFIG_MNC \u003d 0x0002,\n    + CONFIG_MCC \u003d ACONFIGURATION_MCC,\n    + CONFIG_MNC \u003d ACONFIGURATION_MCC,\n\nThis commit assigns CONFIG_MNC the value ACONFIGURATION_MNC, as\nintended.\n\nChange-Id: I3b8799914a55debdb3ff30a82ada7ad990c49970\n"
    },
    {
      "commit": "afd31e08299008fdc5c2813f21b2573f29dc53df",
      "tree": "7f83dd8f1e7ed71d4fe8ce280841e43ce275ac6d",
      "parents": [
        "6e2d0c1d91f644ab50e0c0b7cae4306262a4ca41"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Dec 03 13:16:03 2013 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Dec 09 16:23:16 2013 +0000"
      },
      "message": "Reimplement ZipFileRO in terms of libziparchive.\n\nThis lets us share zip archive processing code with both\nthe runtime (Art, dalvik) and critical java code\n(StrictJarFile).\n\nThis change also moves several utility methods to ZipUtils\nand dedups code across several zip inflation methods.\n\nOne of the side effects of this change is that several\nprocessing loops are now O(n) instead of O(n^2).\n\nbug: 10193060\n\nChange-Id: I3c7188496837a47246c4f342e45485a70fef3169\n"
    },
    {
      "commit": "84b6292c33d71b5739828d08aa8101d1954577f2",
      "tree": "d39f8bbaf0f20fa086038741e117278bb67ba1b2",
      "parents": [
        "92a6f3018ace5aa2d5ea74e7d378b6960b5e053e"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@google.com",
        "time": "Thu Oct 03 10:30:18 2013 -0700"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@google.com",
        "time": "Thu Oct 03 10:30:18 2013 -0700"
      },
      "message": "move libandroidfw to frameworks/native\n\nChange-Id: Ic5b8a2742c7141156ab0f00ca29097bfe92bce60\n"
    },
    {
      "commit": "83ad4e393ae8223745924ac9b37949c8efbce3f2",
      "tree": "469ca23b4b673f98a9c5e17983778b3b41201443",
      "parents": [
        "0281b406365080bce90d8562950cfcfd83b48303"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 05 13:27:39 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 05 14:12:50 2013 -0700"
      },
      "message": "Remove an unused C zip API.\n\nChange-Id: I10ae849bdedf3e3bb97547c4f9e5a20742e9d6b1\n"
    },
    {
      "commit": "d45c68dd24fe3dd510af5a9591b5e2f509b56772",
      "tree": "f9a3d18ecce9509eddcc2b4c5899e2b7c90765a2",
      "parents": [
        "af728bd201195799c8e993ece145d607b9ca67df"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jul 31 12:14:24 2013 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jul 31 15:57:49 2013 -0700"
      },
      "message": "Resource memory optimization.\n\nDon\u0027t ever need the cached UTF-16 string conversions on the\ndevice.  Don\u0027t need to create those strings, and don\u0027t need\nto create the lookup array for them at all.  This requires\nfixing all of the remaining places in the platform where we\ninteracted with the resources with the blind assumption that\nthe strings are UTF-16.\n\nChange-Id: Ia0e5a150499837471e494e85b23b05fa06e0cf1d\n"
    },
    {
      "commit": "9d3b1a424c5c61e24e9659d15fb353026a00d925",
      "tree": "0e543391e3ac7b6ac0bff377e08cd2e233ef7363",
      "parents": [
        "8f5e3d13e166e4873e130a5ef7c987333dbac917"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jul 01 19:07:15 2013 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jul 01 20:11:42 2013 -0700"
      },
      "message": "Move input library code to frameworks/native.\n\nNo longer compile libandroidfw as a static library on the device\nsince it already exists as a shared library.  Keeping the static\nlibrary would force us to provide a static library version of\nlibinput for the device as well which doesn\u0027t make sense.\n\nChange-Id: I3517881b87b47dcc209d80dbd0ac6b5cf29a766f\n"
    },
    {
      "commit": "1f5762e646bed2290934280464832782766ee68e",
      "tree": "123bcdf3ba4c98f885631b02bb90803b7885e438",
      "parents": [
        "9f3e1175657425115e863fdb256b83cadedc33e9"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 06 20:20:34 2013 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue May 07 17:09:46 2013 -0700"
      },
      "message": "libutils clean-up\n\nChange-Id: I11ee943da23a66828455a9770fc3c5ceb4bbcaa9\n"
    },
    {
      "commit": "fb903a45d7b924c1dfacadaa99ebdf93fd8a1de4",
      "tree": "6db6caa0c8d1cb6ac02175c5e2721fc8e5e605dd",
      "parents": [
        "007d4d7040c9b41de584e79ba7dbd15d25f54971"
      ],
      "author": {
        "name": "Bjorn Bringert",
        "email": "bringert@android.com",
        "time": "Mon Mar 18 21:17:26 2013 +0000"
      },
      "committer": {
        "name": "Bjorn Bringert",
        "email": "bringert@android.com",
        "time": "Fri Apr 26 15:07:09 2013 +0100"
      },
      "message": "Allow compiling aapt for the device\n\nChanges:\n\n- The static device version of libandroidfw now includes\n  the extra functions needed by aapt. I could only find\n  a few host tools that use the static library, so this is\n  hopefully not a problem.\n\n- The pseudolocalization code is moved into aapt.\n  It was previously in libhost, but only used by aapt.\n\nChange-Id: Ib393ebb7dcebee8abbb628cbe5255ea1679674ac\n"
    },
    {
      "commit": "a44dd26a75e24cc021802288fb81f4761e47be6b",
      "tree": "ce61491d8a35cc7a61af5597f6709b3c92504a54",
      "parents": [
        "c3d0a81a4a1809446bc1fa9abc9b5b74b01e676e"
      ],
      "author": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Wed Apr 10 21:12:00 2013 -0700"
      },
      "committer": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Mon Apr 22 17:01:51 2013 -0700"
      },
      "message": "Rewrite input handling for native applications\n\nBug: 8473020\nChange-Id: Ic4353d8924ab877bec21aff8c2dba9fe725bf906\n"
    },
    {
      "commit": "bdb706e48d71af498156efbb10d0f0c1fcef8878",
      "tree": "d7fc1d7057e9055fa23d1c49adcdbe7dd34799c3",
      "parents": [
        "8299f683f3fbe7ba0f5387b062b31de117882dba",
        "c6091c64c90e9557ea58e0d7cf75915aea7c6c3e"
      ],
      "author": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Fri Apr 05 21:43:31 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Apr 05 21:43:31 2013 +0000"
      },
      "message": "Merge \"Pipe through device resolution information\" into jb-mr2-dev"
    },
    {
      "commit": "1951ce86c21445ac191e4d2d95233f4f5c096b56",
      "tree": "8c68eb0fe87565bcdaf7cd8bd2a56a03319bede5",
      "parents": [
        "41c076715da58990dc9b0be749bba28fc75d3b78"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Apr 04 22:45:12 2013 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Apr 04 22:45:12 2013 -0700"
      },
      "message": "Correctly manage the lifecycle of IME InputChannels.\n\nInputChannels are normally duplicated when sent to a remote process\nover Binder but this does not happen if the recipient is running within\nthe system server process.  This causes problems for KeyGuard because the\nInputMethodManagerService may accidentally dispose the channel\nthat KeyGuard is using.\n\nFixed the lifecycle of InputChannels that are managed by the IME\nframework.  We now return a duplicate of the channel to the application\nand then take care to dispose of the duplicate when necessary.\nIn particular, InputBindResult disposes its InputChannel automatically\nwhen returned through Binder (using PARCELABLE_WRITE_RETURN_VALUE).\n\nBug: 8493879\nChange-Id: I08ec3d13268c76f3b56706b4523508bcefa3be79\n"
    }
  ],
  "next": "c6091c64c90e9557ea58e0d7cf75915aea7c6c3e"
}
