Browse Source

Populate versionCode and versionName in adb.Installed()

pull/8/head
Daniel Martí 11 years ago
parent
commit
64925cd401
  1. 31
      adb/adb.go

31
adb/adb.go

@ -9,6 +9,7 @@ import (
"net"
"os/exec"
"regexp"
"strconv"
"strings"
)
@ -114,12 +115,15 @@ func (d Device) Uninstall(pkg string) error {
type Package struct {
ID string
VName string
VCode int
VName string
}
var packageRegex = regexp.MustCompile(`Package \[([^\s]+)\]`)
var (
packageRegex = regexp.MustCompile(`^ Package \[([^\s]+)\]`)
verCodeRegex = regexp.MustCompile(`^ versionCode=([0-9]+)`)
verNameRegex = regexp.MustCompile(`^ versionName=(.+)`)
)
func (d Device) Installed() ([]Package, error) {
cmd := d.AdbShell("dumpsys", "package", "packages")
@ -132,16 +136,21 @@ func (d Device) Installed() ([]Package, error) {
}
var packages []Package
scanner := bufio.NewScanner(stdout)
var cur *Package
for scanner.Scan() {
line := scanner.Text()
m := packageRegex.FindStringSubmatch(line)
if m == nil {
continue
}
p := Package{
ID: m[1],
l := scanner.Text()
if m := packageRegex.FindStringSubmatch(l); m != nil {
packages = append(packages, Package{ID: m[1]})
cur = &packages[len(packages)-1]
} else if m := verCodeRegex.FindStringSubmatch(l); m != nil {
n, err := strconv.Atoi(m[1])
if err != nil {
panic(err)
}
cur.VCode = n
} else if m := verNameRegex.FindStringSubmatch(l); m != nil {
cur.VName = m[1]
}
packages = append(packages, p)
}
return packages, nil
}

Loading…
Cancel
Save