Lệnh cài đặt ứng dụng từ điện thoại?


14

Tôi muốn SSH vào điện thoại của mình, tải xuống APK và cài đặt nó từ xa. Có một lệnh có sẵn trên điện thoại sẽ cho phép tôi làm điều này?

VÍ DỤ:

wget localhost/file.apk 
android_install file.apk

Cần tự động hóa cài đặt, vì tôi vừa vô tình xóa thẻ SD và mọi thứ trên đó. :


Câu trả lời:


12

Trong trình giả lập vỏ adb hoặc thiết bị đầu cuối (và rất có thể qua SSH), bạn có thể sử dụng pmtiện ích để cài đặt ứng dụng. Lệnh là:

chiều cài đặt /sdcard/app1.apk

Sau đây là các công tắc của 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

Ví dụ: bạn có thể buộc ứng dụng cài đặt trực tiếp vào bộ nhớ ngoài (kiểu Froyo / Gingerbread.)

PS wgetTiện ích nên có sẵn qua BusyBox trên CM7. Nếu không, bạn luôn có thể cài đặt nó qua Android Market .


Đây chính xác là những gì tôi đang tìm kiếm. pmkhông tồn tại /system/bin/pm, nhưng không may là qua SSH (thậm chí là root), nó không làm gì cả. Chạy bất kỳ pmlệnh nào tạo ra không có đầu ra. Có điều gì đó tôi đang làm sai? Nó hoạt động trong trình giả lập thiết bị đầu cuối, không phải vì SSH vì một số lý do :(
Naftuli Kay

Tôi đã có PM làm việc gốc từ adb trong CM6; Ngoài ra tôi không chắc chắn.
Broam

1
Tôi có thể hỏi lý do bạn thích SSH hơn ADB shell là gì không?
Chahk

1
@Chahk: adbchỉ hoạt động qua cáp USB, phải không? Và SSH có thể qua một mạng không dây. Ngoài ra, sshcó ở khắp mọi nơi, nhưng adbphải được cài đặt.
imz - Ivan Zakharyaschev

Lỗi: java.lang.SecurityException: Quyền từ chối: runInstallCreate từ lệnh pm yêu cầu chạy như người dùng -1 nhưng đang gọi từ người dùng 11; điều này đòi hỏi

6

Tôi khuyên bạn nên cắm điện thoại của mình vào máy tính có cài đặt sdk (hoặc ít nhất là adb) và ở chế độ gỡ lỗi. Sau này, hãy viết một tập lệnh đi qua các ứng dụng của bạn và cài đặt chúng qua adb, vd adb install x:\path\to\app1.apk.


Không có tiện ích gốc trên điện thoại để làm điều này?
Naftuli Kay

1
Không, vì hầu hết các ứng dụng chỉ sao chép tệp .apk của chúng vào / data / app. Bạn có thể thử sao chép tất cả các apks của mình ở đó và sau đó khởi động lại (lưu ý rằng điều này cần root, nhưng tôi giả sử từ thẻ cyanogenmod mà bạn đã root).
onik

Bây giờ đó là điều tôi có thể làm qua SSH,cp * /data/app && reboot
Naftuli Kay

1
lưu ý rằng lệnh cp không có sẵn trong kho Android (tức là ROM không tùy chỉnh), vì vậy nếu bạn không sử dụng Cyanogen, bạn có thể cần phải (ab) sử dụng catlệnh.
Lie Ryan

2
Trên thực tế, trên điện thoại có một lệnh như vậy. pm install /sdcard/app1.apksẽ làm điều tương tự adb installvà có thể được thực thi trong shell adb, trình giả lập thiết bị đầu cuối và rất có thể qua SSH. Hãy nhìn vào đầu ra của pmnhiều lựa chọn hơn. Thậm chí còn có một công tắc để buộc ứng dụng cài đặt trực tiếp vào bộ nhớ ngoài (kiểu Gingerbread).
Chahk

2

Tôi đang sử dụng cùng một phương pháp và có SSH là tuyệt vời! Nhưng có vẻ như khi bạn SSH sang Android, nó sẽ có một shell khác với sh vì vậy nếu bạn đặt sh trước lệnh thì nó sẽ hoạt động.

Đây là một ví dụ: sh /system/bin/pm install app1.apk

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.