)]}'
{
  "log": [
    {
      "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": "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": "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": "b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4",
      "tree": "2b90dc39a35d8081ea47b038893624b69a01202d",
      "parents": [
        "6db0608dff408130b35e6f21abe746a635648b18"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 17 18:27:36 2012 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 17 19:01:26 2012 -0800"
      },
      "message": "frameworks/base refactoring.\n\nstep 2: move libutils headers to their new home: androidfw\n\nChange-Id: I14624ba23db92a81f2cb929f104386e1fab293ef\n"
    },
    {
      "commit": "66269ea6f68f2f25888ce1080c94ac782742fafc",
      "tree": "0ecbefcdbecf98cbacd428a422e6a2a846ac726e",
      "parents": [
        "e432a0005180ba9ac2c1d7822c4761b475fddc51"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jul 12 14:14:01 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jul 26 10:14:58 2011 -0700"
      },
      "message": "Move extract native libraries to JNI code\n\nThe built-in ZipFile class was quite a long time to find an unpack\nlibraries. Move everything to using the libutils ZipFileRO class that\ngoes quite a bit faster. Initial measurements are 6 times faster than\nthe Java code.\n\nAlso, read files off the disk and compare their CRC against the APK\u0027s\nCRC to see if we need to write the new file to disk. This also cuts down\nthe bootup time by up to a second per APK that has native files.\n\nChange-Id: Ic464a7969a17368fb6a6b81d026888c4136c7603\n"
    },
    {
      "commit": "ddb76c4644756b31be948d70aaa8ee541dd94999",
      "tree": "782d260d2da982941148be7c1a0a0780749cdfdc",
      "parents": [
        "8028a951c3aa74990907efb9376d1093d84084af"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 24 12:56:06 2010 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Dec 08 11:21:30 2010 -0800"
      },
      "message": "Change assets to use 64-bit API\n\nThe asset system and supporting libraries were using off_t instead of\noff64_t to access files larger than 2GB (32-bit signed). This change\nreplaces all off_t with off64_t and lseek64.\n\nThere is a new utils/Compat.h added for Mac OS compatibility.\n\nAlso fixed some size-related compiler warnings.\n\nBug: 3205336\nChange-Id: I9097b3cb7a602e811fe52f245939d8975da55e9e\n"
    },
    {
      "commit": "259ec46e8e80a9f1d0b5c7a3865a498110a7f11b",
      "tree": "c2987b5a006425d41438227011f5b9b5a6febb15",
      "parents": [
        "106950f20bd352ed72ddf4490b2e19d305e36a74"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Oct 04 14:20:14 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Oct 04 15:17:19 2010 -0700"
      },
      "message": "Use pread() in ZipFileRO for Linux\n\nAssetManager instances are created by zygote and passed to all its\nchildren so that they don\u0027t have to individually open\nframeworks-res.apk. This creates a problem for determining the current\nfile offset when using lseek() on those files, because you can\u0027t\nguarantee the cross-process locking of a mutex. Luckily, Linux\nimplements pread() to get around this suckiness.\n\nThe problem is that only Linux implements this, so we have to keep the\nold locking for use on host builds with aapt and friends. aapt doesn\u0027t\nhave this same problem of sharing file descriptors across forked\nprocesses, so we can keep the local AutoMutex to protect accesses of\nthose files.\n\nChange-Id: Ibe9f11499a53fe345f50fbaea438815ec0fd363e\n"
    },
    {
      "commit": "6cb241f9024c6923715cf4e9eeaf803a7d258750",
      "tree": "455507c53e8e0d20dee11d1888cebd67ff947523",
      "parents": [
        "306137d97f40a4f807c54a75210343c9262360d1"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Oct 01 18:28:28 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Oct 01 18:30:59 2010 -0700"
      },
      "message": "ZipFileRO: moar logging and wrap close\n\nThere is apparently still a race upon reading the entry Local File\nHeader that can\u0027t be tracked down, so move the LFH check inside the\nmutex-protected block so we can call lseek again to see where we are\nwhen we log an error.\n\nAlso, close() can fail so use TEMP_FAILURE_RETRY on it so we don\u0027t\nunwittingly leak file descriptors when Mean Mr. EINTR comes a-knocking.\n\nChange-Id: I753abad0bd882fe28f7281c406fa76f64393ef4c\n"
    },
    {
      "commit": "6458fa0fce4bce7f3f9cccbacf9116f6f08abdf1",
      "tree": "e0ffbaae8f45022b61189e96f99faffc36cca3b4",
      "parents": [
        "7f459df9f94bc52e53d42894dea4702394fbad5c"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Sep 24 07:57:37 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Sep 24 08:05:51 2010 -0700"
      },
      "message": "Add locking around ZIP seeking\n\nSince we switched to seeking to the LFH to verify its existence instead\nof a huge mmap of the file, we have to guarantee that another seek\ndoesn\u0027t happen before we finish our read on the LFH.\n\nChange-Id: If8135d9cb6f2f5cc4db734eafa4f6b5f6269c62a\n"
    },
    {
      "commit": "68246dcec17c245a434dad70b778960dc5c84af1",
      "tree": "00aaacdfd3147c87c0d0d4761817a797e7af346a",
      "parents": [
        "dc3e26071399789c5966b9cd67180437f44eb9dd"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Apr 22 18:28:29 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed May 12 05:07:48 2010 -0700"
      },
      "message": "ZipUtilsRO rewrite based on Dalvik Zip rewrite\n\nChange the way zip archives are handled.  This is necessary to deal with\nvery large (~1GB) APK files, for which our current approach of mapping\nthe entire file falls over.\n\nWe now do the classic scavenger hunt for the End Of Central Directory\nmagic on a buffer of data read from the file, instead of a memory-mapped\nsection.  We use what we find to create a map that covers the Central\nDirectory only.\n\nIf the caller is interested in unpacking the file contents, we have to\ndo an additional file read to discover the size of the Local File Header\nsection so we can skip past it.\n\nThis is based on Change I745fb15abb in the dalvik tree. Both\nimplementations share a common ancestry, but the cost of unifying them\noutweighs the benefits of wrapping C calls.\n\nChange-Id: Iddacb50fe913917c2845708a530872d65fdbe620\n"
    },
    {
      "commit": "9066cfe9886ac131c34d59ed0e2d287b0e3c0087",
      "tree": "d88beb88001f2482911e3d28e43833b50e4b4e97",
      "parents": [
        "d83a98f4ce9cfa908f5c54bbd70f03eec07e7553"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:31:44 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:31:44 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "d83a98f4ce9cfa908f5c54bbd70f03eec07e7553",
      "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
      "parents": [
        "076357b8567458d4b6dfdcf839ef751634cd2bfb"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:45 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:45 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "54b6cfa9a9e5b861a9930af873580d6dc20f773c",
      "tree": "35051494d2af230dce54d6b31c6af8fc24091316",
      "parents": [],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "message": "Initial Contribution\n"
    }
  ]
}
