mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-04 00:45:35 +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
|
github.com/chromedp/chromedp v0.5.1
|
||||||
golang.org/x/image v0.0.0-20190802002840-cff245a6509b
|
golang.org/x/image v0.0.0-20190802002840-cff245a6509b
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58
|
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 h1:QAcqgptGM8IQBC9K/RC4o+O9YmqEm0diQn9QmZw/0mU=
|
||||||
golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
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/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/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=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
|||||||
@@ -10,12 +10,14 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
|
"golang.org/x/tools/go/packages"
|
||||||
)
|
)
|
||||||
|
|
||||||
type androidTools struct {
|
type androidTools struct {
|
||||||
@@ -64,6 +66,48 @@ func buildAndroid(tmpDir string, bi *buildInfo) error {
|
|||||||
buildtools: buildtools,
|
buildtools: buildtools,
|
||||||
androidjar: filepath.Join(platform, "android.jar"),
|
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 {
|
if err := compileAndroid(tmpDir, tools, bi); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -71,7 +115,7 @@ func buildAndroid(tmpDir string, bi *buildInfo) error {
|
|||||||
case "archive":
|
case "archive":
|
||||||
return archiveAndroid(tmpDir, bi)
|
return archiveAndroid(tmpDir, bi)
|
||||||
case "exe":
|
case "exe":
|
||||||
if err := exeAndroid(tmpDir, tools, bi); err != nil {
|
if err := exeAndroid(tmpDir, tools, bi, extraJars); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return signAPK(tmpDir, tools, bi)
|
return signAPK(tmpDir, tools, bi)
|
||||||
@@ -207,7 +251,7 @@ func archiveAndroid(tmpDir string, bi *buildInfo) (err error) {
|
|||||||
return aarw.Close()
|
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")
|
classes := filepath.Join(tmpDir, "classes")
|
||||||
var classFiles []string
|
var classFiles []string
|
||||||
err = filepath.Walk(classes, func(path string, f os.FileInfo, err error) error {
|
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
|
return nil
|
||||||
})
|
})
|
||||||
extraJars, err := filepath.Glob(filepath.Join(bi.dir, "*.jar"))
|
classFiles = append(classFiles, extraJars...)
|
||||||
if err == nil {
|
|
||||||
classFiles = append(classFiles, extraJars...)
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
apkDir := filepath.Join(tmpDir, "apk")
|
apkDir := filepath.Join(tmpDir, "apk")
|
||||||
if err := os.MkdirAll(apkDir, 0755); err != nil {
|
if err := os.MkdirAll(apkDir, 0755); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
Reference in New Issue
Block a user