2013-02-07 5 views
5

/dev/tty *ファイルのアクセス権を変更する必要があります。私は、Windowsのコマンド・プロンプトから、rootとしてadbシェルを入力することによって権限を変更することができます。アンドロイドのttyポートのアクセス許可と所有権をプログラムで変更する

ただし、デバイスを再起動すると、アクセス許可は保持されません。代わりに、デフォルト値に設定されます。

再起動後にアプリを実行する必要があるたびに、権限を変更する必要があります。

Runtime.exec()メソッドを使用してアプリケーションからadbコマンドを実行しようとしましたが、アプリケーションにファイル所有権を変更する権限がないため、何も変更されません。

これは、(この場合はエミュレータでそれをテストした)、私はアプリからコマンドを実行する方法である:

Process process = Runtime.getRuntime().exec("su"); 
DataOutputStream os = new DataOutputStream(process.getOutputStream()); 
os.writeBytes("chown root:root /dev/ttyS0 \n"); 
os.writeBytes("chmod 777 /dev/ttyS0 \n"); 
os.writeBytes("exit\n"); 
os.flush(); 
os.close(); 
process.waitFor(); 

「SU」コマンドが実行されます場合は、それが、そのためにエラーsu: uid 10044 not allowed to su を与えますchownまたはchmodを実行するとエラーが発生するUnable to chmod Operation Not permitted

どのようにしてそのファイルのアクセス権と所有権を変更できますか?

ご協力いただきありがとうございます。

ありがとうございます!

+0

エミュレータまたはデバイス?デバイスの場合は、根っからのかどうか?そして、「アンドロイドアプリ」から「adb root」をプログラムで実行するとはどういう意味ですか? – Shaiful

+0

これはデバイスにあります..コマンドプロンプトで/ dev/tty *ファイルのアクセス権を変更するには、adb rootコマンドを与えた後にadbシェルを入力する必要があります。つまり、adbはrootとして実行する必要があります。私は許可 –

+0

を変更することはできませんし、コマンドプロンプトから権限を変更することができます。しかし、私はコードで同様の処理をしたい。 –

答えて

1

デフォルト(Google提供)suバイナリチェックUIDが実行されています。 suを実行できるのは、rootshellのユーザーだけです。 suは、をチェックしていないパッチ済みのsuバイナリをインストールしないかぎり、アプリケーションから実行できません。

すべてのものをadb rootコマンドは、デバイス上で以下のコマンドを実行しているん:

setprop service.adb.root 1 
stop adbd 
start adbd 

しかし、私はあなたがここで間違った質問をしていることを肯定しています。 suコマンドがあなたの目的のために機能しない理由はありません。

あなたはttyデバイスの権限を変更するために実行されるべきコマンドがある:アンドロイドでも

Runtime.getRuntime().exec("su root chmod 777 /dev/ttyS0"); 

.代わり:chownコマンドでユーザーおよびグループフィールド間の区切り文字として使用されています。適切なコマンドは次のようになります。

su root chown root.root /dev/ttyS0 
+0

私は質問を更新しました..あなたはそれを確認してください –

関連する問題