Ich arbeite an einer Geräte-Admin-App (vom Hersteller signiert). Ich verwende es, um andere Apps mit dem folgenden Befehl adb shell für Android 9 zu installieren: -
cat /sdcard/Download/myfolder/newapp.apk | pm install -S 1528293
und ich gebe es einfach so weiter: -
String command = "cat /sdcard/Download/myfolder/newapp.apk | pm install -S 1528293"
Runtime.getRuntime().exec(command);
Aber ich bekomme den Fehler "Katze unbekannt Option S".
Der gleiche Befehl funktioniert einwandfrei, wenn ich ihn über die ADB-Shell ausführe. Ich weiß nicht, was ich falsch mache und könnte Hilfe gebrauchen.
EDIT 1: - Ich habe versucht, den Befehl wie folgt auszuführen: -
String[] commandInstall = {
"/system/bin/sh",
"-c",
"cat /sdcard/Download/myfolder/newapp.apk | pm install -S 1528293"
};
Process process = Runtime.getRuntime().exec(commandInstall);
Aber jetzt bekomme ich den Fehler: -
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)
Edit 2: - Vor Android 9 konnte ich für die Installation von Apps einfach Folgendes tun: -
Runtime.getRuntime().exec("pm install -r app.apk");
von PackageInstallerSession.java:
Wenn sich Ihre App unter System / App befindet, müssen Sie sie möglicherweise in System / Priv-App einfügen. Hoffe der Ursprung der Ausnahme hilft dir irgendwie.
quelle