質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

4040閲覧

androidアプリからiperfを実行すると"Permission denied"になり、原因が分からず、困っています。

huckepain

総合スコア14

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2019/11/12 08:03

https://lactone.club/IT/Android.Iperf.CrossCompile.php

上記のURL通りのiperfのバイナリファイルを作成し、
context.getFilesDir().getAbsolutePath()の場所に保存し、
chmodで777に権限を変更しても、
androidアプリから実行すると
「java.io.IOException: error=13, Permission denied」が発生し、
実行ができません。
原因が分からず困っています。
置き場所が悪いのでしょうか?
(※悪い場合は、いい場所を教えていただけるとありがたいです。
sdcardの方だと実行はできないみたいですので。。。)

java

1try { 2 getApplication().getAssets().openFd("iperf"); 3 4 String[] commands = new String[] { 5 "iperf", 6 "-h" 7 }; 8 File dir = new File(sketchPath("bin")); 9 ProcessBuilder processBuilder = new ProcessBuilder(Arrays.asList(commands)); 10 processBuilder.directory(dir); 11 Process process = processBuilder.start(); //→ここでExceptionが発生する 12 BufferedReader bufferedReader = new BufferedReader( 13 new InputStreamReader(process.getInputStream())); 14 String _temp = ""; 15 while ((_temp = bufferedReader.readLine()) != null) { 16 Log.d(TAG, "temp line: " + _temp); 17 } 18 } catch (IOException e) { 19 Log.d(TAG, "command error;" + e.toString()); 20 e.printStackTrace(); 21 } 22 23private String sketchPath(String path){ 24 return context.getFilesDir().getAbsolutePath()+"/"+path; 25}

↓androidmanifest.xmlには一応以下は入っています。

xml

1<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 2 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

多くの実機のAndroid端末ですと、iperfを実行するアプリ自体のユーザーアカウントがroot権限を持っていないので、実行は無理だと思います。端末でrootを取るか、一部の androidエミュレーター上でないと。

投稿2019/11/12 08:18

編集2019/11/12 08:19
dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

huckepain

2019/11/12 08:36

ご回答ありがとうございます。 adbコマンドからだと実行できるのは、shell自体がrootと同等の権限があるという認識でよろしいのでしょうか? 別の方法を考えます。
dodox86

2019/11/12 08:42

> shell自体がrootと同等の権限があるという認識でよろしいのでしょうか? そうですね。adbをホスティングするプロセスがroot権限を持っているはずです。
dodox86

2019/11/12 08:48

> 別の方法を考えます。 adbでシェルにログインした後、そのアカウント(root)でシェルスクリプトを動作させ、バックグラウンドで動かし続けることができたケースがあります。かなり昔のAndroidバージョンの端末やエミュレーターでの例で、機種ごとのAndroidのポーティングに依存していましたので、セキュリティが強化されている今は恐らくできないと思いますが。
huckepain

2019/12/20 00:42

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問