コンテンツへスキップ

6

Android OS/開発環境が進歩する一方で、私の家には古くて一般的には使えないAndroid 1.6の端末が転がっています。しかし古すぎる為か、最新の開発環境ではすんなりとビルドすることが出来ませんでした。

ここでは、Android Studio 2.x環境でAndroid 1.6向けのアプリケーションをビルドするための方法を紹介したいと思います。

... "Android Studio 2.x環境でAndroid 1.6 Donuts(API-4)向けアプリをビルドする方法" を続けて読む

18

以前にSHARP IS01を有志の方がAndroid 4.1までバージョンアップしたバイナリを配布しておられ、私もその恩恵に預かっていました。いつの間にやらダウンロード先が消滅してしまったので、勝手ながら再アップロードしてみました。

... "Android 4.1 for IS01のバイナリ(JBonIS01)" を続けて読む

SIMDという言葉自体はよく聞いたことある(コンピュータ関係のお仕事をされている方や、PC好きな方は特に)のですが、活用しているかというと全くしていません。多分、ちょっとでもパフォーマンスアップしたら良いなぁとコンパイラオプションにSIMD有効化を指定するぐらいではないでしょうか。

(そもそもSIMDとはなんぞや、というのはWikipediaを参照ください)

ここではSIMDについての覚書を残しておきます。

... "SIMDで高速化を図る" を続けて読む

久々にAndroid開発環境に触って、やっぱり昔にはまった(ような気がする)箇所にはまったので覚書。

Androidアプリでネットワーク、GPS等々にアクセスするのにPermission設定が必要です。

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

AndroidStduioのコード補完機能で入力して、操作ミスってnameの中身が全部大文字になって嵌りました。全然ネットワークアクセスできねぇ、と。

PCをスマートフォン等の携帯端末からコントロールしようとするにあたって、悩ましい事があります。

1.画面が小さい
ともかく見にくい。タブレットくらい大きな画面があれば別だと思いますが、スマートフォンのサイズだとそのまま表示するときついです。
操作部分だけでも拡大機能をつけてどうにかと思っています。

2.マウスがない
PC操作はマウスが主です。タッチで左クリックとするにしても、右クリックとかどうしよう。ホイールは?

スマートフォンならではのジェスチャー操作を駆使するしかないかも。
実装しながら確かめるしかないかなあ。

7

ついに我が家のIS01もJellyBeansへとアップデートしました。以前の2.1(Froyo)もそうですが、素晴らしいカスタムROM有難うございます。本当に職人さんに感謝です。

今回参考にさせて頂いたサイトはこちら。

JCROM on IS01 〜日本独自のカスタムROMをIS01で〜

実は以前にも挑戦したことがあり、その時は(何故か)上手くいきませんでしたが今回は成功。ちょっと心配になるくらい長いブートロゴ表示を経て起動しました(前回はあわや文鎮かといやな汗が出ました)。

device-2013-06-11-180342

動かしてみた感じとしては、ちょっと「もっさり」しています。必要とするメモリ量がかなり増えているようで、もともとメインメモリの少ないIS01は厳しいようです。Autokiller Memory Optimizerのようなメモリを確保するアプリをインストールしてやると動きが良くなります。CPU性能的にはいけてそうな感触がします。

また、いまプログラム中のVNCもどきアプリも動かしてみたところ、どうも2.1の時より動作が軽くなっているように感じます。トレースを取ってみるとソケット周りが変更されているように見られました(2.1:Java -> 4.x:ネイティブになっている?)。処理周りは色々と最適化されているのかもしれません。ガベージコレクトが頻繁に走らないようにプログラム出来れば、結構パフォーマンスに期待出来そうです。

次で詳しくと言いながら、まだパフォーマンスアップ目指してソースコードを弄っています。中々に手ごわいです・・・

やっている内容はPC側プログラムで以下の2の部分になります。

  1. Windowsアプリケーションのウィンドウをキャプチャする
  2. キャプチャした内容を圧縮テクスチャ(ETC1フォーマット)に変換
  3. Android端末へ送信

圧縮テクスチャをリアルタイムで作り、それでパラパラ漫画のように表示してしまおうという作戦でした。が、圧縮テクスチャを生成するのに結構な時間がかかっています。今使わせてもらっているのはrg-etc1という高速なライブラリですが、それでもまだ足りません。なにせ動画なので、秒間10フレームくらいは欲しい・・・。
残念ながら現状は1024*768サイズ(32bit)で200msecくらいかかります。処理の一部をSIMDに置き換えたりとチューンを続けていますが、100msecまで持っていくのは結構きつそうです。
(もともと300msec前後だったのをどうにか200msecまで縮めた)

また、今度はAndroid側のお話になりますが、圧縮テクスチャはGPUが展開処理を行います(と認識してます)。その為にJPEG等と違ってAndroidのCPUに負荷をかけずに色々と出来るに違いない・・・というのが当初の目論見でした。ある程度動作させてみて間違ってはいませんでしたが、テクスチャを使用する際にはGPUにテクスチャオブジェクトというものを作成します。これと実際にVRAMへ転送したテクスチャ画像を紐付けして管理しているようです。
今回の場合は動画にするつもりなので、画面更新の度にテクスチャを更新する必要があります。この更新処理が思ったより重いらしく、単純にVRAMへテクスチャ転送するだけの割にはCPUを使っているようです。
(テクスチャオブジェクトの生成は重い処理のようです)

ちょっと調べてみると、OpenGLにはテクスチャオブジェクトを破棄せず画像データだけを更新する処理が定義されていましたが、なんとETC1は未サポート。。。上手くいかないものです。

ようやっとETC1生成まわりの処理が動作しました。

オープンソースで公開されているrg-etc1というライブラリを使わせてもらってDLLを作成し、JavaからJNAを使って接続という流れになりました。処理時間が短縮すべくSIMDに手を出したり、なかなかに勉強になります。次の記事でもう少し詳しく書こうかと思います。

Androidがサポートしているテクスチャフォーマット"ETC1"を使って画像を圧縮&Wifi転送する手法について検討しています。

... "圧縮テクスチャ(ETC1)を作る" を続けて読む

相変わらずVNCもどきをいじり続けています。

プログラムはちょっと修正しまして、Android実機からWindows側に簡単な操作(マウス操作とキー入力)を送信。この状態でFPSが8前後で落ち着きました。
正直遅いですが、かろうじて動画っぽくは見えるかなと。
操作は遅れが1secくらいあります。500msecくらいまで改善したいなあ。

で、さらなるスピードアップをすべくOpenGLで描画するように修正しました。
結果は、、、残念なことに遅い。3FPSくらい?
プロファイルを見た感じ画像展開と描画にえらい時間がかかっていて、まずいところを探しています。
処理時間のトップはJPEGイメージの読み込み(メモリへの)のようで、ここを改善したいところです。
ちなみにPNGなら軽くなるかと変えて見たところ、もっと遅くなりました。
うーむ。。。

------------------------------------------
OpenGL関連で参考にさせて頂いたサイト

http://android.keicode.com/basics/opengl-overview.php

http://blog.oukasoft.com/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0/%E3%80%90android%E3%80%91%E3%82%A2%E3%83%B3%E3%83%89%E3%83%AD%E3%82%A4%E3%83%89%E3%81%A7opengl%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B%EF%BC%882d%E3%83%86%E3%82%AF%E3%82%B9%E3%83%81/