0

私は UsbDevice へのアクセスを許可し、彼のデバイス名 ( /dev/bus/usb/002/002) を取得し、それを実行されたプロセスに渡して USB デバイスを操作しました (詳細はavrdudeを参照)。

Process process = Runtime.getRuntime().exec(commandArray);

権限が拒否されました」というエラーが表示されます。

W/System.err( 9368): avrdude: ser_open(): can't open device "/dev/bus/usb/002/002": Permission denied
W/System.err( 9368): ioctl("TIOCMGET"): Invalid argument

Avrdude はアプリのサンドボックス ( /data/data/%package%) 内にあるため、avrdude を実行するためだけに root 化する必要はありません (確かに)。UsbDevice Android アプリ プロセスへのアクセスを許可し、すべての子プロセス (avrdude) が対応する USB デバイス ファイルにアクセスできると信じています。

何かご意見は?ルート化は望ましくありません。

4

2 に答える 2

1

ファイル記述子に関しては、JNI を使用してネイティブに渡すことができます。

// ジャバ

プライベート ネイティブ void NativePassFd(int fd);

// c

JNIEXPORT void JNICALL Java_com_MyName_MyPackage_MyClass_NativePassFd(JNIEnv* env, jobject obj, jint fd);

ネイティブ コードから、読み取り/書き込み機能を使用できるはずです。これらは、FILE ポインターの代わりに fd を使用することを除いて、fread/fwrite と同じように動作する必要があります。別のプロセスでは fd が無効であることが重要です (Android の Binder メカニズムなどの特別なメカニズムによって渡される場合を除く)。

ssize_t read(int fd, void *buf, size_t count);

ssize_t write(int fd, const void *buf, size_t count);

于 2013-06-06T03:39:43.547 に答える