カスタムデバイスのAndroid 4.3があります。一部のコマンドで問題が発生します。例の 1 つです。
su -c 'pm enable com.android.systemui'
このコマンドをadbで実行すると機能します。ただし、このライブラリを使用してプログラムでコードを実行すると、機能せず、エラーも表示されません。
興味深い観察:
Shell.SU.available() : false
Shell.SU.isSELinuxEnforcing() : false
わかりましたので、デバイスはルート化されています。そのライブラリを使用してそのコマンドを実行しようとしている理由は何ですか?
私が言おうとしているのは、シェルコマンドを自分で実行できないのはなぜですか?
runRootCommand
方法:
static boolean runRootCommand(String command) {
boolean status = true;
DataOutputStream os = null;
try {
Process process = Runtime.getRuntime().exec("su");
os = new DataOutputStream(process.getOutputStream());
os.writeBytes(command + "\n");
os.writeBytes("exit\n");
os.flush();
process.waitFor();
} catch (IOException | InterruptedException e) {
Log.e(TAG, e.toString());
status = false;
} finally {
try {
if (os != null)
os.close();
} catch (IOException e) {
Log.e(TAG, e.toString());
status = false;
}
}
return status;
}
そして、そのメソッドを次のように呼び出します。
boolean success = runRootCommand("pm enable com.android.systemui");
if(success) {
// command was successful
} else {
// command was NOT successful
}
これにより、コマンドは "su" (スーパーユーザー) として実行されます。お役に立てれば。