Android」カテゴリーアーカイブ

Android

Android 3.0 の改良点

Optimus Pad L-06C で使ってきた Android Tablet も 3台目です。
Android 3.0 は色々改良されていて良くなっています。

その一つが以前書いた内部ストレージの扱いです。
使いづらかった部分やハードごとの互換性問題を1つ1つ丁寧に
取り除いているようです。

例えば機種ごとに配列が異なっていて、統一性がなかったハードウエアキーも
無くなりました。BACK, HOME などのボタンは画面のシステムバーの上にあります。

 ・機種ごとに配列が異なることがなくなった
 ・向きに依存せず常に画面左下にあり場所が固定されていて分かりやすい
 ・周囲が暗くても確実にボタンを判別できる

そのかわり

 ・システムバー(ステータスバー)の位置が画面の上端から下端に変更された
 ・画面下部に常にシステムバー(ステータスバー)とボタンが表示される

BACK, HOME がないと操作できなくなるので、フルスクリーンアプリで
あっても常にシステムバーが表示されるようになりました。
アプリが使える画面の面積は 2.x 時よりわずかに少ないことになります。

●アプリ管理

Android 2.x までのアプリケーション管理は iOS と違い、設定の中にある
専用の一覧画面で行います。
Home 画面への配置、実行、アプリ削除、などの方法がどれもばらばらで
最初は分かりにくいと思いましたが、よく考えると Windows PC も同じです。

その点 Android 3.0 は iOS に近づきました。
アイコンが並ぶアプリ一覧画面から、アプリ実行と Home 画面への配置
だけでなくアンインストールや管理ができるようになっています。

android30_1.jpg

アンインストールはアイコンをドラッグして上のゴミ箱へ運ぶだけです。
右上の info マークへ運ぶと詳細が開きます。

マーケットボタンも右上に配置されており、入手から実行、削除までが
ひとつの画面でできるようになりました。

ソフトウエアをインストールすると Windows のインストーラのように
Home 画面にアイコンが配置されています。

●その他気がついたこと

・MENU ボタン

BACK, HOME は左下に配置しますが、Honeycomb のメニューボタンは右上
アクションバーにあります。
2.x 以前のアプリを起動した場合は互換性のため、システムバーの並びに
メニューボタンが現れます。

・検索ボタン/タスクボタン

2.x 以前はあれだけ主張していた検索ボタンがなくなっています。
タスクは HOME 長押しではなく専用のボタンが配置されるようになりました。

・ステータス

右下の時計エリアタッチで詳細がポップアップします。ポップアップした
ウィンドウをもう一度タッチすると、明るさ調整や画面の回転ロック、
モード切り替え、などの設定変更ができます。
設定用のウィジットを Home 画面にたくさん並べなくてもよくなりました。

関連エントリ
Android 3.0 LG Optimus Pad L-06C と USBメモリ
Android 3.0 の内蔵ストレージはわかりやすい

Android 3.0 LG Optimus Pad L-06C と USBメモリ

Android 3.0 Table である LG Optimus Pad L-06C には microUSB の
HOST ケーブルが付属しています。
USB メモリや USB タイプの SD カードリーダーなどをつなぐと
一応認識されているようです。

Filesystem             Size   Used   Free   Blksize
/dev                   331M    36K   331M   4096
/mnt/asec              331M     0K   331M   4096
/mnt/obb               331M     0K   331M   4096
/system                393M   199M   194M   4096
/data                   28G     1G    26G   4096
/cache                 393M     6M   387M   4096
/mnt/sdcard             28G     1G    26G   4096
/data/usbdisk           14G    37M    14G   32768   ←ここ

Android の設定画面には現れず、/data の中にあるためファイラーから
フォルダをたどっても見つけることができません。
直接 /data/usbdisk のパスを入力すればアクセスすることが可能でした。

パスを直接入力できるファイラーが見つからなかったので、
アストロ FILE MANAGER の Home フォルダに設定しています。

マウントは自動で行われますがアンマウントする手段がないので、
取り外す場合は一旦本体の電源を切らなければなりません。

Android 3.0 の内蔵ストレージはわかりやすい

Android 3.0 ではストレージの扱いが大きく変わっているようです。
本体に大容量のフラッシュメモリを内蔵している場合、Android 2.x 以前は
システムとメディアに分かれていて、さらに他に SDカードもあったりして
分かりにくい構造をしていました。(詳しくはこちら)

比べると Android 3.0 非常にシンプルです。内蔵フラッシュメモリは
iOS のようにほぼ単一で区別なく扱えるようになっています。

下記は LG Optimus Pad L-06C (Android 3.0, 内蔵フラッシュ 32GB)
の 設定→ストレージ の画面です。

android30.jpg

内蔵メモリの区別がなく、ひとつの領域として扱われているのがわかります。
互換性のため内部では /data, /sdcard と 2つのパーティションが
マウントされていますが、よくみるとディスクが共有されているようです。

