ホーム > Technical > AndroidのフルソースからビルドしたエミュレータでSDを認識しない場合

AndroidのフルソースからビルドしたエミュレータでSDを認識しない場合

タイトルそのままなんだけど、私の環境で発生して解決できたようなのでメモ。

AVDを使わずに、フルソースをビルドして出来上がった各種イメージファイル(out/target/product/generic/system.imgなど)を使ってエミュレータを起動した場合(emulatorのパラメータで-system/-ramdisk/-kernelなどを付けたとき)、-sdcardでSDイメージファイルをちゃんと指定していてもエミュレータがSDイメージを認識せずに「SDが刺さっていない」ことになってしまうことがあるようだ。

mksdcardでイメージを作り直したりしても同じで、しばらくハマっていたところで本家フォーラムで回避策を発見。

Cupcake Emulator do not mount SD card image – Android Developers | Google グループ

実際のバグトラッキングページはこちら↓。

Change 9452: Ensure that /system/etc/vold.conf is created in the "generic" product. This is necessary to let the emulator mount SD Card images properly through the "vold" mounting daemon | review.source Code Review

どうもソースをmakeしたときに、out/target/product/generic/system/etc/ の下にvold.confというファイルが作成されないかららしい。

ちなみにvold.confの中身はというと、

## vold configuration file for the emulator/SDK

volume_sdcard {
    ## This is the direct uevent device path to the SD slot on the device
    emu_media_path /devices/platform/goldfish_mmc.0/mmc_host/mmc0

    media_type     mmc
    mount_point    /sdcard
    ums_path       /devices/platform/usb_mass_storage/lun0
}

と、SDのマウントの設定が書かれている。これが無いとそもそもエミュレータがSDを認識しないようになってる模様。

さてvold.confが正しく生成されるために、ここにある差分をマージする。

diff --git a/core/main.mk b/core/main.mk

--- a/core/main.mk
+++ b/core/main.mk

@@ -209,6 +209,14 @@ ifeq (,$(filter %:system/etc/apns-conf.xml, $(PRODUCT_COPY_FILES)))
     $(warning implicitly installing apns-conf_sdk.xml)
   endif
 endif
+# Install a vold.conf file is one's not already being installed.
+ifeq (,$(filter %:system/etc/vold.conf, $(PRODUCT_COPY_FILES)))
+  PRODUCT_COPY_FILES += \
+       development/data/etc/vold.conf:system/etc/vold.conf
+  ifeq ($(filter eng tests,$(TARGET_BUILD_VARIANT)),)
+    $(warning implicitly installing vold.conf)
+  endif
+endif

# If we're on an eng or tests build, but not on the sdk, and we have
# a better one, use that instead.
ifneq ($(filter eng tests,$(TARGET_BUILD_VARIANT)),)

パッチ適用後もう一度makeすると、vold.confが生成される。またsystem.imgも更新されるようだ。

これでエミュレータを起動すると、今度はきちんとSDが認識されるようになる。

…これで半日くらい潰した…。

関連する記事:

  1. Androidで自作アプリをプリインストール状態にする 自分でシステムイメージを作ってデバイスに焼いたり、エミュレータで使いたい人以外にはニーズないし、本当に正しいやり方かどうかも分からないけど、とりあえずメモ。 1. mydroid/packages/app 以下にアプリのソース一式を置き、Android.mkを作る。 実際は、mydroid/packages/app 以下でなくても mydroid/external の下でもどこでも良いはず。むしろ......
  2. Androidのx86向けでビルドエラー ここのところAndroidづいてるな...。 今日はx86用のビルドに挑戦。 第1回 話題の携帯向けOS「Android」をx86パソコンで動かしてみよう:ITproを参考にしてみたのだけど、エラーが出てビルドが通らない。 Copy: out/target/product/eee_701/installer/root/system/bin/netcfg Copying installer base......
  3. CSVをPerlで処理したいのだけど… ものすごく初歩的なところでハマっているのかもしてないけど、とりあえず書いておく。 1,1,1,1,1,1,1 2,2,2,2,2,2,2 3,3,3,3,3,3,3 というようなCSVファイルがあって、これをPerlで読み込みたいとき open (FILE,"test.csv); my @data =...
  4. gentoo + apache2 + ssl でちょっとハマる /etc/conf.d/apache2 で APACHE2_OPTS = "-D SSL -D SSL_DEFAULT_VHOST" と、"SSL_DEFAULT_VHOST"を追加で指定しないとSSLでアクセスできないのね。"-D SSL"が指定してあるのになんでダメなんだろう…と一時間半くらい悩んだ。...
  5. pdnsdでDNSキャッシュ うちのネットワーク環境は、DNSに難がある。 ADSLルータにDNSキャッシュ機能があるけど、1ヶ月くらいルータを起動していると固まる プロバイダ提供のDNSは回線の混雑具合で問い合わせに時間かかる時がある 今までは、自宅のサーバにdnbdnsの流れをくむdnscacheをインストールしていたのだけど、 これはこれで長期間起動していると応答がなくなるようだ 設定が非常に独特でややこしい。/serv......
  6. Ubuntuのapacheで個人ディレクトリのpublic_html以下を使う たいしたネタでは無いけど、メモ。 apacheをインストールしただけだと、/var/www/ 以下がDocument Rootになるのだけど、ここはsudoしないとファイルを置くことができない。 ユーザーのホームディレクトリのpublic_htmlを対象に含めたいときは、UserDirモジュールを使うように設定する必要がある。 設定ファイルは、 /etc/apache2/mods-availabl......

コメント:0

コメントフォーム
入力した情報を記憶する

トラックバック:0

この記事のトラックバック URL
http://www.swingingblue.net/mt/archives/002529.html/trackback
トラックバックの送信元リスト
AndroidのフルソースからビルドしたエミュレータでSDを認識しない場合 - きままな日記帳 より

ホーム > Technical > AndroidのフルソースからビルドしたエミュレータでSDを認識しない場合

検索
フィード
メタ情報

ページの上部に戻る