From c57804397076436b8a6c82b80716d3823bae2455 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Thu, 15 Aug 2019 17:50:12 +0200 Subject: [PATCH] cmd/gio: handle subdirectories in apk files Signed-off-by: Elias Naur --- cmd/gio/androidbuild.go | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/cmd/gio/androidbuild.go b/cmd/gio/androidbuild.go index 03c3554a..a40f82c3 100644 --- a/cmd/gio/androidbuild.go +++ b/cmd/gio/androidbuild.go @@ -10,7 +10,6 @@ import ( "io/ioutil" "os" "os/exec" - "path" "path/filepath" "runtime" "strconv" @@ -332,18 +331,24 @@ func exeAndroid(tmpDir string, tools *androidTools, bi *buildInfo) (err error) { }() apkw := newZipWriter(ap_) defer apkw.Close() - apkFiles, err := filepath.Glob(filepath.Join(apkDir, "*")) + err = filepath.Walk(apkDir, func(path string, f os.FileInfo, err error) error { + if err != nil { + return err + } + if f.IsDir() { + return nil + } + zpath := path[len(apkDir)+1:] + if filepath.Base(path) == "resources.arsc" { + apkw.Store(zpath, path) + } else { + apkw.Add(zpath, path) + } + return nil + }) if err != nil { return err } - for _, f := range apkFiles { - name := filepath.Base(f) - if name == "resources.arsc" { - apkw.Store(name, f) - } else { - apkw.Add(name, f) - } - } for _, a := range bi.archs { arch := allArchs[a] libFile := filepath.Join(arch.jniArch, "libgio.so") @@ -395,7 +400,10 @@ func unzip(dir, zipfile string) (err error) { } defer zipr.Close() for _, f := range zipr.File { - path := filepath.Join(dir, path.Base(f.Name)) + path := filepath.Join(dir, f.Name) + if err := os.MkdirAll(filepath.Dir(path), 0700); err != nil { + return err + } out, err := os.Create(path) if err != nil { return err