diff --git a/java/builder.go b/java/builder.go
index 94f67eb..301613b 100644
--- a/java/builder.go
+++ b/java/builder.go
@@ -111,19 +111,23 @@
 	return "-C " + j.dir + " -l " + j.fileList
 }
 
-func TransformJavaToClasses(ctx common.AndroidModuleContext, srcFiles []string,
+func TransformJavaToClasses(ctx common.AndroidModuleContext, srcFiles []string, srcFileLists []string,
 	flags javaBuilderFlags, deps []string) jarSpec {
 
 	classDir := filepath.Join(common.ModuleOutDir(ctx), "classes")
 	classFileList := filepath.Join(common.ModuleOutDir(ctx), "classes.list")
 
+	javacFlags := flags.javacFlags + common.JoinWithPrefix(srcFileLists, "@")
+
+	deps = append(deps, srcFileLists...)
+
 	ctx.Build(pctx, blueprint.BuildParams{
 		Rule:      javac,
 		Outputs:   []string{classFileList},
 		Inputs:    srcFiles,
 		Implicits: deps,
 		Args: map[string]string{
-			"javacFlags":    flags.javacFlags,
+			"javacFlags":    javacFlags,
 			"bootClasspath": flags.bootClasspath,
 			"classpath":     flags.classpath,
 			"outDir":        classDir,
diff --git a/java/java.go b/java/java.go
index 215924b..2a04f70 100644
--- a/java/java.go
+++ b/java/java.go
@@ -31,7 +31,6 @@
 
 // TODO:
 // Autogenerated files:
-//  AIDL
 //  Proto
 //  Renderscript
 // Post-jar passes:
@@ -192,7 +191,7 @@
 
 func (j *javaBase) collectDeps(ctx common.AndroidModuleContext) (classpath []string,
 	bootClasspath string, classJarSpecs, resourceJarSpecs []jarSpec, aidlPreprocess string,
-	aidlIncludeDirs []string) {
+	aidlIncludeDirs []string, srcFileLists []string) {
 
 	ctx.VisitDirectDeps(func(module blueprint.Module) {
 		otherName := ctx.OtherModuleName(module)
@@ -205,6 +204,10 @@
 				classpath = append(classpath, javaDep.ClasspathFile())
 				classJarSpecs = append(classJarSpecs, javaDep.ClassJarSpecs()...)
 				resourceJarSpecs = append(resourceJarSpecs, javaDep.ResourceJarSpecs()...)
+			} else if ctx.ModuleName() == "framework" && otherName == "framework-res" {
+				// framework.jar has a one-off dependency on the R.java and Manifest.java files
+				// generated by framework-res.apk
+				srcFileLists = append(srcFileLists, module.(*javaBase).module.(*AndroidApp).rJarSpec.fileList)
 			} else {
 				panic(fmt.Errorf("unknown dependency %q for %q", otherName, ctx.ModuleName()))
 			}
@@ -224,7 +227,8 @@
 		}
 	})
 
-	return classpath, bootClasspath, classJarSpecs, resourceJarSpecs, aidlPreprocess, aidlIncludeDirs
+	return classpath, bootClasspath, classJarSpecs, resourceJarSpecs, aidlPreprocess,
+		aidlIncludeDirs, srcFileLists
 }
 
 func (j *javaBase) GenerateAndroidBuildActions(ctx common.AndroidModuleContext) {
@@ -237,7 +241,7 @@
 		common.ModuleSrcDir(ctx))
 
 	classpath, bootClasspath, classJarSpecs, resourceJarSpecs, aidlPreprocess,
-		aidlIncludeDirs := j.collectDeps(ctx)
+		aidlIncludeDirs, srcFileLists := j.collectDeps(ctx)
 
 	var flags javaBuilderFlags
 
@@ -271,7 +275,7 @@
 
 	if len(srcFiles) > 0 {
 		// Compile java sources into .class files
-		classes := TransformJavaToClasses(ctx, srcFiles, flags, javacDeps)
+		classes := TransformJavaToClasses(ctx, srcFiles, srcFileLists, flags, javacDeps)
 		if ctx.Failed() {
 			return
 		}
