add playstore apk puller
parent
6c066b442c
commit
227333cb14
|
@ -0,0 +1,47 @@
|
||||||
|
#!/usr/bin/env bb
|
||||||
|
|
||||||
|
(require
|
||||||
|
'[clojure.tools.cli :refer [parse-opts]]
|
||||||
|
'[clojure.string :as string])
|
||||||
|
|
||||||
|
(def cli-options
|
||||||
|
[["-b" "--bundle BUNDLE" "The bundle id"]])
|
||||||
|
|
||||||
|
;;executes shell command but throws exception on error
|
||||||
|
(defn- safe-sh [& commands]
|
||||||
|
(as-> (apply shell/sh commands) $
|
||||||
|
(if (= (:exit $) 0) $ (throw (Exception. (:err $))))))
|
||||||
|
|
||||||
|
;;gets the working directory, but removes the new line in the end
|
||||||
|
(def wd (as-> (:out (safe-sh "pwd")) $
|
||||||
|
(subs $ 0 (- (count $) 1))))
|
||||||
|
|
||||||
|
(def options (:options (parse-opts *command-line-args* cli-options)))
|
||||||
|
|
||||||
|
(if-let [bundle (:bundle options)]
|
||||||
|
(do
|
||||||
|
(def packages (->>
|
||||||
|
(safe-sh "adb" "shell" "pm" "path" bundle)
|
||||||
|
:out
|
||||||
|
(string/split-lines)
|
||||||
|
(map #(last (re-find #"package:(.*)$" %)))))
|
||||||
|
|
||||||
|
(println (str "found " (count packages) " packages, pulling.."))
|
||||||
|
|
||||||
|
(doseq [package packages]
|
||||||
|
(safe-sh "adb" "pull" package wd))
|
||||||
|
|
||||||
|
(println "successfully pulled packages.")
|
||||||
|
(println "install them to the currently connected device? (y/n): ")
|
||||||
|
|
||||||
|
(def file-names (map #(str wd fs/file-separator (.getName (io/file %))) packages))
|
||||||
|
|
||||||
|
(let [answer (read-line)]
|
||||||
|
(when (= answer "y")
|
||||||
|
(if (< 1 (count file-names))
|
||||||
|
(apply safe-sh "adb" "install-multiple" file-names)
|
||||||
|
(safe-sh "adb" "install" (first file-names))))))
|
||||||
|
|
||||||
|
(println "error: you need to provide a bundle id with -b [BUNDLE]"))
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
# Playstore APK Puller
|
||||||
|
A script that extracts the installed APKs for the provided bundle id from the currently connected device via adb.
|
||||||
|
APKs are downloaded to the current working dir when executing the script.
|
||||||
|
Optionally you can also directly install the downloaded APKs to another device (by disconnecting the device you've pulled the APKs from and launching an emulator, for example).
|
||||||
|
|
||||||
|
## Example Usage
|
||||||
|
```bash
|
||||||
|
pap.clj -b com.example.app
|
||||||
|
```
|
||||||
|
|
||||||
|
### Fish
|
||||||
|
You can create a fish function to easily use the script from any directory.
|
||||||
|
|
||||||
|
```
|
||||||
|
function pap
|
||||||
|
PATH_TO_SCRIPT/pap.clj $argv
|
||||||
|
end
|
||||||
|
|
||||||
|
funcsave pap
|
||||||
|
```
|
Loading…
Reference in New Issue