2016-11-01 23 views
0

私はカスタムデバイスを持っています。いくつかのコマンドで問題が発生します。例の1つ:suはadbとプログラムで異なって動作します

su -c 'pm enable com.android.systemui' 

このコマンドをadbで実行すると、問題が発生します。しかし、私がコードthisを使用してプログラムで実行すると、それはうまく動作せず、エラーも表示されません。

興味深い観察:

Shell.SU.available() : false 
Shell.SU.isSELinuxEnforcing() : false 
+0

で 'adb'を使用すると、あなたのデバイスがルートされていなくてもそのコマンドを実行できますが、使用するライブラリに関係なくデバイスがルートされていなければ、物理的なデバイスが実際に根付いていたら? –

+0

@ th3pat3l、デバイスはデフォルトでルートされています。だから、私はほとんどのルートコマンドを実行することができます。例えば、 "reboot"コマンドだけを実行すると、動作しません。しかし、私はそれを実行すると、ルートデバイスとして再起動します。 – guness

+0

私は答えを投稿しました。それがあなたを助けるかどうか参照してください –

答えて

0

オクラホマので、デバイスが根ざしています。そのライブラリを使用してそのコマンドを実行しようとしている理由は何ですか?

私が言っているのは、自分でシェルコマンドを実行できないということです。

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"(スーパーユーザ)などのコマンドを実行します。 これが役立つことを願っています。

+0

問題は私がsuとしてコマンドを実行する方法ではありません。問題はsu自体です。問題は、どのようにしてADBルートのようにアクセスレベルを達成できるのかです。 – guness

+0

デバイスがルートされている場合は、すでに「アクセスのレベル」があります。それはちょうど正しい方法でそれをすることの問題です。テストしたい場合は、プレイストアから端末アプリをダウンロードしてコマンドを実行してください。それが動作します。 –

関連する問題