diff --git a/apex/apex.go b/apex/apex.go
index ab6ceff..cddd72b 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -2315,10 +2315,7 @@
 	// Build rules are generated by the dexpreopt singleton, and here we access build artifacts
 	// via the global boot image config.
 	if a.artApex {
-		artAndOatFiles, vdexFiles := java.DexpreoptedArtApexJars(ctx)
-
-		// Copy *.art and *.oat files to arch-specific subdirectories.
-		for arch, files := range artAndOatFiles {
+		for arch, files := range java.DexpreoptedArtApexJars(ctx) {
 			dirInApex := filepath.Join("javalib", arch.String())
 			for _, f := range files {
 				localModule := "javalib_" + arch.String() + "_" + filepath.Base(f.String())
@@ -2326,18 +2323,6 @@
 				filesInfo = append(filesInfo, af)
 			}
 		}
-
-		// Copy *.vdex files to a common subdirectory.
-		for _, file := range vdexFiles {
-			dirInApex := "javalib"
-			localModule := "javalib_" + filepath.Base(file.String())
-			af := newApexFile(ctx, file, localModule, dirInApex, etc, nil)
-			// Add a symlink to the *.vdex file for each arch-specific subdirectory.
-			for arch := range artAndOatFiles {
-				af.symlinks = append(af.symlinks, filepath.Join(arch.String(), filepath.Base(file.String())))
-			}
-			filesInfo = append(filesInfo, af)
-		}
 	}
 
 	if a.private_key_file == nil {
diff --git a/apex/builder.go b/apex/builder.go
index 97be852..464d843 100644
--- a/apex/builder.go
+++ b/apex/builder.go
@@ -335,7 +335,6 @@
 	for _, fi := range a.filesInfo {
 		destPath := android.PathForModuleOut(ctx, "image"+suffix, fi.Path()).String()
 		copyCommands = append(copyCommands, "mkdir -p "+filepath.Dir(destPath))
-
 		if a.linkToSystemLib && fi.transitiveDep && fi.AvailableToPlatform() {
 			// TODO(jiyong): pathOnDevice should come from fi.module, not being calculated here
 			pathOnDevice := filepath.Join("/system", fi.Path())
@@ -344,16 +343,10 @@
 			copyCommands = append(copyCommands, "cp -f "+fi.builtFile.String()+" "+destPath)
 			implicitInputs = append(implicitInputs, fi.builtFile)
 		}
-
 		// create additional symlinks pointing the file inside the APEX
 		for _, symlinkPath := range fi.SymlinkPaths() {
 			symlinkDest := android.PathForModuleOut(ctx, "image"+suffix, symlinkPath).String()
-			symlinkTarget, err := filepath.Rel(filepath.Dir(symlinkDest), destPath)
-			if err != nil {
-				panic("Cannot compute relative path from " + destPath + " to " + filepath.Dir(symlinkDest))
-			}
-			copyCommands = append(copyCommands, "mkdir -p "+filepath.Dir(symlinkDest))
-			copyCommands = append(copyCommands, "ln -sfn "+symlinkTarget+" "+symlinkDest)
+			copyCommands = append(copyCommands, "ln -sfn "+filepath.Base(destPath)+" "+symlinkDest)
 		}
 	}
 
@@ -416,7 +409,6 @@
 				}
 			} else {
 				readOnlyPaths = append(readOnlyPaths, pathInApex)
-				readOnlyPaths = append(readOnlyPaths, f.SymlinkPaths()...)
 			}
 			dir := f.installDir
 			for !android.InList(dir, executablePaths) && dir != "" {
