Tôi đang làm việc trên một ứng dụng quản trị thiết bị (đã được nhà sản xuất ký). Tôi đang sử dụng nó để cài đặt các ứng dụng khác bằng lệnh shell adb bên dưới cho android 9: -
cat /sdcard/Download/myfolder/newapp.apk | pm install -S 1528293
và tôi chỉ vượt qua nó như thế này: -
String command = "cat /sdcard/Download/myfolder/newapp.apk | pm install -S 1528293"
Runtime.getRuntime().exec(command);
Nhưng tôi nhận được lỗi "mèo không biết tùy chọn S".
Lệnh tương tự hoạt động hoàn toàn tốt khi tôi chạy nó từ adb shell. Không biết những gì tôi đang làm sai và có thể sử dụng một số trợ giúp.
EDIT 1: - Tôi đã thử chạy lệnh như dưới đây: -
String[] commandInstall = {
"/system/bin/sh",
"-c",
"cat /sdcard/Download/myfolder/newapp.apk | pm install -S 1528293"
};
Process process = Runtime.getRuntime().exec(commandInstall);
Nhưng bây giờ tôi nhận được lỗi: -
ava.lang.SecurityException: Reverse mode only supported from shell
at com.android.server.pm.PackageInstallerSession.doWriteInternal(PackageInstallerSession.java:679)
at com.android.server.pm.PackageInstallerSession.write(PackageInstallerSession.java:612)
at android.content.pm.PackageInstaller$Session.write(PackageInstaller.java:852)
at com.android.server.pm.PackageManagerShellCommand.doWriteSplit(PackageManagerShellCommand.java:2447)
at com.android.server.pm.PackageManagerShellCommand.runInstall(PackageManagerShellCommand.java:915)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:158)
at android.os.ShellCommand.exec(ShellCommand.java:103)
at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:21330)
at android.os.Binder.shellCommand(Binder.java:634)
at android.os.Binder.onTransact(Binder.java:532)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:2821)
at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:3856)
at android.os.Binder.execTransact(Binder.java:731)
Chỉnh sửa 2: - Trước Android 9, tôi chỉ có thể thực hiện các thao tác bên dưới để cài đặt ứng dụng: -
Runtime.getRuntime().exec("pm install -r app.apk");