mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-01 15:45:38 +00:00
cmd/gogio: Android: include jar files from dependencies
On Android, in addition to adding jar files found in the source directory of the program being compiled, cmd/gogio also searches every dependency for jar files to include in the output APK. Signed-off-by: Greg Pomerantz <gmp.gio@wow.st>
This commit is contained in:
committed by
Elias Naur
parent
4e71f195ab
commit
3cd633ee44
@@ -12,4 +12,5 @@ require (
|
||||
github.com/chromedp/chromedp v0.5.1
|
||||
golang.org/x/image v0.0.0-20190802002840-cff245a6509b
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58
|
||||
golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e
|
||||
)
|
||||
|
||||
@@ -45,5 +45,6 @@ golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||
golang.org/x/sys v0.0.0-20191008105621-543471e840be h1:QAcqgptGM8IQBC9K/RC4o+O9YmqEm0diQn9QmZw/0mU=
|
||||
golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e h1:1xWUkZQQ9Z9UuZgNaIR6OQOE7rUFglXUUBZlO+dGg6I=
|
||||
golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
|
||||
@@ -10,12 +10,14 @@ import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"golang.org/x/sync/errgroup"
|
||||
"golang.org/x/tools/go/packages"
|
||||
)
|
||||
|
||||
type androidTools struct {
|
||||
@@ -64,6 +66,48 @@ func buildAndroid(tmpDir string, bi *buildInfo) error {
|
||||
buildtools: buildtools,
|
||||
androidjar: filepath.Join(platform, "android.jar"),
|
||||
}
|
||||
|
||||
cfg := &packages.Config{
|
||||
Mode: packages.NeedName +
|
||||
packages.NeedFiles +
|
||||
packages.NeedImports +
|
||||
packages.NeedDeps,
|
||||
Env: append(
|
||||
os.Environ(),
|
||||
"GOOS=android",
|
||||
"CGO_ENABLED=1",
|
||||
),
|
||||
}
|
||||
pkgs, err := packages.Load(cfg, bi.pkg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
var extraJars []string
|
||||
visitedPkgs := make(map[string]bool)
|
||||
var visitPkg func(*packages.Package) error
|
||||
visitPkg = func(p *packages.Package) error {
|
||||
if len(p.GoFiles) == 0 {
|
||||
return nil
|
||||
}
|
||||
dir := path.Dir(p.GoFiles[0])
|
||||
jars, err := filepath.Glob(filepath.Join(dir, "*.jar"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
extraJars = append(extraJars, jars...)
|
||||
|
||||
for _, imp := range p.Imports {
|
||||
if !visitedPkgs[imp.ID] {
|
||||
visitPkg(imp)
|
||||
visitedPkgs[imp.ID] = true
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
if err := visitPkg(pkgs[0]); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := compileAndroid(tmpDir, tools, bi); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -71,7 +115,7 @@ func buildAndroid(tmpDir string, bi *buildInfo) error {
|
||||
case "archive":
|
||||
return archiveAndroid(tmpDir, bi)
|
||||
case "exe":
|
||||
if err := exeAndroid(tmpDir, tools, bi); err != nil {
|
||||
if err := exeAndroid(tmpDir, tools, bi, extraJars); err != nil {
|
||||
return err
|
||||
}
|
||||
return signAPK(tmpDir, tools, bi)
|
||||
@@ -207,7 +251,7 @@ func archiveAndroid(tmpDir string, bi *buildInfo) (err error) {
|
||||
return aarw.Close()
|
||||
}
|
||||
|
||||
func exeAndroid(tmpDir string, tools *androidTools, bi *buildInfo) (err error) {
|
||||
func exeAndroid(tmpDir string, tools *androidTools, bi *buildInfo, extraJars []string) (err error) {
|
||||
classes := filepath.Join(tmpDir, "classes")
|
||||
var classFiles []string
|
||||
err = filepath.Walk(classes, func(path string, f os.FileInfo, err error) error {
|
||||
@@ -219,13 +263,7 @@ func exeAndroid(tmpDir string, tools *androidTools, bi *buildInfo) (err error) {
|
||||
}
|
||||
return nil
|
||||
})
|
||||
extraJars, err := filepath.Glob(filepath.Join(bi.dir, "*.jar"))
|
||||
if err == nil {
|
||||
classFiles = append(classFiles, extraJars...)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
classFiles = append(classFiles, extraJars...)
|
||||
apkDir := filepath.Join(tmpDir, "apk")
|
||||
if err := os.MkdirAll(apkDir, 0755); err != nil {
|
||||
return err
|
||||
|
||||
Reference in New Issue
Block a user