AAPT2: Add Inline Complex XML support

See: https://developer.android.com/guide/topics/resources/complex-xml-resources.html

Change-Id: I8274c85e25cabf90423141c228697e873167d136
diff --git a/tools/aapt2/dump/Dump.cpp b/tools/aapt2/dump/Dump.cpp
index 88c6f64..f61ec94 100644
--- a/tools/aapt2/dump/Dump.cpp
+++ b/tools/aapt2/dump/Dump.cpp
@@ -37,6 +37,7 @@
     std::unique_ptr<ResourceFile> file = deserializeCompiledFileFromPb(pbFile, source,
                                                                        context->getDiagnostics());
     if (!file) {
+        context->getDiagnostics()->warn(DiagMessage() << "failed to read compiled file");
         return;
     }
 
@@ -112,9 +113,27 @@
         if (!table) {
             // Try as a compiled file.
             CompiledFileInputStream input(fileMap->getDataPtr(), fileMap->getDataLength());
-            if (const pb::CompiledFile* pbFile = input.CompiledFile()) {
-               dumpCompiledFile(*pbFile, input.data(), input.size(), Source(filePath), context);
-               return;
+
+            uint32_t numFiles = 0;
+            if (!input.ReadLittleEndian32(&numFiles)) {
+                return;
+            }
+
+            for (uint32_t i = 0; i < numFiles; i++) {
+                pb::CompiledFile compiledFile;
+                if (!input.ReadCompiledFile(&compiledFile)) {
+                    context->getDiagnostics()->warn(DiagMessage() << "failed to read compiled file");
+                    return;
+                }
+
+                uint64_t offset, len;
+                if (!input.ReadDataMetaData(&offset, &len)) {
+                    context->getDiagnostics()->warn(DiagMessage() << "failed to read meta data");
+                    return;
+                }
+
+                const void* data = static_cast<const uint8_t*>(fileMap->getDataPtr()) + offset;
+                dumpCompiledFile(compiledFile, data, len, Source(filePath), context);
             }
         }
     }