mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-06 09:55:40 +00:00
cmd/gogio: [android] allow custom signature-key
That change makes possible to provide custom PKCS#12 (JKS/PFX) using `-signkey` and the password with `-signpass`. By default the gogio will use the `debug.keystore`, if no key is provided. Signed-off-by: Inkeliz <inkeliz@inkeliz.com>
This commit is contained in:
+39
-25
@@ -548,37 +548,18 @@ func signAPK(tmpDir string, tools *androidTools, bi *buildInfo) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
home, err := os.UserHomeDir()
|
|
||||||
if err != nil {
|
if bi.key == "" {
|
||||||
return err
|
if err := defaultAndroidKeystore(tmpDir, bi); err != nil {
|
||||||
}
|
|
||||||
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
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = runCmd(exec.Command(
|
_, err = runCmd(exec.Command(
|
||||||
filepath.Join(tools.buildtools, "apksigner"),
|
filepath.Join(tools.buildtools, "apksigner"),
|
||||||
"sign",
|
"sign",
|
||||||
"--ks-pass", "pass:android",
|
"--ks-pass", "pass:"+bi.password,
|
||||||
"--ks", keystore,
|
"--ks", bi.key,
|
||||||
apkFile,
|
apkFile,
|
||||||
))
|
))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -587,6 +568,39 @@ func signAPK(tmpDir string, tools *androidTools, bi *buildInfo) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func defaultAndroidKeystore(tmpDir string, bi *buildInfo) error {
|
||||||
|
home, err := os.UserHomeDir()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use debug.keystore, if exists.
|
||||||
|
bi.key = filepath.Join(home, ".android", "debug.keystore")
|
||||||
|
bi.password = "android"
|
||||||
|
if _, err := os.Stat(bi.key); err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate new key.
|
||||||
|
bi.key = filepath.Join(tmpDir, "sign.keystore")
|
||||||
|
keytool, err := findKeytool()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = runCmd(exec.Command(
|
||||||
|
keytool,
|
||||||
|
"-genkey",
|
||||||
|
"-keystore", bi.key,
|
||||||
|
"-storepass", bi.password,
|
||||||
|
"-alias", "android",
|
||||||
|
"-keyalg", "RSA", "-keysize", "2048",
|
||||||
|
"-validity", "10000",
|
||||||
|
"-noprompt",
|
||||||
|
"-dname", "CN=android",
|
||||||
|
))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func findNDK(androidHome string) (string, error) {
|
func findNDK(androidHome string) (string, error) {
|
||||||
ndks, err := filepath.Glob(filepath.Join(androidHome, "ndk", "*"))
|
ndks, err := filepath.Glob(filepath.Join(androidHome, "ndk", "*"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ type buildInfo struct {
|
|||||||
tags string
|
tags string
|
||||||
target string
|
target string
|
||||||
version int
|
version int
|
||||||
|
key string
|
||||||
|
password string
|
||||||
}
|
}
|
||||||
|
|
||||||
func newBuildInfo(pkgPath string) (*buildInfo, error) {
|
func newBuildInfo(pkgPath string) (*buildInfo, error) {
|
||||||
@@ -47,6 +49,8 @@ func newBuildInfo(pkgPath string) (*buildInfo, error) {
|
|||||||
tags: *extraTags,
|
tags: *extraTags,
|
||||||
target: *target,
|
target: *target,
|
||||||
version: *version,
|
version: *version,
|
||||||
|
key: *signKey,
|
||||||
|
password: *signPass,
|
||||||
}
|
}
|
||||||
return bi, nil
|
return bi, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,4 +59,8 @@ The -work flag prints the path to the working directory and suppress
|
|||||||
its deletion.
|
its deletion.
|
||||||
|
|
||||||
The -x flag will print all the external commands executed by the gogio tool.
|
The -x flag will print all the external commands executed by the gogio tool.
|
||||||
|
|
||||||
|
The -signkey flag specifies the path of the keystore, used for signing Android apk files.
|
||||||
|
|
||||||
|
The -signpass flag specifies the password of the keystore, ignored if -signkey is not provided.
|
||||||
`
|
`
|
||||||
|
|||||||
+3
-1
@@ -34,7 +34,9 @@ var (
|
|||||||
linkMode = flag.String("linkmode", "", "set the -linkmode flag of the go tool")
|
linkMode = flag.String("linkmode", "", "set the -linkmode flag of the go tool")
|
||||||
extraLdflags = flag.String("ldflags", "", "extra flags to the Go linker")
|
extraLdflags = flag.String("ldflags", "", "extra flags to the Go linker")
|
||||||
extraTags = flag.String("tags", "", "extra tags to the Go tool")
|
extraTags = flag.String("tags", "", "extra tags to the Go tool")
|
||||||
iconPath = flag.String("icon", "", "Specify an icon for iOS and Android")
|
iconPath = flag.String("icon", "", "specify an icon for iOS and Android")
|
||||||
|
signKey = flag.String("signkey", "", "specify the path of the keystore to be used to sign Android apk files.")
|
||||||
|
signPass = flag.String("signpass", "", "specify the password to decrypt the signkey.")
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|||||||
Reference in New Issue
Block a user