Add partition subdirs to system_other

...and move odex/vdex files into the dir corresponding to their
source app's partition.

Bug: 141707536
Test: soong unit test
Test: lunch aosp_blueline && m
Change-Id: I90a7a6c97e0eb2706951a2317a1a65a59ca974fa
diff --git a/dexpreopt/dexpreopt.go b/dexpreopt/dexpreopt.go
index c378f09..40644a3 100644
--- a/dexpreopt/dexpreopt.go
+++ b/dexpreopt/dexpreopt.go
@@ -248,7 +248,7 @@
 	odexPath := module.BuildPath.InSameDir(ctx, "oat", arch.String(), pathtools.ReplaceExtension(base, "odex"))
 	odexInstallPath := toOdexPath(module.DexLocation)
 	if odexOnSystemOther(module, global) {
-		odexInstallPath = strings.Replace(odexInstallPath, SystemPartition, SystemOtherPartition, 1)
+		odexInstallPath = filepath.Join(SystemOtherPartition, odexInstallPath)
 	}
 
 	vdexPath := odexPath.ReplaceExtension(ctx, "vdex")
diff --git a/dexpreopt/dexpreopt_test.go b/dexpreopt/dexpreopt_test.go
index 78f2f3f..aca5e63 100644
--- a/dexpreopt/dexpreopt_test.go
+++ b/dexpreopt/dexpreopt_test.go
@@ -117,7 +117,7 @@
 		{
 			patterns: []string{"app/%"},
 			moduleTests: []moduleTest{
-				{module: systemModule, expectedPartition: "system_other"},
+				{module: systemModule, expectedPartition: "system_other/system"},
 				{module: systemProductModule, expectedPartition: "system/product"},
 				{module: productModule, expectedPartition: "product"},
 			},
@@ -126,8 +126,8 @@
 		{
 			patterns: []string{"app/%", "product/app/%"},
 			moduleTests: []moduleTest{
-				{module: systemModule, expectedPartition: "system_other"},
-				{module: systemProductModule, expectedPartition: "system_other/product"},
+				{module: systemModule, expectedPartition: "system_other/system"},
+				{module: systemProductModule, expectedPartition: "system_other/system/product"},
 				{module: productModule, expectedPartition: "product"},
 			},
 		},