From e4b1a46dd243cb6ef948e5605aef74299056b9d2 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Wed, 9 Oct 2019 18:54:53 +0200 Subject: [PATCH] cmd/gogio: create a temporary signing key if debug.keystore isn't found Signed-off-by: Elias Naur --- cmd/gogio/androidbuild.go | 50 +++++++++++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/cmd/gogio/androidbuild.go b/cmd/gogio/androidbuild.go index 508103d1..7f380be0 100644 --- a/cmd/gogio/androidbuild.go +++ b/cmd/gogio/androidbuild.go @@ -35,6 +35,14 @@ type errWriter struct { err *error } +var exeSuffix string + +func init() { + if runtime.GOOS == "windows" { + exeSuffix = ".exe" + } +} + func buildAndroid(tmpDir string, bi *buildInfo) error { sdk := os.Getenv("ANDROID_HOME") if sdk == "" { @@ -398,6 +406,27 @@ func signAPK(tmpDir string, tools *androidTools, bi *buildInfo) error { return err } keystore := filepath.Join(home, ".android", "debug.keystore") + if _, err := os.Stat(keystore); err != nil { + keystore = filepath.Join(tmpDir, "sign.keystore") + keytool, err := findKeytool() + if err != nil { + return err + } + _, err = runCmd(exec.Command( + keytool, + "-genkey", + "-keystore", keystore, + "-storepass", "android", + "-alias", "android", + "-keyalg", "RSA", "-keysize", "2048", + "-validity", "10000", + "-noprompt", + "-dname", "CN=android", + )) + if err != nil { + return err + } + } _, err = runCmd(exec.Command( filepath.Join(tools.buildtools, "apksigner"), "sign", @@ -443,6 +472,22 @@ func unzip(dir, zipfile string) (err error) { return nil } +func findKeytool() (string, error) { + keytool, err := exec.LookPath("keytool") + if err == nil { + return keytool, err + } + javaHome := os.Getenv("JAVA_HOME") + if javaHome == "" { + return "", err + } + keytool = filepath.Join(javaHome, "jre", "bin", "keytool"+exeSuffix) + if _, serr := os.Stat(keytool); serr == nil { + return keytool, nil + } + return "", err +} + func findJavaC() (string, error) { javac, err := exec.LookPath("javac") if err == nil { @@ -452,10 +497,7 @@ func findJavaC() (string, error) { if javaHome == "" { return "", err } - javac = filepath.Join(javaHome, "bin", "javac") - if runtime.GOOS == "windows" { - javac += ".exe" - } + javac = filepath.Join(javaHome, "bin", "javac"+exeSuffix) if _, serr := os.Stat(javac); serr == nil { return javac, nil }