)]}'
{
  "log": [
    {
      "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": "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": "f001e37b316a0d5b9c9eda08bbe53ea4b06562a3",
      "tree": "085f4aeed2b7271b3d573b143ad5e4be6657585e",
      "parents": [
        "272b0a1d6acdb7c4d244a498f3769e20c35f43d1"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Oct 20 16:15:33 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Oct 24 18:39:56 2014 +0000"
      },
      "message": "libandroidfw: Do not build device library when building SDK\n\nBuilding the windows SDK causes a build failure if the device\nlibandroidfw target is not omitted.\n\nChange-Id: I587b166342d0d047820911d279f192d2b39b6263\n"
    },
    {
      "commit": "60293197379e522c870c4a28462804207bab505d",
      "tree": "0b736bb0002e0d43109652d603ca0506524a064f",
      "parents": [
        "74af6700196ed55a0aa39c7777293e735e7b4d73"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Oct 21 18:36:42 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Oct 23 16:01:58 2014 -0700"
      },
      "message": "Added some more Split density tests\n\nChange-Id: I3b83515f1240e713bbcff5385cf054bba693f297\n"
    },
    {
      "commit": "e60a87f5529b2867ba3f4e60b39d7b47b67f8ca3",
      "tree": "551bd0808ffd3dd737a2349d0e3801f9acc66612",
      "parents": [
        "49c5ddd67793735a2d6fc036614cdfab944d56f6"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Oct 09 11:08:04 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Oct 09 11:26:19 2014 -0700"
      },
      "message": "Search all packages for a given type string when looking up resources by name\n\nPreviously we would stop at the first match when looking for a type string,\nbut we should search all packages in case a feature Split added a type\nwith the same name.\n\nBug:17924027\n\nChange-Id: I6bc7ef073324db99448538cd8bdf566658f066ff\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": "9d9cc6233c7035c32d3b8622aa5dc7d413193dc7",
      "tree": "4cd16aa103935fadde447a88f2245159be3e8881",
      "parents": [
        "0ae64a84af9304bb493bc9bf0e0f32cac564ec48"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Aug 29 14:10:04 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Aug 29 14:34:54 2014 -0700"
      },
      "message": "Add test to ensure themes get copied from separate resource tables\n\nChange-Id: I94e9966cf1e9d0e7e6c7daa0606a87bb0f67705e\n"
    },
    {
      "commit": "d79e33379d56e20b7dd67baa992409b72a335ded",
      "tree": "94ad4f94d041493db6e92768299bd1ece0972dc0",
      "parents": [
        "5283faba4a75a4d1fd9990637d22768e423895e3"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Aug 29 12:29:31 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Aug 29 12:29:31 2014 -0700"
      },
      "message": "Clean up test allocations so real memory leaks are more visible\n\nChange-Id: Ic405f08c8d8e3e7fc4e4a991671e980752c19899\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": "2cb761e3ddb9d68ab430013e9cd15ecaab9fbc62",
      "tree": "2bd700b1bc3ae8d3855103c1a82c229d5d79e131",
      "parents": [
        "4482e4bb8d1f5fe586b641bc3d6298dc7b8fee80"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Aug 15 13:59:02 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Aug 15 14:01:43 2014 -0700"
      },
      "message": "Fix assumption about DynamicRefTable in aapt\n\nPackages without any resources should not expect to have\na DynamicRefTable.\n\nBug:16895517\nBug:17056720\nChange-Id: Id006f6bdbf08f30505f6ba5982bc9d1b09db0f0a\n"
    },
    {
      "commit": "18560886cbb7825c1bb034c96e5d0cd4dbdbb8ee",
      "tree": "a286eed127d66b4d09a4a2cb6caf8656bf83a2ff",
      "parents": [
        "e23a91e2bdab06e3c0c64201e88e50ab76c6b74b"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Aug 15 17:18:21 2014 +0000"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Aug 15 17:18:21 2014 +0000"
      },
      "message": "Revert \"Fix aapt dump for APKs with no resources\"\n\nThis reverts commit 0e475302cd196f45a01a525c49089018b238d4ba.\n\nI\u0027ll re-upload this CL with the correct fix in LoadedApk.\n\nChange-Id: I17c6381f8e5907dab9f996f89c5d435b9c08a13a\n"
    },
    {
      "commit": "e23a91e2bdab06e3c0c64201e88e50ab76c6b74b",
      "tree": "aba593b1c33e6f76fc7efca40e50a976dbff4480",
      "parents": [
        "0204938659d93347081caec107661ea3734f1a65"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Aug 14 13:53:34 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Aug 14 21:20:41 2014 +0000"
      },
      "message": "Fix aapt dump for APKs with no resources\n\nAll APKs are expected to have at least one resource table (even if\nit is empty). We were missing the creation of an empty DynamicRefTable.\n\nBug:16895517\nChange-Id: I6a6e887f91b3b4bbcc52b3fd2741ef3d05fab1fd\n"
    },
    {
      "commit": "ccf25c7bf69eb8c04246e3f79da31b52c2922a80",
      "tree": "c0b7f90e9ad86e32c3fac4d289a49eaf69db99eb",
      "parents": [
        "1584609f422c338ade65b8b4078b434ba3a81253"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Aug 08 15:32:40 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Aug 11 09:16:01 2014 -0700"
      },
      "message": "Fix shared library bug in bag attributes\n\nA ResTable_map entry has a name attribute, which\ncould be a dynamic reference if it comes from\na shared library. It was not being patched with\nthe correct package id.\n\nBug:16795890\nChange-Id: Ia8df6a943269b2fefb2132c3ed74eb1997d7701b\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": "c7400b0ce66e916cf8be239c26cd5acbd15ef745",
      "tree": "b585283edc9daa4921bb737d3251c976a3fde58f",
      "parents": [
        "374041a63dffb49dae89ab9959c96b50f4db98e9",
        "8c1c0a6881b1507f9ae25d753b64de185a7615b2"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jul 01 10:43:41 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jul 01 10:43:41 2014 +0000"
      },
      "message": "am 8c1c0a68: am 7f319c47: am 1dc550fa: Merge \"Fix packing of values at offset 16.\"\n\n* commit \u00278c1c0a6881b1507f9ae25d753b64de185a7615b2\u0027:\n  Fix packing of values at offset 16.\n"
    },
    {
      "commit": "b2975916224caecfc2fbb84e71ebd625ce6eeb1c",
      "tree": "f60365e0cd6f2b4f2b508d2b3ed11099338827d8",
      "parents": [
        "7165bd6d7496159b426f072bdf13adfffc917a24"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Jun 30 15:59:39 2014 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Jun 30 16:20:27 2014 +0100"
      },
      "message": "Fix packing of values at offset 16.\n\nOur bitmask for setting the highest bit to 0 for\n0b11100000 (0xef) instead of 0b01111111 (0x7f) so\nwe would end up setting bit 5 of each offset to\nzero. Fix this and expand test coverage by adding\na fake language (tgp) that has this bit set in both\nits bytes.\n\nThis issue was discovered while adding CTS tests for\n\"tgl\".\n\nChange-Id: Ibb6de03000951c907c252049771039ab7466187a\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": "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": "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": "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": "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": "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": "fd5f566db84722f9cf54085d8a378e9398ef260d",
      "tree": "99a1785b8ad569fde85245570ebb0f9e7fac8ad9",
      "parents": [
        "6885d577cbfe8dedcdb82fc066a4408ea762204f"
      ],
      "author": {
        "name": "Chris Wren",
        "email": "cwren@android.com",
        "time": "Thu Sep 19 13:03:53 2013 -0400"
      },
      "committer": {
        "name": "Chris Wren",
        "email": "cwren@android.com",
        "time": "Wed Sep 25 19:33:21 2013 +0000"
      },
      "message": "add a test for BackupData helpers.\n\nBug: 10821481\nChange-Id: I3e28123d36927ae4a22d26378b8bf1cd4e87cfd2\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": "f0771b192c5530681ca407bdf3c1b21fd519c897",
      "tree": "057579d86cc18f7edfe3d2e7e8676ed84624f644",
      "parents": [
        "912c37802cd2e3e10495ea4b7c9dc3ccdd1702e5",
        "cee1124052202c7f2a1956a54e5aa538d82197a7"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Oct 02 13:10:59 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 02 13:10:59 2012 -0700"
      },
      "message": "am cee11240: am 07b4339b: Merge \"Change androidfw tests to native test target\"\n\n* commit \u0027cee1124052202c7f2a1956a54e5aa538d82197a7\u0027:\n  Change androidfw tests to native test target\n"
    },
    {
      "commit": "f3f286df4d79834ec350bdc18d01acd51f4791e1",
      "tree": "8956d02b4a340682a3c948914fd10d866fce22e3",
      "parents": [
        "77728b010e34069a904c9e8a40e03b8829cfb8ae"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Oct 02 10:52:47 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Oct 02 11:54:01 2012 -0700"
      },
      "message": "Change androidfw tests to native test target\n\nChange the androidfw tests to the BUILD_NATIVE_TEST target so they end\nup in the correct directory. Also remove the module tags and C include\npaths. The include paths are automatically added when the library is\nused.\n\nChange-Id: Ia47f6c25130c5068b89d6dc067e5d9c714a6d08a\n"
    },
    {
      "commit": "4b447b91debda9c9a0e230cab9e140e356b2a305",
      "tree": "df6f200b93e6bbc5345d439a00e6d9a22fc9e406",
      "parents": [
        "0cedfe09e5083a274a8c449ca52f735a177e1817"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Jun 26 15:03:38 2012 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Jun 26 15:03:38 2012 -0700"
      },
      "message": "Add mode when open(O_CREAT) is used.\n\nWhen creating a new file using open(..., O_CREAT), it is an error\nto fail to specify a creation mode. If a mode is not specified, a\nrandom stack provided value is used as the \"mode\".\n\nThis will become a compile error in a future Android change.\n\nChange-Id: I8635e8b69587ed107253870d991c3fcf563ca876\n"
    },
    {
      "commit": "771526c88f5cc4b56a41cb12aa06a28d377a07d5",
      "tree": "71c36f271192ee66f069f0d1130a73e91b8302b9",
      "parents": [
        "330314c6fb7c178c0f0da65d6aa8c9e7d3004568"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Apr 27 15:13:25 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Apr 27 15:58:42 2012 -0700"
      },
      "message": "Resample touch events on frame boundaries.\n\nBug: 6375101\nChange-Id: I8774e366306bb2b6b4e42b913525bf25b0380ec3\n"
    },
    {
      "commit": "a982dc05d7ca919c07f50e446549ef9dceadf6bd",
      "tree": "e9b0e1564069bf39447db97b966a01c6dda66609",
      "parents": [
        "54c546223cd550d2995ec6d956a8e7963311a0a6"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Mar 22 18:43:07 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Mar 22 18:43:07 2012 -0700"
      },
      "message": "frameworks/base: move Zip* from libandroidfw to libutils\n\nZipUtils is needed by build/tools, move it from libandroidfw\n(frameworks/base) to libutils (frameworks/native).\n\nChange-Id: I2b4b7adcdf68eb25ee7cba5dd3b69eadf0523af3\n"
    },
    {
      "commit": "08965ec67ada98f63f8ac879cc44c8b0e7ff046d",
      "tree": "9f8deeff644b4556c1054115e67de94bc6c39965",
      "parents": [
        "2d5ddd18688109e00229c577cefe1501ae39589e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Mar 05 16:16:58 2012 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Mar 07 19:34:36 2012 -0800"
      },
      "message": "fixup hardcoded include paths for new project\n\nChange-Id: Id443ec5c99bb4d7653905f1be1f72a029e0cf087\n"
    },
    {
      "commit": "83c64e6b624a876436d2ef5d2f173b10407e27b4",
      "tree": "c4effc3260ab399e8fdae23baf06b076cd87a604",
      "parents": [
        "94d0024557f415b8463f085c9784a3e1d02b58c6"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Feb 20 16:58:20 2012 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Feb 20 22:38:43 2012 -0800"
      },
      "message": "frameworks/base refactoring\n\ncreate the new libandroidfw from parts of libui and libutils\n\nChange-Id: I1584995616fff5d527a2aba63921b682a6194d58\n"
    }
  ]
}
