diff --git a/android/config.go b/android/config.go
index 7f2a3ac..bc3d4f5 100644
--- a/android/config.go
+++ b/android/config.go
@@ -811,12 +811,12 @@
 	return c.config.productVariables.BoardOdmSepolicyDirs
 }
 
-func (c *deviceConfig) PlatPublicSepolicyDir() string {
-	return c.config.productVariables.BoardPlatPublicSepolicyDir
+func (c *deviceConfig) PlatPublicSepolicyDirs() []string {
+	return c.config.productVariables.BoardPlatPublicSepolicyDirs
 }
 
-func (c *deviceConfig) PlatPrivateSepolicyDir() string {
-	return c.config.productVariables.BoardPlatPrivateSepolicyDir
+func (c *deviceConfig) PlatPrivateSepolicyDirs() []string {
+	return c.config.productVariables.BoardPlatPrivateSepolicyDirs
 }
 
 func (c *config) IntegerOverflowDisabledForPath(path string) bool {
diff --git a/android/variable.go b/android/variable.go
index 6599ca3..af414cb 100644
--- a/android/variable.go
+++ b/android/variable.go
@@ -210,10 +210,10 @@
 
 	PgoAdditionalProfileDirs []string `json:",omitempty"`
 
-	BoardVendorSepolicyDirs     []string `json:",omitempty"`
-	BoardOdmSepolicyDirs        []string `json:",omitempty"`
-	BoardPlatPublicSepolicyDir  string   `json:",omitempty"`
-	BoardPlatPrivateSepolicyDir string   `json:",omitempty"`
+	BoardVendorSepolicyDirs      []string `json:",omitempty"`
+	BoardOdmSepolicyDirs         []string `json:",omitempty"`
+	BoardPlatPublicSepolicyDirs  []string `json:",omitempty"`
+	BoardPlatPrivateSepolicyDirs []string `json:",omitempty"`
 
 	VendorVars map[string]map[string]string `json:",omitempty"`
 }
diff --git a/python/proto.go b/python/proto.go
index 42987fa..2370cd2 100644
--- a/python/proto.go
+++ b/python/proto.go
@@ -30,14 +30,14 @@
 		blueprint.RuleParams{
 			Command: `rm -rf $out.tmp && mkdir -p $out.tmp && ` +
 				`$protocCmd --python_out=$out.tmp --dependency_out=$out.d -I $protoBase $protoFlags $in && ` +
-				`$parCmd -o $out -P $pkgPath -C $out.tmp -D $out.tmp && rm -rf $out.tmp`,
+				`$parCmd -o $out $pkgPathArgs -C $out.tmp -D $out.tmp && rm -rf $out.tmp`,
 			CommandDeps: []string{
 				"$protocCmd",
 				"$parCmd",
 			},
 			Depfile: "${out}.d",
 			Deps:    blueprint.DepsGCC,
-		}, "protoBase", "protoFlags", "pkgPath")
+		}, "protoBase", "protoFlags", "pkgPathArgs")
 )
 
 func genProto(ctx android.ModuleContext, p *android.ProtoProperties,
@@ -53,15 +53,19 @@
 		protoBase = strings.TrimSuffix(protoFile.String(), protoFile.Rel())
 	}
 
+	var pkgPathArgs string
+	if pkgPath != "" {
+		pkgPathArgs = "-P " + pkgPath
+	}
 	ctx.Build(pctx, android.BuildParams{
 		Rule:        proto,
 		Description: "protoc " + protoFile.Rel(),
 		Output:      srcJarFile,
 		Input:       protoFile,
 		Args: map[string]string{
-			"protoBase":  protoBase,
-			"protoFlags": strings.Join(protoFlags, " "),
-			"pkgPath":    pkgPath,
+			"protoBase":   protoBase,
+			"protoFlags":  strings.Join(protoFlags, " "),
+			"pkgPathArgs": pkgPathArgs,
 		},
 	})
 
diff --git a/python/python.go b/python/python.go
index a277988..65e3efd 100644
--- a/python/python.go
+++ b/python/python.go
@@ -420,16 +420,20 @@
 			// pkg_path starts from "internal/" implicitly.
 			pkgPath = filepath.Join(internal, pkgPath)
 		} else {
-			// pkg_path starts from "runfiles/" implicitly.
-			pkgPath = filepath.Join(runFiles, pkgPath)
+			if !p.isEmbeddedLauncherEnabled(p.properties.Actual_version) {
+				// pkg_path starts from "runfiles/" implicitly.
+				pkgPath = filepath.Join(runFiles, pkgPath)
+			}
 		}
 	} else {
 		if p.properties.Is_internal != nil && *p.properties.Is_internal {
 			// pkg_path starts from "runfiles/" implicitly.
 			pkgPath = internal
 		} else {
-			// pkg_path starts from "runfiles/" implicitly.
-			pkgPath = runFiles
+			if !p.isEmbeddedLauncherEnabled(p.properties.Actual_version) {
+				// pkg_path starts from "runfiles/" implicitly.
+				pkgPath = runFiles
+			}
 		}
 	}
 
@@ -520,7 +524,9 @@
 		sort.Strings(keys)
 
 		parArgs := []string{}
-		parArgs = append(parArgs, `-P `+pkgPath)
+		if pkgPath != "" {
+			parArgs = append(parArgs, `-P `+pkgPath)
+		}
 		implicits := android.Paths{}
 		for _, k := range keys {
 			parArgs = append(parArgs, `-C `+k)
