)]}'
{
  "log": [
    {
      "commit": "33af6c730f9f7fc51f04516c7a22cac82cb9823e",
      "tree": "94f834ef6df06b8b534cb3a053de308f74793a09",
      "parents": [
        "c463bed8dbfbb5bbac791299e8997282685e64d2"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Mar 29 13:00:35 2017 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Mar 29 20:11:04 2017 +0000"
      },
      "message": "AAPT2: Parse an ID encoded as a map\n\nID types should not be encoded as a map. AAPT and AAPT2 emit\nIDs as boolean types.\n\nSome apps exist that for some reason have their ID types encoded\nas empty maps. This is the case only for the auto generated IDs\nfrom enum values in \u003cattr\u003e tags.\n\nAllow IDs as maps and ignore their content when processing an APK\nfor optimizing.\n\nAlso fixes an issue with expected size of the ResTable_package struct.\n\nBug: 35861796\nTest: tested against the APK in b/35861796\nChange-Id: I29a19cd9777bb10bed6766cd42e35e50e098797b\n"
    },
    {
      "commit": "136fd0764faf7a588b4a1b479d7a8cc6fe18fcc6",
      "tree": "91f7316861e5d879a627bd00578170791889c528",
      "parents": [
        "485c0feea53199b1d43db8782073044c846424c4"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Mar 03 13:50:21 2017 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Mar 03 14:01:09 2017 -0800"
      },
      "message": "AAPT2: Fix parsing ResTable_type\n\nResTable_type\u0027s size changes due to it containing\nResTable_config. Make sure we check for the minimum size\nrequired to read it.\n\nBug: 35861796\nTest: Manual (don\u0027t have an integration test harness setup yet)\nChange-Id: Ifb0cd1d732625f59835c8ed0449adb78129636de\n"
    },
    {
      "commit": "929d6517dfd338f0d481dbe6587643d5aef27ec6",
      "tree": "b80a93b93946bd4e982b9f4abd97a4c3aa43feb3",
      "parents": [
        "c270de85cc0c398d9ce165592908d2740219a708"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Jan 16 19:11:19 2017 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Feb 08 06:04:52 2017 -0800"
      },
      "message": "AssetManager2: Add GetResourceId\n\nAdd ability to lookup a resource by name.\n\nTest: make libandroidfw_tests\nChange-Id: I262ba5ce4c9892458226fbdb44cf21f9877fb92d\n"
    },
    {
      "commit": "0c40524953f3d36a880f91183302a2ea5c722930",
      "tree": "eb7a15ddd974e1263864902f9f3dd019a47343fc",
      "parents": [
        "a9285db08883dbbe7b5eb9276cb52b7e01b42aa3"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Jan 13 20:47:26 2017 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jan 31 16:20:29 2017 -0800"
      },
      "message": "AssetManager2: Add other support methods\n\n- Add GetResourceConfigurations()\n- Add GetResourceLocales()\n- Add ResolveReference()\n- Add stub for GetResourceId()\n- Change LoadedArsc and ApkAssets factory method to return const\n\nTest: make libandroidfw_tests\nChange-Id: Ia797dc9381a523b1a3e7029048a413e544730379\n"
    },
    {
      "commit": "c6aada9c5789b2777b19c522d3cd5052bbe784a4",
      "tree": "e78d92b927ba7fb951c0898fe28957a19671a684",
      "parents": [
        "90572a4ab8ac393c57e896be3c608e634866ed38"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Jan 13 15:34:14 2017 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Jan 27 16:52:53 2017 -0800"
      },
      "message": "LoadedArsc: Support feature splits.\n\nTest: make libandroidfw_tests\nChange-Id: I278273e688da597f4af86dd55f87750501ef8154\n"
    },
    {
      "commit": "da431a22da38f9c4085b5d71ed9a9c6122c6a5a6",
      "tree": "7fc684c1ec3c653ff98bdc8eff50addc081a02e1",
      "parents": [
        "7ad1110ecd6a840fcd2895c62668828a1ca029c6"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Dec 29 16:08:16 2016 -0500"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jan 11 17:20:36 2017 -0800"
      },
      "message": "libandroidfw: Add new support for shared libraries\n\nThis adds support for shared resource libraries in the new\nResTable/AssetManager implementation.\n\nThe dynamic package map encoded in resources.arsc is parsed\nand stored with LoadedArsc, and combined to form a resolved table\nin AssetManager2.\n\nBenchmarks show that this implementation is an order of magnitude\nfaster on angler-userdebug (make libandroidfw_benchmarks).\n\nTest: libandroidfw_tests\nChange-Id: I57c80248728b63b162bf8269ac9495b53c3e7fa0\n"
    },
    {
      "commit": "7ad1110ecd6a840fcd2895c62668828a1ca029c6",
      "tree": "f9f11b0849333b1bbcb37b76170787414c92ddbc",
      "parents": [
        "e2489c67e1f17938556a29197eeff9221caddd35"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Oct 28 16:39:15 2016 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jan 11 13:30:57 2017 -0800"
      },
      "message": "New implementation of AssetManager/ResTable\n\nThe multiwindow model and Resources-per-activity\nmodel that came in N puts greater demands on AssetManagers.\nThey are created whenever window dimensions change, which\ncan be frequently. There is a need to be able to cheaply\ncreate a new AssetManager for each Activity, which shares\na lot of underlying state.\n\nIn order to make the creation of AssetManagers cheap,\nwe need a new implementation of the native AssetManager\nand ResTable to support immutable representations of\nAPKs. This new data structure/class is ApkAssets.\n\nApkAssets have the same functionality of an AssetManager, except\nthat they operate on a single APK, and they do not do any caching.\nOnce loaded, they are immutable.\n\nApkAssets will be exposed as a Java object, with its implementation in\nnative code. The existing Java StringBlock will be owned by ApkAssets,\nwhich means that Strings can be shared across AssetManagers.\n\nApkAssets can be cached by the ResourcesManager. Creating an AssetManager\nrequires only a list of ApkAssets and a configuration.\n\nAssetManager2 (named with the suffix \u00272\u0027 for now while transitioning\nto the new implementation) caches bags that are accessed.\n\nSince ApkAssets are expected to be kept around longer, they do more validation\nof the resource table, which cause slower load times. Measured on an angler-userdebug,\nloading the framework assets takes 11ms with ApkAssets, and 2ms with the old\nAssetManager implementation.\n\nThe tradeoff is that there does not need to be any security checks once an ApkAssets\nis loaded, and regular resource retrieval is faster. Measured on an angler-userdebug,\naccessing resource (android:string/ok) with many locales takes 18us with AssetManager2,\nand 19us with AssetManager (this is per resource, so these add up).\n\nTest: make libandroidfw_tests\nChange-Id: Id0e57ee828f17008891fe3741935a9be8830b01d\n"
    }
  ]
}
