/system へのファイルアクセスに関して

3,701 views
Skip to first unread message

ToT

unread,
Oct 5, 2009, 12:54:35 AM10/5/09
to 日本Androidの会
お世話になっております、小山です。

アプリ内部で /system 配下のlibフォルダへファイルを
コピー/移動させたいのですが、できないのでしょうか?
コピーコマンドは実装されてなかったので、移動コマンドの場合、

Runtime.getRuntime().exec("mv /sdcard/aaa.txt /system/lib");

としたのですが、/system/lib にファイルが移動されません。

/system 配下ですが、READ Onlyとなっていて、これが原因なのだと
思いますが、write可能にするにはどうしたらよいでしょうか?

シェルを使用して行う場合、adb remountしてから、
adb pushでファイルを置くということは分かったのですが。。。

何か良い知恵ございましたら、ご教授下さい、よろしくお願いします。

Akio Kondo

unread,
Oct 5, 2009, 1:23:46 AM10/5/09
to 日本Androidの会
こんどう@組み込みWGです。

その操作にはroot権限が必要です。
systemパーティションのリードオンリーを書き込み可能に変えてから
mvやcatコマンドを使う必要があります。

環境は何を使っていらっしゃいますか?
HT-03Aではsystem配下を書き込み可能にする事は通常の方法では出来ません。
マーケットでアプリを配布することをお考えであれば、
root権限を持てるように改造したユーザーしか利用できないアプリになってしまうので
意図したアプリにはならないのではないでしょうか。
#rootユーザー向けに配信したいというのであれば別ですけど。

エミュレータやroot権限が取得できるようにしたDevPhone1、GDDPhoneを使っていて、
デモや個人的に使用するのであれば
rootになった状態で
mount -o rw,remount /dev/block/mtdblock3 /system
でsystemパーティションを書き込み可能に出来ます。
元に戻す場合は
mount -o ro,remount /dev/block/mtdblock3 /system
です。

#それ以外の機種の場合は機種毎にパーティション構成が違うと思いますのでご注意ください。

ToT

unread,
Oct 5, 2009, 2:33:28 AM10/5/09
to 日本Androidの会
早速のアドバイスありがとうございます。

環境は、SDK1.6のエミュレータ環境です。
早速やってみます。

ありがとうございます。
> > 何か良い知恵ございましたら、ご教授下さい、よろしくお願いします。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

ToT

unread,
Oct 5, 2009, 2:54:11 AM10/5/09
to 日本Androidの会
小山です。

1.5以降、アプリでのroot権限取得できないようになっているようですね。。
adb shellでは、root権限ありますが。。。

もうちょっと頑張ってみます。

ありがとうございました。
> > - 引用テキストを表示 -- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

mizmit1222

unread,
Oct 5, 2009, 2:58:08 AM10/5/09
to 日本Androidの会
みずの@組み込みWGです。

アプリケーションはそれぞれ異なるユーザIDで動いています。root
権限は取れないと考えてください。

加えて、エミュレータだと、/systemは、起動時にsystem.imgが
ramdisk上に展開されてマウントされます。したがって、もしアプリ
ケーションから/systemにファイルがコピーできたとしても、再起
動すると消えてなくなります。

/systemのリフレッシュをしないソフトリセット的な方法があるよ
うな記述がどっかにあったように思いますが、どこだったか記憶が。

ではでは。

On 10月5日, 午後3:33, ToT <taoy...@fsi.co.jp> wrote:

Akio Kondo

unread,
Oct 5, 2009, 3:28:29 AM10/5/09
to 日本Androidの会
こんどうです。

エミュレータに限ればroot権限取得しても怒られないと思うので
エミュレータ上のアプリでのroot取得方法をさわりだけ書いておきます。

adb remount
でsystemパーティションを書き込み可能にする。

adb push su /system/bin/su
でコマンドをエミュレータに転送

adb shell shmod 755 /system/bin/su
suコマンドに実行権限を付加

※android上でrootになる事が出来るsuバイナリは、
 自分でビルドするか、ぐぐってみてください。

suコマンドを使ってrootになるサブプロセスを作るには以下の
android.kernel.orgのAndroidのterminalアプリのソースコードが参考になると思います。
mydroid/development/apps/Term/src/com/android/term/Term.java

みずのさんが書かれているように、エミュレータだとsystemを書き換えても
エミュレータを落とすと元の状態に書き換えられてしまうので、
毎回書き換える必要があります。

では。

ToT

unread,
Oct 5, 2009, 11:17:26 PM10/5/09
to 日本Androidの会
小山です。


みずの様、こんどう様、いろいろと情報ありがとうございます。

#ちょっと考えると、アプリでroot権限取れるといろいろと悪さができますね。


エミュレータ環境だといろいろと面倒そうですね。
/system配下にファイルを置く場合は、アプリで置くより、システム側に組み込んで
/system配下にファイル出力するようにした方がよいですね。
#システム側に組み込める場合はですが。

アプリ側からの場合は、自分のフォルダ(/data/data/アプリ)配下にした方が
簡単ですね。
アプリ側の仕様を変更してみます。

いろいろとありがとうございました。
> > > > - 引用テキストを表示 -- 引用テキストを表示しない -
>
> - 引用テキストを表示 -
Reply all
Reply to author
Forward
0 new messages