やまものブログ

メモ書きブログです (^_^;A

DDMS (Dalvik Debug Monitor Server) でエミュレータ上のファイルを本体にコピー

今週は、

CHAPTER 06 絵日記アプリを作ろう
の残り、下記の2章について、サンプルを実行することができました。
・LESSON 23 画像にスタンプを押してみよう
・LESSON 24 画像をSDカードに保存しよう

この2つのLESSON のサンプルは、deprecated(推奨しない,廃止) にも遭遇することなく、そのまま動いてくれました。下記がサンプルアプリの実行画面です。
イメージ 1


このスクリーンショットの先週分との違いは、LESSON 23, 24 に対応して2つあります。
(1) 梟の頭にある4つのハートマーク → アプリで画像にスタンプを押せます
(2) 保存ボタン → スタンプを押した画像を保存できます。

上記スクリーンショットでは、4つのハートマークが梟の頭の上についています。これはサンプルアプリ上でスタンプとして追加したものです。

スタンプを押した後の画像は、エミュレータ上の SDカード領域に保存されます。保存されたファイルを DDMS の File Explorer で確認すると、
 /storage/sdcard/jp.co.se.android.chapter06/imageurl/
にありました。これは、Javaコードの下記の指定に対応しているようです。
public static final String IMAGEDIR = "/sdcard/jp.co.se.android.chapter06/";

さらに、DDMS を使って、エミュレータ上のファイルを本体(Ubuntu)にコピーできました。メニューは下記の赤丸で囲った "Pull a file from the device" ボタンです。
イメージ 2


今回は Java コードでは一切苦労していませんが、自分の個人的な習慣に絡んで1点だけく苦労したことがありました。自分はファイルを編集する際、編集前のファイルを念のため保存しておきたい場合、拡張子を変更してファイルを保持します。今回はサンプルに用意されていた模範解答ファイルを拝借して、コードの入力作業を省略させてもらいました ここで、コード入力する箇所を確認できるようにしたかったので、初期状態のファイルを同じディレクトリに拡張子 ".0" を追加して残しておきました。これで初期状態のコードと模範解答のコードの diff が取れると考えました。具体的には、例えば、下記の2つのファイルが同じディレクトリに存在する状態になりました。
・res/layout/edit.xml … 模範解答ファイルのコピー
・res/layout/edit.xml.0 … 初期状態のファイル

ここで想定外だったのは、ADT が edit.xml.0 もリソースを記述した xml として認識したことです。2つのファイルには同じ id の定義があるため、重複した id が定義されているというエラーになりました。このことから分かったことは、ADT はファイルの種類を拡張子では判定していないということです。

改めて思い起こすと、ADT に限らず、Ubuntu ではファイルの種類の判断に拡張子を使いません。例えば、Nautilus でテキストファイルをダブルクリックすると gedit が起動してくれますが、拡張子を ".txt" にする必要はなく、例えば、拡張子の無いファイルでも、それがテキストであれば、自動的に gedit が起動してくれます。Windows に慣れていると、拡張子でファイルの種類を判断できると思いがちですが、これは要注意です。拡張子を変更してもファイルへのアプリの関連付けを断ち切ることはできないわけです