本エントリーは随時更新中です。 Android2.2/Froyoから標準でサポートされることになったAppsOnSD機能(従来Apps2SDと呼ばれていた機能)の概要をざっくりまとめてみました。 ・Google公式のAppsOnSDに関する情報はこちら。 → App Install Location | Android Developers ・AppsOnSD機能は、アプリのパッケージを暗号化してmicroSDにインストール(保存)し、microSDからアプリを実行することができる。 AndroidManifest.xmlで「android:installLocation=”preferExternal”」を指定するだけ。 <manifest xmlns:android=”http://schemas.android.com/apk/res/android” android:installLocation=”preferExternal” … > ・アプリによっては、Android端末内部のNAND(/data)にインストール(保存)したアプリを、microSDに移動して、microSDから実行することができる。 Android端末内部のpmコマンドを使用する。 adb shell pm setInstallLocation 2 ・microSDを外部のPCなどからUSBマスストレージとしてマウントした場合は、AppsOnSD機能でmicoSDにインストール(保存)されているアプリは強制終了されるため、常駐するアプリには使用できない。 ・アプリは端末毎にランダムに生成した暗号鍵でSDカードに暗号化されて保存されるので、インストールに使用した端末でしか使用できない。 ・具体的には、以下のように保存される。 暗号鍵:/data/misc/systemkeys/AppsOnSD.sks (Android端末内に保存されており、root権限がないと読み出せない) 復号化されたアプリパッケージ:/mnt/asec/アプリパッケージ名-1/pkg.apk 暗号化されたアプリパッケージ:/mnt/secure/asec/アプリパッケージ名-1.asec 以下で詳しく見ていきます。 SDKのエミュレータでAndroid2.2/Froyoを実行して、ddmsでエミュレータ内を覗くと以下のようになっています。 microSDはvfat形式で、microSDのルートディレクトリ(/.)が/mnt/sdcardにRead/Write可能なデバイスとしてマウントされます。このフォルダ配下は従来通り主にデータ保存用として使用されます。 /dev/block/vold/179:0 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0 AppsOnSDを有効にしたアプリをインストールすると、/system/bin/voldが、dm-crypt?の暗号化ファイルシステムによってmicroSD上に暗号化してアプリパッケージファイルを保存します。 暗号鍵は、/data/misc/systemkeys/AppsOnSD.sksで、rootユーザしか読めないようになっています。 /mnt/asecにtmpfsというramdiskのような揮発的なファイルシステムがあり、 tmpfs /mnt/asec tmpfs rw,mode=755,gid=1000 0 0 /mnt/asecの下にReadonlyのディレクトリとして復号化されたアプリパッケージ毎のディレクトリが作成されてマウントされます。 ※com.AndroidTestApp03-1は、AppsOnSDをAndroidManifest.xmlでAppsOnSDを指定したアプリのパッケージ名です。 /dev/block/dm-0 /mnt/asec/com.AndroidTestApp03-1 vfat ro,dirsync,nosuid,nodev,noexec,uid=1000,fmask=0222,dmask=0222,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro [...]
最近のコメント