gogio: deduplicate Android jars

This commit is contained in:
Joe Julian
2026-04-16 21:04:56 -07:00
parent 7b5a6b418c
commit 1762d36dde
2 changed files with 50 additions and 1 deletions
+8 -1
View File
@@ -119,6 +119,7 @@ func buildAndroid(tmpDir string, bi *buildInfo) error {
} }
moduleRoot := moduleRootForDir(bi.pkgDir) moduleRoot := moduleRootForDir(bi.pkgDir)
var extraJars []string var extraJars []string
seenJars := make(map[string]bool)
visitedPkgs := make(map[string]bool) visitedPkgs := make(map[string]bool)
var visitPkg func(*packages.Package) error var visitPkg func(*packages.Package) error
visitPkg = func(p *packages.Package) error { visitPkg = func(p *packages.Package) error {
@@ -130,7 +131,13 @@ func buildAndroid(tmpDir string, bi *buildInfo) error {
if err != nil { if err != nil {
return err return err
} }
extraJars = append(extraJars, jars...) for _, jar := range jars {
if seenJars[jar] {
continue
}
seenJars[jar] = true
extraJars = append(extraJars, jar)
}
switch { switch {
case p.PkgPath == "net": case p.PkgPath == "net":
perms = append(perms, "network") perms = append(perms, "network")
+42
View File
@@ -50,6 +50,48 @@ func TestAndroidExtraJarsIncludesModuleRootAndroidSubdirectory(t *testing.T) {
} }
} }
func TestAndroidExtraJarsDoesNotRepeatSharedModuleJarWhenCollectedAcrossPackages(t *testing.T) {
t.Parallel()
root := t.TempDir()
moduleAndroidJar := filepath.Join(root, "android", "keepassgo-android.jar")
writeTestFile(t, filepath.Join(root, "go.mod"), "module example.invalid/crew\n")
writeTestFile(t, moduleAndroidJar, "module-android")
dirs := []string{
filepath.Join(root, "cmd", "keepassgo"),
filepath.Join(root, "internal", "appui"),
}
seen := make(map[string]bool)
var collected []string
for _, dir := range dirs {
if err := os.MkdirAll(dir, 0o755); err != nil {
t.Fatalf("MkdirAll(%q) error = %v", dir, err)
}
jars, err := androidExtraJars(dir, root)
if err != nil {
t.Fatalf("androidExtraJars(%q) error = %v", dir, err)
}
for _, jar := range jars {
if seen[jar] {
continue
}
seen[jar] = true
collected = append(collected, jar)
}
}
count := 0
for _, jar := range collected {
if jar == moduleAndroidJar {
count++
}
}
if count != 1 {
t.Fatalf("collected module jar count = %d, want 1 in %v", count, collected)
}
}
func TestRenderAndroidManifestIncludesOptionalSnippets(t *testing.T) { func TestRenderAndroidManifestIncludesOptionalSnippets(t *testing.T) {
t.Parallel() t.Parallel()