無料ブログはココログ

« AndroidでMindをどうやって動かすか(1) | トップページ | レイアウト系 »

2013年5月 7日 (火)

AndroidでMindをどうやって動かすか(2)

 MindではMコードがオブジェクトコードの実体であるため、当然だがMコードファイル(.mco)の扱いが重要となる。
 しかし Android OS から見た狭義のプログラムは JavaのクラスファイルとC(JNI)の共有ライブラリの2つであり、当然だがMコードは関与されない。そのためファイルの設置や読み出しは自前で行う必要がある。

 まず設置については、パッケージ(.apk)の中にMコードファイルを含めておき、アプリ起動時にそれが自動展開されるのが良いのだが、調べたところこの目的に合致したのが assets/ ディレクトリだった。
 assets/ ディレクトリは元々、画像や音楽ファイルを置くような用途を想定されているらしく、Read Only なアクセスとなるがMコードへは書き込みは無いためその点も都合が良い。また、Mindで使うUnicodeの変換テーブルなどのデータファイルもここに置くことにした。
 読み出しについては、MコードのロードはC管轄なのでCで読めると良かったのだがどうも困難なようで(Cから普通のファイルのようにはアクセスできない)、仕方なくJavaで読み出したあと、Cの初期化関数呼び出し時に渡すようにした。

 開発時のディレクトリ構成(プロジェクトフォルダ内)は以下のようになる。

MindSample/
|
|-- AndroidManifest.xml
|
|-- assets                              ←プログラムからロードするファイルはここ
|   |-- bin
|   |   |-- euc-uni-encode.bin              ←Unicodeテーブル
|   |   `-- uni-euc-decode.bin
|   `-- mco
|       `-- main.mco                        ←Mコードファイル(Mindプログラム本体)
|
|-- bin
|   |-- MindSample-debug.apk
|   ~略~
|   |-- classes
|   |   `-- jp
|           `-- co
|               `-- scriptslab
|                   `-- MindSample
|                       |-- MindSampleActivity.class
|
|-- jni                                 ←Mindのカーネルはここへ
|   |-- 0ker.c
|   |-- 1ker.c
|   |-- 2ker0.c
|   |-- 2ker1.c
|   ~略~
|   |-- sources
|   `-- unixdep.c
|
|-- libs                                ←カーネルの生成場所
|   `-- armeabi
|       `-- libdllker.so
|
|-- mind4andr                           ←Mind記述のプログラム
|   |-- andrlib                             ←ランタイムライブラリ(2)
|   |   |-- andr_basicoutput.src
|   |   |-- andr_init.src
|   |   ~略~
|   |   `-- obj
|   |-- app                                 ←ユーザ記述のMindプログラム
|   |   |-- sample.src
|   |   `-- obj
|   |-- file                                ←ランタイムライブラリ(1)
|   |   |-- asm_osdep.src
|   |   |-- asmequ.src
|   |   ~略~
|   |   `-- obj
|   `-- lib
|       |--
|       `--
|
|-- obj
|   `-- local
|       `-- armeabi
|           |-- libdllker.so
|           `-- objs
|               `-- dllker
|                   |-- dllker.o
|                   |-- dllker.o.d
|                   |-- osfunc.o
|                   `-- osfunc.o.d
|
|-- res
|   |-- layout                          ←res/layout/main.xml は置かない
|   `-- values
|       `-- strings.xml
|
`-- src
    `-- jp
        `-- co
            `-- scriptslab
                `-- MindSample
                    `-- MindSampleActivity.java


 assets/ 以下では、サブディレクトリ mco/ にMコードを格納し、bin/ にはUnicode変換用のテーブルを置いた。単にここに置いておけばビルド時に .apk に含めてもらえる。

 jni/ フォルダにはMind用のC記述プログラム(以下、単にカーネルと言うことにする)を格納している。カーネルのオブジェクトファイル群は obj/ 配下に格納され、そのうちメインのオブジェクトである libdllker.so がJava側ビルド時に libs/ に複写されこれが最終的な .apk に含められるようだ。
 libs/armeabi/ という名称から分かるように、ARM系CPU専用となっているため他のCPUでは走行できない点に注意が必要だ。他のCPUも別のカーネルを用意すれば良いのだと思うが今のところはARM向けということで進むことにする。

 mind4andr/ フォルダへはMind記述のプログラムを格納する。
 ライブラリの順位は低いほうから file → andrlib → app である。app/内にユーザ記述のMindソースを置くことにしたがこのあたりはこの先変更するかも知れない。ソケット(通信)・グラフィック・その他のためにさらに別ディレクトリが必要になると思うが追々やっていくことにする。

 res/ フォルダでは、Androidのプログラミングで必ず登場する res/layout/main.xml(レイアウトを記述するファイル)はMindでの開発では使わない。レイアウトはすべてプログラム記述とするためである。これに関係するが、書籍やWebサイトでの多くのサンプルプログラムはレイアウトを main.xml に記述しており、プログラム記述のものを探すのに苦労した。



参考URL: 「日本語プログラミング言語Mind」 (スクリプツ・ラボ)

« AndroidでMindをどうやって動かすか(1) | トップページ | レイアウト系 »

Android」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/100109/57331040

この記事へのトラックバック一覧です: AndroidでMindをどうやって動かすか(2):

« AndroidでMindをどうやって動かすか(1) | トップページ | レイアウト系 »