2011-08-15 11 views
0

Runtime.getRuntime()。execメソッドを使用して外部プログラム(C言語で記述)を呼び出すアプリケーションを開発しようとしています。このプログラムは、基本的にgstreamerベースのRTSPサーバであり、Androidコマンドプロンプトから実行するとうまくいきます。しかし、私は、アプリケーションからプログラムを実行すると、私は次のエラーが表示されます。Androidアプリケーション:プログラムのソケットアクセスを許可する

は、私は私のAndroidManifest.xmlファイルにネットワークアクセスを与えていたソケット(パーミッション拒否)に結合する

を失敗しました。

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 

は私もこれを試してみました:

String cmd = "ping localhost"; 
Runtime.getRuntime().exec(cmd); 

これについて私が得た:

のping:ICMPソケットをオープンします。操作は、私も実行しようとした

を許可されていませんアプリからの別のプログラム(Androidの画面上に画像を表示する - サーフェスフラインガーシンク)そこで、私はandroid.permission.ACCESS_SURFACE_FLINGERをマニフェストファイルに含めました。しかし、サーフライナーシンクには表示できませんでした。

私は、これらのアクセス許可がこれらの外部プログラムに渡されないと感じています。これを達成する方法はありますか?私はこれらのCベースのプログラムをJavaに変換したくない。

答えて

2

個別の実行可能ファイルは正式にはサポートされていませんが、おそらくここで問題はありません。

インターネット権限はUNIXグループメンバーシップによって実装され、起動アプリケーションと同じユーザーIDで実行されるため、スタンドアロンの実行可能ファイルを追跡する必要があります。そのため、例えばローカル端末アプリケーションでコマンドラインそのシェル内のネットワーキングアプリケーション。おそらく、特権ポートまたはすでに使用されているポートにバインドしようとするなど、その他の問題が発生する可能性があります。技術的には、バインディングではなくAF_INETソケットの作成に関する許可チェックが行われます。したがって、エラーメッセージが正確であれば、インターネット権限で不足していることを示すものではありません(エラーは不正確であり、バインドされたソケットまでは失敗しています)。

ICMPとpingは興味深い状況です。私はサードパーティ製のアプリがNET_RAWを得ることはできないと思うので、setgidビットを使ってnet_rawグループを株式ping実行可能ファイルにします。あなたが独自のものを使っているなら、おそらくそれはないでしょうし、動かないでしょう。

iirc ACCESS_SURFACE_FLINGERはサードパーティのアプリケーションで使用できるアクセス許可ではありません。

関連する問題