mirror of https://github.com/mvdan/fdroidcl.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.3 KiB
67 lines
1.3 KiB
// Copyright (c) 2024, Thomas Dickson |
|
// See LICENSE for licensing information |
|
|
|
package main |
|
|
|
import ( |
|
"fmt" |
|
"os" |
|
"strings" |
|
|
|
"mvdan.cc/fdroidcl/adb" |
|
) |
|
|
|
var cmdScan = &Command{ |
|
UsageLine: "scan", |
|
Short: "Scan for all recognised apps on a connected device", |
|
} |
|
|
|
func init() { |
|
cmdScan.Run = runScan |
|
} |
|
|
|
func runScan(args []string) error { |
|
if err := startAdbIfNeeded(); err != nil { |
|
return err |
|
} |
|
devices, err := adb.Devices() |
|
if err != nil { |
|
return fmt.Errorf("could not get devices: %v", err) |
|
} |
|
|
|
if len(devices) == 0 { |
|
return fmt.Errorf("no devices found") |
|
} |
|
|
|
for _, device := range devices { |
|
fmt.Fprintf(os.Stderr, "Scanning %s - %s (%s)\n", device.ID, device.Model, device.Product) |
|
scanForPackages(device) |
|
fmt.Fprintln(os.Stderr, "Scan completed without error") |
|
} |
|
return nil |
|
} |
|
|
|
func scanForPackages(device *adb.Device) { |
|
cmd := device.AdbShell("pm list packages") |
|
|
|
out, err := cmd.Output() |
|
if err != nil { |
|
fmt.Println("could not run command: ", err) |
|
} |
|
// fmt.Println(string(out)) |
|
// otherwise, print the output from running the command |
|
lines := strings.Split(string(out), "\n") |
|
// fmt.Println(lines) |
|
|
|
for _, line := range lines { |
|
if len(line) > 8 { |
|
line = line[8:] |
|
// fmt.Println(line) |
|
|
|
apps, err := findApps([]string{line}) |
|
if err == nil { |
|
fmt.Println(apps[0].PackageName) |
|
} |
|
} |
|
} |
|
}
|
|
|