2014/11/13

[android]fplutil (2)

fplutilを動かすのに、いくつかインストールしてある必要がある。
Windowsでやっているから、それベースで書くが、他のプラットフォームでもそれほど変わるまい。

  • Android SDK
  • Android NDK
  • ant
  • python

コマンドラインで動かすためにパスを通す必要があるが、それはパスが通ってなかったときに考えよう。
足りてるかどうかは別として、以下は動いていることが確認している。

  • javac, javaw
  • adb
  • android
  • ant
  • python
  • ndk-build

overview

ここに、ライブラリで出来ることが書いてある。

libfplutilは、main()やprintf()で書いたような普通の(traditional)アプリをAndroidで開発できる

意味がわからない・・・。
まだ動きを試していないので、想像だけしてみよう。

きっと、AndroidアプリにTextViewがぺたっと貼られたアプリができあがるのだろう。
やはり、その背景色は黒で、文字が白。
pythonとかを絡ませるところを考えると、C/C++のプリプロセスの前にソースファイル自体の変換を行い、main()やprintf()をうまいこと置き換えるのだろう。

さて、ではサンプルを動かしてみようか。


Using libfplutil_main

libfplutilは、libfputil_mainとlibfputil_printの2つからできているらしい。
どちらもstatic libraryのようだ。
NDKがshared libraryだから、組み込みやすくしているのかな?

まずはmainの方だが、これはNativeActivityとして実装されるらしい。
名前は聞いたことがあるようなないような・・・。
まあ、書いてあるソースを見てみよう。

#include <android/log.h>
int main(int argc, char *argv[]) {
    __android_log_print(ANDROID_LOG_VERBOSE, "test", "Hello World");
    return 0;
}

これって、native層のログの書き方やん!
よい例が出てこないけど、OESFで「__android_log_print」を検索すると、いろいろ出てくるだろう。
ともかく、知ってる人には知っている書き方が使えるようだ。

また、標準のC/C++だけではマルチスレッドのようなしくみがないため、イベント待ち、みたいな処理を書くことができない。
大ざっぱに言えば、イベントを待つというのは、どこかのメモリを眺め続ける作業になる。
変化がなければ、イベントが来ていないので何もしない。
変化があれば、イベントが来たとみなして処理を進める。

それだけといえばそれだけなのだが、「ずっと何かする(ここではメモリの変化を見る)」という作業は、かなり電力を使うということが問題になる。
例えば、CPUが(コアが、というべきか)1つだけの場合、プロセスがイベントが来るかどうかをずっと待っていた場合、CPU使用率は100%になるだろう。
「待つ」という処理を、一生懸命やっているのだ。けなげではないか。
コンピュータとしては、一生懸命むずかしい計算をしているのも、一生懸命待っているのも、あまり変わりは無く電力を消費することになる(違うマイコンもあるが)。


Using libfplutil_print

標準出力(stdout)を、terminalに出力するようだ。
libfplutil_printは、libfpl_mainには依存していないらしく、単独で使える。


入れてみよう

githubからclone。
cloneしたが・・・configureとかがないな。
わからんので、exanplesを見る。

build_all_anrdoidというコマンドがあるらしいので、書いてある通りに打ってみた。
Androidまで接続していると、ビルドしてアプリ転送までやってくれる。

いろいろログが出てしまうが、こんな感じでlogcatに出てきた(logcat -s main、でフィルタできるらしい)。

I/ActivityManager(  535): Start proc com.google.fpl.libfplutil.example for activity com.google.fpl.libfplutil.example/android.app.NativeActivity: pid=24609 uid=10068 gids={50068, 9997} abi=armeabi-v7a
I/art     (24609): Late-enabling -Xcheck:jni
V/PhoneStatusBar(  651): setLightsOn(true)
V/threaded_app(24609): Creating: 0xac370b60
V/threaded_app(24609): Config: mcc=440 mnc=0 lang=ja cnt=JP orien=1 touch=3 dens=320 keys=1 nav=1 keysHid=3 navHid=0 sdk=21 size=3 long=1 modetype=1 modenight=1
I/main    (24609): Hello, World!


できることの最初だけしか見ていないが、Javaを何も書かなくても、とりあえずログだけではあるが動かせるというのは面白い。
どこまでどうできるのかわからないけど、自分でandroid OSをビルドするようなシステムを作っている場合、アプリから自分で組み込んだ下回りを動かすようなことができるかもしれんな。

アプリに組み込むというのも説明されているが、あとは各人でご参照下され。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。