Have soong_zip add entries for ancestor directories

Bug: 64536066

Test: When I run:

$ mkdir -p a/b/c
$ touch a/b/c/d
$ soong_zip -o test.zip -d -C . -f a/b/c/d
$ zipinfo -1 test.zip
a/b/c/
a/b/c/d

I should get:
a/
a/b/
a/b/c/
a/b/c/d

Change-Id: I779bb48062dfaf88a70fab08d8d98d1e366087b3
diff --git a/cmd/soong_zip/soong_zip.go b/cmd/soong_zip/soong_zip.go
index 8407788..d634dda 100644
--- a/cmd/soong_zip/soong_zip.go
+++ b/cmd/soong_zip/soong_zip.go
@@ -646,15 +646,24 @@
 }
 
 func (z *zipWriter) writeDirectory(dir string) error {
-	if dir != "" && !strings.HasSuffix(dir, "/") {
-		dir = dir + "/"
+	// clean the input
+	cleanDir := filepath.Clean(dir)
+
+	// discover any uncreated directories in the path
+	zipDirs := []string{}
+	for cleanDir != "" && cleanDir != "." && !z.createdDirs[cleanDir] {
+
+		z.createdDirs[cleanDir] = true
+		// parent directories precede their children
+		zipDirs = append([]string{cleanDir}, zipDirs...)
+
+		cleanDir = filepath.Dir(cleanDir)
 	}
 
-	for dir != "" && dir != "./" && !z.createdDirs[dir] {
-		z.createdDirs[dir] = true
-
+	// make a directory entry for each uncreated directory
+	for _, cleanDir := range zipDirs {
 		dirHeader := &zip.FileHeader{
-			Name: dir,
+			Name: cleanDir + "/",
 		}
 		dirHeader.SetMode(0700 | os.ModeDir)
 		dirHeader.SetModTime(z.time)
@@ -665,8 +674,6 @@
 		}
 		close(ze)
 		z.writeOps <- ze
-
-		dir, _ = filepath.Split(dir)
 	}
 
 	return nil