Memerintahkan untuk menginstal aplikasi dari ponsel?

14

Saya ingin SSH masuk ke telepon saya, mengunduh APK, dan menginstalnya dari jarak jauh. Apakah ada perintah yang tersedia di telepon yang memungkinkan saya melakukan ini?

MISALNYA:

wget localhost/file.apk 
android_install file.apk

Perlu mengotomatiskan pemasangan, karena saya baru saja secara tidak sengaja menghapus kartu SD saya dan semua yang ada di dalamnya. :(

Naftuli Kay
sumber
1
stackoverflow.com/questions/7076240/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

12

Di adb shell atau terminal emulator (dan kemungkinan besar melalui SSH) Anda dapat menggunakan pmutilitas untuk menginstal aplikasi. Perintahnya adalah:

pm pasang /sdcard/app1.apk

Berikut ini adalah sakelar dari pm:

usage: pm [list|path|install|uninstall]
       pm list packages [-f] [-d] [-e] [-u] [FILTER]
       pm list permission-groups
       pm list permissions [-g] [-f] [-d] [-u] [GROUP]
       pm list instrumentation [-f] [TARGET-PACKAGE]
       pm list features
       pm list libraries
       pm path PACKAGE
       pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH
       pm uninstall [-k] PACKAGE
       pm clear PACKAGE
       pm enable PACKAGE_OR_COMPONENT
       pm disable PACKAGE_OR_COMPONENT
       pm setInstallLocation [0/auto] [1/internal] [2/external]

The list packages command prints all packages, optionally only
those whose package name contains the text in FILTER.  Options:
  -f: see their associated file.
  -d: filter to include disbled packages.
  -e: filter to include enabled packages.
  -u: also include uninstalled packages.

The list permission-groups command prints all known
permission groups.

The list permissions command prints all known
permissions, optionally only those in GROUP.  Options:
  -g: organize by group.
  -f: print all information.
  -s: short summary.
  -d: only list dangerous permissions.
  -u: list only the permissions users will see.

The list instrumentation command prints all instrumentations,
or only those that target a specified package.  Options:
  -f: see their associated file.

The list features command prints all features of the system.

The path command prints the path to the .apk of a package.

The install command installs a package to the system.  Options:
  -l: install the package with FORWARD_LOCK.
  -r: reinstall an exisiting app, keeping its data.
  -t: allow test .apks to be installed.
  -i: specify the installer package name.
  -s: install package on sdcard.
  -f: install package on internal flash.

The uninstall command removes a package from the system. Options:
  -k: keep the data and cache directories around.
after the package removal.

The clear command deletes all data associated with a package.

The enable and disable commands change the enabled state of
a given package or component (written as "package/class").

The getInstallLocation command gets the current install location
  0 [auto]: Let system decide the best location
  1 [internal]: Install on internal device storage
  2 [external]: Install on external media

The setInstallLocation command changes the default install location
  0 [auto]: Let system decide the best location
  1 [internal]: Install on internal device storage
  2 [external]: Install on external media

Misalnya, Anda dapat memaksa aplikasi untuk menginstal langsung ke penyimpanan eksternal (gaya Froyo / Gingerbread.)

PS wgetUtilitas harus tersedia melalui BusyBox di CM7. Jika tidak, Anda selalu dapat menginstalnya melalui Android Market .

Chahk
sumber
Inilah yang saya cari. pmmemang ada di /system/bin/pm, tetapi sayangnya lebih dari SSH (bahkan sebagai root) tidak melakukan apa pun. Menjalankan pmperintah apa pun tidak menghasilkan output. Apakah ada yang salah yang saya lakukan? Itu bekerja di terminal emulator, hanya tidak lebih dari SSH untuk beberapa alasan :(
Naftuli Kay
Saya memiliki pekerjaan PM sebagai root dari adb di CM6; lebih dari itu saya tidak yakin.
Broam
1
Bolehkah saya bertanya apa alasan Anda lebih memilih SSH daripada shell ADB?
Chahk
1
@ Chahk: adbhanya bekerja melalui kabel USB, bukan? Dan SSH dapat melalui jaringan nirkabel. Juga, sshada di mana-mana, tetapi adbharus diinstal.
imz - Ivan Zakharyaschev
Kesalahan: java.lang.SecurityException: Izin Penolakan: runInstallCreate dari perintah pm meminta untuk dijalankan sebagai pengguna -1 tetapi menelepon dari pengguna 11; ini membutuhkan android.permission.INTERACT_ACROSS_USERS_FULL
6

Saya sarankan Anda mencolokkan ponsel Anda ke pc dengan SDK (atau setidaknya adb) diinstal dan dalam mode debugging. Setelah ini, tulis skrip yang melewati aplikasi Anda dan instal melalui adb, mis adb install x:\path\to\app1.apk.

onik
sumber
Tidak ada utilitas asli di ponsel untuk melakukan ini?
Naftuli Kay
1
Tidak, karena sebagian besar aplikasi hanya menyalin file .apk mereka ke / data / app. Anda dapat mencoba menyalin semua apks Anda di sana dan kemudian me-reboot (perhatikan bahwa ini membutuhkan root, tapi saya berasumsi dari tag cyanogenmod yang Anda root).
onik
Nah, itu yang bisa saya lakukan di SSH,cp * /data/app && reboot
Naftuli Kay
1
perhatikan bahwa perintah cp tidak tersedia dalam stok Android (mis. ROM non-kustom), jadi jika Anda tidak menggunakan Cyanogen, Anda mungkin perlu (ab) menggunakan catperintah.
Lie Ryan
2
Sebenarnya, di telepon ada perintah seperti itu. pm install /sdcard/app1.apkakan melakukan hal yang sama seperti adb installdan dapat dieksekusi di adb shell, terminal emulator, dan kemungkinan besar melalui SSH. Lihatlah output pmuntuk opsi lainnya. Bahkan ada saklar untuk memaksa aplikasi untuk menginstal langsung ke penyimpanan eksternal (gaya Gingerbread).
Chahk
2

Saya menggunakan metode yang sama dan ya SSH hebat! Tapi sepertinya ketika Anda SSH ke Android itu mendapat shell yang berbeda dari sh jadi jika Anda meletakkan sh di depan perintah itu seharusnya bekerja.

Ini sebuah contoh: sh /system/bin/pm install app1.apk

mehellra
sumber