diff --git a/libs/androidfw/LoadedArsc.cpp b/libs/androidfw/LoadedArsc.cpp
index 72873ab..882dc0d 100644
--- a/libs/androidfw/LoadedArsc.cpp
+++ b/libs/androidfw/LoadedArsc.cpp
@@ -401,7 +401,9 @@
 
 std::unique_ptr<const LoadedPackage> LoadedPackage::Load(const Chunk& chunk,
                                                          const LoadedIdmap* loaded_idmap,
-                                                         bool system, bool load_as_shared_library) {
+                                                         bool system,
+                                                         bool load_as_shared_library,
+                                                         bool for_loader) {
   ATRACE_NAME("LoadedPackage::Load");
   std::unique_ptr<LoadedPackage> loaded_package(new LoadedPackage());
 
@@ -430,6 +432,10 @@
     loaded_package->overlay_ = true;
   }
 
+  if (for_loader) {
+    loaded_package->custom_loader_ = true;
+  }
+
   if (header->header.headerSize >= sizeof(ResTable_package)) {
     uint32_t type_id_offset = dtohl(header->typeIdOffset);
     if (type_id_offset > std::numeric_limits<uint8_t>::max()) {
@@ -696,7 +702,7 @@
 }
 
 bool LoadedArsc::LoadTable(const Chunk& chunk, const LoadedIdmap* loaded_idmap,
-                           bool load_as_shared_library) {
+                           bool load_as_shared_library, bool for_loader) {
   const ResTable_header* header = chunk.header<ResTable_header>();
   if (header == nullptr) {
     LOG(ERROR) << "RES_TABLE_TYPE too small.";
@@ -735,7 +741,11 @@
         packages_seen++;
 
         std::unique_ptr<const LoadedPackage> loaded_package =
-            LoadedPackage::Load(child_chunk, loaded_idmap, system_, load_as_shared_library);
+            LoadedPackage::Load(child_chunk,
+                                loaded_idmap,
+                                system_,
+                                load_as_shared_library,
+                                for_loader);
         if (!loaded_package) {
           return false;
         }
@@ -758,9 +768,11 @@
 }
 
 std::unique_ptr<const LoadedArsc> LoadedArsc::Load(const StringPiece& data,
-                                                   const LoadedIdmap* loaded_idmap, bool system,
-                                                   bool load_as_shared_library) {
-  ATRACE_NAME("LoadedArsc::LoadTable");
+                                                   const LoadedIdmap* loaded_idmap,
+                                                   bool system,
+                                                   bool load_as_shared_library,
+                                                   bool for_loader) {
+  ATRACE_NAME("LoadedArsc::Load");
 
   // Not using make_unique because the constructor is private.
   std::unique_ptr<LoadedArsc> loaded_arsc(new LoadedArsc());
@@ -771,7 +783,10 @@
     const Chunk chunk = iter.Next();
     switch (chunk.type()) {
       case RES_TABLE_TYPE:
-        if (!loaded_arsc->LoadTable(chunk, loaded_idmap, load_as_shared_library)) {
+        if (!loaded_arsc->LoadTable(chunk,
+                                    loaded_idmap,
+                                    load_as_shared_library,
+                                    for_loader)) {
           return {};
         }
         break;
