2013年8月6日火曜日

AndroidでAdobe AIRのデバッグ

先日AndroidでAdobe AIRのローカルファイルの動画再生ができないと書きましたが、その続きです。
ただし、結論から言ってしまうと状況は改善できていません。
ちなみに実験に使っているのはAndroid 2.3のP-01Dです。

動画ファイルはSDカードにおいているのですが、
Android 4.1以降ではアプリケーションから
SDカード上のファイルへのアクセスには許可を受ける必要があり、
それは"application.xml"のAndroidのマニフェストファイルに関する部分に追加しなければなりません。
[application]-[android]-[manifestAdditions]-[manifest]タグ内に
[android:name]要素が"android.permission.READ_EXTERNAL_STORAGE"な
[uses-permission]タグを加えればいいのですが、
簡単にいってしまうとインターネット接続の許可に関する
<uses-permission android:name="android.permission.INTERNET"/>
の行のすぐ下に
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
を追加すればいいだけです。
このあたりの抜かりはありません。

SDカードを読めない原因を探るにしてもデバッグできないと辛いので、
FlashDevelopのツールバーで"Release"ではなく"Debug"を選択してビルドし、
"PackageApp.bat"を実行したときに[2]を選択して"dist/movie-debug.apk"を作成し、
これをインストールします。
するとソースコード上のtrace()関数で指定した文字列がログに出力されるようになります。
ログを受け取る先は
"C:\Program Files\FlashDevelop\Tools\android\platform-tools"にあるadbコマンドで、
Android端末をPCとUSBでADBによって接続した上で
$ adb logcat
を実行すると見れます。余計なログを見たくなければ
$ adb logcat <アプリケーションID>:I *:S
とすればよいでしょう。
なお、アプリケーションIDは基本的に"air.air.<プロジェクト名>"になります。
adbコマンドはFlashDevelopに同梱されているものでなく、
Android SDKに含まれているものを使ってもかまいません。
Android SDKをインストールしているのなら、
GUIアプリケーションの"tools/ddms.bat"を使ってもかまいません。

デバッグバージョンのアプリケーションを実行すると
Adobe AIR
----------------------------------------------------------
デバッガー(<USBで接続しているPCのホスト名>)に接続できません
IPアドレスまたはホスト名を入力します。
のようなダイアログボックスが表示されますが、[キャンセル]すればいいようです。
ちゃんとログが出力されます。

さて、これでデバッグした結果ですが、
import flash.filesystem.File;
した上で
var file:String = File.documentsDirectory.nativePath;
trace(file);
を実行した結果からSDカードが"/mnt/sdcard"にマウントされていることがわかりました。
これは
$ ./adb shell
$ ls -l /mnt/sdcard
でここに存在するファイルを見ても正しいことがわかります。
もちろん再生対象となる"movie.flv"も見えます。
ところがアプリケーションを実行すると
Unable to locate video: /mnt/sdcard/movie.flv
のログが出てきます。何らかの理由で"/mnt/sdcard/movie.flv"にアクセスできません。
他にもテキストファイルの読み書きやらいろいろ試して見ますが、
まったくSDカードのファイルにアクセスできません。
なぜなんでしょうかね。

0 件のコメント:

コメントを投稿