diff --git a/java/java_test.go b/java/java_test.go
index 96bf224..572db2f 100644
--- a/java/java_test.go
+++ b/java/java_test.go
@@ -188,7 +188,7 @@
 		"prebuilts/sdk/28/system/api/bar-removed.txt": nil,
 		"prebuilts/sdk/28/test/api/bar-removed.txt":   nil,
 		"prebuilts/sdk/tools/core-lambda-stubs.jar":   nil,
-		"prebuilts/sdk/Android.bp":                    []byte(`prebuilt_apis { name: "prebuilt_apis",}`),
+		"prebuilts/sdk/Android.bp":                    []byte(`prebuilt_apis { name: "sdk", api_dirs: ["14", "28", "current"],}`),
 
 		// For framework-res, which is an implicit dependency for framework
 		"AndroidManifest.xml":                   nil,
diff --git a/java/prebuilt_apis.go b/java/prebuilt_apis.go
index 3f4b076..59b2092 100644
--- a/java/prebuilt_apis.go
+++ b/java/prebuilt_apis.go
@@ -38,8 +38,14 @@
 	})
 }
 
+type prebuiltApisProperties struct {
+	// list of api version directories
+	Api_dirs []string
+}
+
 type prebuiltApis struct {
 	android.ModuleBase
+	properties prebuiltApisProperties
 }
 
 func (module *prebuiltApis) DepsMutator(ctx android.BottomUpMutatorContext) {
@@ -55,10 +61,6 @@
 
 	apiver = elements[0]
 	scope = elements[1]
-	if scope != "public" && scope != "system" && scope != "test" && scope != "core" {
-		// scope must be public, system or test
-		return
-	}
 
 	module = strings.TrimSuffix(elements[2], ".jar")
 	return
@@ -91,7 +93,7 @@
 		Sdk_version *string
 		Installable *bool
 	}{}
-	props.Name = proptools.StringPtr("sdk_" + scope + "_" + apiver + "_" + module)
+	props.Name = proptools.StringPtr(mctx.ModuleName() + "_" + scope + "_" + apiver + "_" + module)
 	props.Jars = append(props.Jars, path)
 	// TODO(hansson): change to scope after migration is done.
 	props.Sdk_version = proptools.StringPtr("current")
@@ -114,22 +116,22 @@
 func prebuiltSdkStubs(mctx android.TopDownMutatorContext) {
 	mydir := mctx.ModuleDir() + "/"
 	// <apiver>/<scope>/<module>.jar
-	files, err := mctx.GlobWithDeps(mydir+"*/*/*.jar", nil)
-	if err != nil {
-		mctx.ModuleErrorf("failed to glob jar files under %q: %s", mydir, err)
-	}
-	if len(files) == 0 {
-		mctx.ModuleErrorf("no jar file found under %q", mydir)
+	var files []string
+	for _, apiver := range mctx.Module().(*prebuiltApis).properties.Api_dirs {
+		for _, scope := range []string{"public", "system", "test", "core"} {
+			vfiles, err := mctx.GlobWithDeps(mydir+apiver+"/"+scope+"*/*.jar", nil)
+			if err != nil {
+				mctx.ModuleErrorf("failed to glob jar files under %q: %s", mydir+apiver+"/"+scope, err)
+			}
+			files = append(files, vfiles...)
+		}
 	}
 
 	for _, f := range files {
 		// create a Import module for each jar file
 		localPath := strings.TrimPrefix(f, mydir)
 		module, apiver, scope := parseJarPath(mctx, localPath)
-
-		if len(module) != 0 {
-			createImport(mctx, module, scope, apiver, localPath)
-		}
+		createImport(mctx, module, scope, apiver, localPath)
 	}
 }
 
@@ -192,6 +194,7 @@
 
 func prebuiltApisFactory() android.Module {
 	module := &prebuiltApis{}
+	module.AddProperties(&module.properties)
 	android.InitAndroidModule(module)
 	return module
 }
