diff --git a/java/aar.go b/java/aar.go
index e5ab036..9eb2b27 100644
--- a/java/aar.go
+++ b/java/aar.go
@@ -16,6 +16,7 @@
 
 import (
 	"android/soong/android"
+	"fmt"
 	"strings"
 
 	"github.com/google/blueprint"
@@ -62,6 +63,9 @@
 	// Set to [] to disable the default.
 	Resource_dirs []string
 
+	// list of zip files containing Android resources.
+	Resource_zips []string
+
 	// path to AndroidManifest.xml.  If unset, defaults to "AndroidManifest.xml".
 	Manifest *string
 }
@@ -95,7 +99,7 @@
 }
 
 func (a *aapt) aapt2Flags(ctx android.ModuleContext, sdkContext sdkContext, manifestPath android.Path) (flags []string,
-	deps android.Paths, resDirs, overlayDirs []globbedResourceDir, rroDirs android.Paths) {
+	deps android.Paths, resDirs, overlayDirs []globbedResourceDir, rroDirs, resZips android.Paths) {
 
 	hasVersionCode := false
 	hasVersionName := false
@@ -117,6 +121,7 @@
 	// Find implicit or explicit asset and resource dirs
 	assetDirs := android.PathsWithOptionalDefaultForModuleSrc(ctx, a.aaptProperties.Asset_dirs, "assets")
 	resourceDirs := android.PathsWithOptionalDefaultForModuleSrc(ctx, a.aaptProperties.Resource_dirs, "res")
+	resourceZips := ctx.ExpandSources(a.aaptProperties.Resource_zips, nil)
 
 	var linkDeps android.Paths
 
@@ -167,7 +172,7 @@
 		linkFlags = append(linkFlags, "--version-name ", versionName)
 	}
 
-	return linkFlags, linkDeps, resDirs, overlayDirs, rroDirs
+	return linkFlags, linkDeps, resDirs, overlayDirs, rroDirs, resourceZips
 }
 
 func (a *aapt) deps(ctx android.BottomUpMutatorContext, sdkContext sdkContext) {
@@ -175,6 +180,8 @@
 	if sdkDep.frameworkResModule != "" {
 		ctx.AddVariationDependencies(nil, frameworkResTag, sdkDep.frameworkResModule)
 	}
+
+	android.ExtractSourcesDeps(ctx, a.aaptProperties.Resource_zips)
 }
 
 func (a *aapt) buildActions(ctx android.ModuleContext, sdkContext sdkContext, extraLinkFlags ...string) {
@@ -187,7 +194,7 @@
 	manifestPath := manifestMerger(ctx, manifestSrcPath, sdkContext, staticLibManifests, a.isLibrary,
 		a.uncompressedJNI, a.useEmbeddedDex, a.usesNonSdkApis)
 
-	linkFlags, linkDeps, resDirs, overlayDirs, rroDirs := a.aapt2Flags(ctx, sdkContext, manifestPath)
+	linkFlags, linkDeps, resDirs, overlayDirs, rroDirs, resZips := a.aapt2Flags(ctx, sdkContext, manifestPath)
 
 	rroDirs = append(rroDirs, staticRRODirs...)
 	linkFlags = append(linkFlags, libFlags...)
@@ -209,6 +216,12 @@
 		compiledResDirs = append(compiledResDirs, aapt2Compile(ctx, dir.dir, dir.files).Paths())
 	}
 
+	for i, zip := range resZips {
+		flata := android.PathForModuleOut(ctx, fmt.Sprintf("reszip.%d.flata", i))
+		aapt2CompileZip(ctx, flata, zip)
+		compiledResDirs = append(compiledResDirs, android.Paths{flata})
+	}
+
 	var compiledRes, compiledOverlay android.Paths
 
 	compiledOverlay = append(compiledOverlay, transitiveStaticLibs...)