Filesystem             Size   Used   Free   Blksize
/dev                   331M    36K   331M   4096
/mnt/asec              331M     0K   331M   4096
/mnt/obb               331M     0K   331M   4096
/system                393M   199M   194M   4096
/data                   28G   962M    27G   4096 ←
/cache                 393M     6M   387M   4096
/mnt/sdcard             28G   962M    27G   4096 ← (/sdcard)

区別がないので「SDカードへのアプリケーションインストール」自体が
不要となっています。
3.0 のアプリケーション管理画面には「SDカードに移動」がありませんでした。

↓/sdcard は仮想的なドライブになっているようです。

/dev/block/mmcblk0p4 /data ext4 rw,nosuid,nodev,noatime,barrier=1,data=ordered 0 0
/dev/fuse /mnt/sdcard fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0

マスストレージではなく MTP を使った PC との接続であること、
現時点で外付け SD カードに対応していないことなども、
密接に関連しているのだと思われます。

関連エントリ
Android とストレージ領域

Android 2.2 Creative ZEN Touch 2

Creative の Android 音楽プレイヤー、ZEN Touch 2 が
Android 2.2 に対応しました。

CREATIVE ZEN Touch 2

2.1 から 2.2 への変更は結構大きく、ZEN Touch 2 固有のいくつかの
問題も解消されているようです。

◎armeabi-v7a の native binary が動作する

OS 2.1 の時は NDK の armeabi-v7a でビルドされた Native Code を
ロード出来ませんでした。
2.2 へのアップグレードできちんと動作するようになっています。

◎armeabi-v7a 時に neon が使えるようになった

2.1 では cpuinfo の Features に neon がありませんでしたが 2.2 では
含まれています。NDK の判定コードがこの値を見ています。

◎Live 壁紙対応

他にも違いがあるかもしれません。

およそ一ヶ月前、3月末には同じく Creative の Android tablet ZiiO 7
にも Android 2.2 ファームウエアが公開されています。
これで回りにある Android デバイスはすべて 2.2 になりました。

関連エントリ
Android NDK r5 と armeabi, 浮動小数命令の種類
Android ZEN Touch 2 の CPU/GPU その2

Android NDK と NativeActivity

Android OS 2.3、API Level 9 から NativeActivity が利用出来るようになります。
画面の初期化やイベントの取得も Java コードを通らずに C/C++ だけで
記述することが可能です。

とは言え実際にアプリケーションを記述する手段はこれまでとほとんど変わりません。
jni フォルダに C/C++ コードを置いて ndk-build を使います。
生成されるバイナリも従来同様 Dynamic Link Library (dll) ~.so です。

・今までの NDK (jni)
  Java 上で dll をロードし、interface class を経由して呼び出し

・NativeActivity
  システムが直接 dll をロードし dll 内のエントリポイントを直接呼び出す

●エントリポイントの指定

最初に呼ばれる関数名を AndroidManifest.xml に記述します。

・Java コードを含まないことを宣言
   のアトリビュートに android:hasCode=”false”

・dll 名の指定
   宣言内に で指定する。
  例えば libappmain.so の場合


・エントリポイント名の指定
  例えば関数 Main_onCreate() から開始する場合


これで Activity の起動時に libappmain.so 内の Main_onCreate() が
直接呼び出されるようになります。

●イベント

Java と全く同様に NativeActivity も onStart, onResume, onPause, onStop,
onDestroy, onRestart 等のイベントが呼ばれます。
あらかじめイベントごとに Callback 関数を登録しておく必要があります。

onCreate のみ特別で、Callback ではなく Activity 起動時のエントリ関数として
AndroidManifest.xml に記述します。
AndroidManifest.xml に func_name の記述がない場合は関数名
ANativeActivity_onCreate() とみなします。
この関数の実体はアプリケーション側で記述しておく必要があります。

(1) onCreate で AndroidManifest.xml に記述した関数が呼ばれる
(2) onCreate 内部で他のイベントの Callback 関数を登録する
(3) 各イベントで Callback 関数が呼ばれる

●android_native_app_glue

ndk の sample/native-activity や NativeActivity の Reference に
掲載されてるコードは android_native_app_glue を使っています。
これはサンプルに含まれる Utility Library です。
内部では下記の動作を行っています。

1. 各イベントごとの Callback 関数を登録する
2. NativeActivity 用のスレッドを生成する
3. イベントを格納するキューを作る
4. ユーザー定義関数 android_main() をスレッドから呼び出す

つまり、これにより android_main をイベント待ちのループとして記述できる
ようになります。Win32 API とかでよくあるスタイルです。

●static 領域の初期化

NativeActivity でも従来の jni 経由の NDK (dll) 呼び出しと全く同じです。
Activity が onDestroy で破棄されても dll 自体はしばらくメモリ上に
常駐する可能性があります。
この場合再び onCreate しても static 変数の値が初期化されずに以前の値を
残しています。

onCreate 時に自分で初期化するか前回試したような dll の分離が必要となります。

参考ページ
NativeActivity

関連エントリ
Android NDK の初期化と dll の分離
Android アプリケーションとプロセス