できるのであれば教えて欲しいのですが、現在、作成しているアプリでは、
linuxのコマンドを実行することが可能です。
例えば、下記のようなことが可能です。
os.execute( "dd if=/sdcard/test.dat of=/sdcard/test1.dat" )
そこで、さらに自作のコマンドを追加したいと思っています。
NDKを用いて、include $(BUILD_EXECUTABLE)としてndk-buildすると、ビルド
はできました。
これをroot権限があるマシンなら、適当なところに置いて、前記自作アプリか
ら呼び出せるのですが、root権限が無い場合は、システム側に入れることも実行
権限をつけることも困難です。
そこで、自作アプリのapkに入れて、インストール時に実行権限付きで展開す
るようなことができないかと考えました。
このようなことは、可能なのでしょうか。
可能だとすれば、該当eclipsのプロジェクトのどこに置いて、どういう風に展
開すればできますでしょうか。
わかる方がいらっしゃれば、教えてください。よろしくお願いします。
--
山本三七男 (Minao Yamamoto) ---------------- ハンドル:たろサ -----
E-Mail: taro...@gmail.com
たろサです。
ありがとうございます。
assetsに置いておいて、パッケージ領域に自力展開すればいいのですね。
了解しました。githubのソースを参考にさせていただきます。
ありがとうございます。
E-Mail: taro...@gmail.com
ソースを参考にさせてもらって、作ってみました。
ありがとうございました。
--
//**************************************************
// assets/bin以下にあるコマンドを本体フォルダにコピーします。
//**************************************************
private int assetsCopyBin(){
String folder = "bin";
FileOutputStream output = null;
int ret = 0;
String[] cmds = new String[] { "/system/bin/chmod", "755", "" };
try {
Runtime runtime = Runtime.getRuntime();
AssetManager as = getResources().getAssets();
String[] binfiles = as.list(folder);
int n;
int DEFAULT_BUFFER_SIZE = 1024 * 4;
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
//asset/bin/以下のファイルを /data/data/パッケージ名/files/以下にコ
ピーします
for(int i=0; i<binfiles.length; i++ ){
InputStream is = as.open(folder+"/"+binfiles[i]);
output = openFileOutput(binfiles[i], Context.MODE_PRIVATE);
n = 0;
while (-1 != (n = is.read(buffer))) {
output.write(buffer,0,n);
}
output.flush();
output.close();
is.close();
//パーミッションを設定します
cmds[2] = getFileStreamPath(binfiles[i]).getAbsolutePath();
runtime.exec(cmds);
}
} catch (IOException e) {
e.printStackTrace();
ret = 1;
}
return ret;
}
--
java初心者なので、変なところで悩んでいるのかもしれませんが、
File#setExecutable(boolean)。これはいい。と思って、
getFileStreamPath(binfiles[i]).setExecutable(true);
としても、.setExecutable(boolean)が出てこないです。
getFileStreamPath(binfiles[i]).でeclipsさんが候補に出すのは、
getFileStreamPath(binfiles[i]).setReadOnly();と、
getFileStreamPath(binfiles[i]).setLastModified(time);くらいです。
どこを勘違いしているのでしょうか。
E-Mail: taro...@gmail.com
自己解決しました。
setExecutable(boolean)は、API Level9 でした。
--
な
2011/2/16 たろサ <taro...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
>