Merge "Make APEX build rules consistent"
diff --git a/apex/apex.go b/apex/apex.go
index 51e2401..0749ab3 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -19,6 +19,7 @@
 	"io"
 	"path/filepath"
 	"runtime"
+	"sort"
 	"strings"
 
 	"android/soong/android"
@@ -309,6 +310,7 @@
 			pathsInApex = append(pathsInApex, dirInApex)
 		}
 	}
+	sort.Strings(pathsInApex)
 	cannedFsConfig := android.PathForModuleOut(ctx, "canned_fs_config")
 	ctx.ModuleBuild(pctx, android.ModuleBuildParams{
 		Rule:   generateFsConfig,
@@ -325,17 +327,22 @@
 
 	a.outputFile = android.PathForModuleOut(ctx, a.ModuleBase.Name()+apexSuffix)
 
-	implicitInputs := []android.Path{}
+	filesToCopy := []android.Path{}
 	for file := range copyManifest {
-		implicitInputs = append(implicitInputs, file)
+		filesToCopy = append(filesToCopy, file)
 	}
+	sort.Slice(filesToCopy, func(i, j int) bool {
+		return filesToCopy[i].String() < filesToCopy[j].String()
+	})
+
 	copyCommands := []string{}
-	for src, dir := range copyManifest {
-		dest := filepath.Join(dir, src.Base())
+	for _, src := range filesToCopy {
+		dest := filepath.Join(copyManifest[src], src.Base())
 		dest_path := filepath.Join(android.PathForModuleOut(ctx, "image").String(), dest)
 		copyCommands = append(copyCommands, "mkdir -p "+filepath.Dir(dest_path))
 		copyCommands = append(copyCommands, "cp "+src.String()+" "+dest_path)
 	}
+	implicitInputs := append(android.Paths(nil), filesToCopy...)
 	implicitInputs = append(implicitInputs, cannedFsConfig, manifest, fileContexts, key)
 	outHostBinDir := android.PathForOutput(ctx, "host", ctx.Config().PrebuiltOS(), "bin").String()
 	prebuiltSdkToolsBinDir := filepath.Join("prebuilts", "sdk", "tools", runtime.GOOS, "bin")