1

標準アプリとしてリリースする予定のないアプリを開発しています。単一のルート化されたデバイスで実行されます。

/sys/ ディレクトリ内のファイルに書き込む機能が必要です。問題のファイルは root が所有しており、-rw-rw-rw- 権限を持っています。

ファイル システムのこの領域への書き込みを禁止するためにコードが実行される VM に制限がある可能性があることは承知していますが、別のアプリケーションが明らかにこれを行っていることを確認しました。

これは可能ですか?どのようにそれを達成することができますか?電話をルート化する必要があるかどうかは問題ではありません (私が使用している開発者はそうです)。


FileWriter を使用してファイルに書き込むだけで、次のエラーが発生することを調べました.flush()

java.io.IOException: Invalid argument
at org.apache.harmony.luni.platform.OSFileSystem.writeImpl(Native Method)

また、「su」の有無にかかわらず、Java からシェル コマンドを実行しようとしました。それぞれ「リクエストが拒否されました」と「許可が拒否されました」を返しました。

Process process = Runtime.getRuntime().exec("echo 'hello' > /sys/file");

最後に、C が魔法のようにこのファイルに書き込むことができた場合に備えて、NDK と JNI を使用してみました。このファイルにアクセスしようとするとfflush、EOF (エラーが発生したことを意味します) が返されます。


すべての提案は大歓迎です!

4

3 に答える 3

7

メソッド Runtime.getRuntime().exec(String) は、単に入力文字列を実行可能ファイルのファイル名として扱います。echo コマンドを受け入れません。代わりに、次のように Runtime.getRuntime().exec(String[]) を使用する必要があります。

String[] cmd = { "/system/bin/sh", "-c", "echo xxx > /sys/somefile", };
Runtime.getRuntime().exec(cmd);

または、sys ファイルに何かを書き込むには、java.io.PrintWriter クラスを使用する必要があります。例については、 http://www.netmite.com/android/mydroid/frameworks/base/core/java/android/os/Debug.javaを参照して「startNativeTracing()」を検索してください。

当然のことながら、上記のすべては、sys ファイルがアプリケーションに対して書き込み可能である場合にのみ機能します。

于 2010-09-24T10:38:58.623 に答える
1

実際のコードを共有して、実際に何をしようとしているのかを教えていただく必要があると思います。「無効な引数」は、不適切なものに書き込もうとしたときに発生する EINVAL で失敗する write(2) に対応します。権限の問題ではありません。タイプのもの。このファイルは通常のファイルではありませんね。

于 2010-08-24T05:57:38.390 に答える
0

プログラムが root ユーザーのアクセスを要求するように、マニフェストを変更する必要があります。

http://developer.android.com/reference/android/Manifest.permission.html

public static final String FACTORY_TEST 以降: API レベル 1

root ユーザーとして、製造元のテスト アプリケーションとして実行します。デバイスが製造元のテスト モードで実行されている場合にのみ使用できます。定数値:「android.permission.FACTORY_TEST」

于 2010-08-10T17:44:08.897 に答える