Androidの最近のブログ記事

Android1.5用のAndroid Dev PhoneのシステムイメージもHTCから正式に公開されました。

http://www.htc.com/www/support/android/adp.html

 

以下、実際にAndroid1.1からAndroid1.5へ書き換えた際のメモです。
更新方法には、
「Update the Device Radio Firmware」→「Copy the Recovery Image Package to the Device」
の方法と、
「Update the Device Radio Firmware」→「Flash the System Image to the Device」
の方法がありますが、ここでは、後者の方法を紹介します。
 

事前準備

上記サイトから、OS毎のfastboot、バージョン毎のRadio Image、System Imageをダウンロードする。

 

Update the Device Radio Firmware

  1. デバイスにSDカードが挿入されていることを確認する
  2. デバイスを通常どおり起動する
  3. デバイスとPCをUSBで接続する
  4. コマンドラインから「adb devices」を実行し、デバイスと接続できていることを確認する
    ※「List of devices attached」の出力に続けて、デバイスのシリアル番号が表示されればOK
  5. コマンドラインから「adb push ota-radio-2_22_19_26I.zip /sdcard/update.zip」を実行し、
    1~2分待った後、「adb shell sync」を実行する。
    ※ota~zipは、必要なバージョンに応じて適宜読み替えてください、ここでの例は、Android1.5に書き換える場合の例
    ※しばらく待つのは、コピーしたバイト数が表示されていても、バックグランドでコピーが実行されていて、完了していない場合があるため
  6. (家のマークの)HOMEキーを押したままリブートし、いつものDroid君のあとに、
    (びっくりマーク)!アイコンが表示されるまで(押したまま)待つ
    ※リブートは、「adb shell」「su」「reboot」、もしくは、電源長押し後、電源を切って、入れ直す
  7. キーボードを出して、ALT + l キーを押し、Android system recovery utilityを起動させる
    ※ここでの l キーは、エルキーです、アイキーでも、数字の1キーでもないです
  8. ALT + s キーを押し、(先の5でコピーしておいた)update.zipの書き込みを実行させる
  9. 書き込みのプログレスバーが消えたら、
    (家のマークの)HOMEキー + (戻るマークの)BACKキーを押し、
    radio imageの書き込みを実行させると、矢印のイメージのあとに、自動的に再起動され、
    さらに、別のイメージ(ROMに矢印)が表示された後、通常どおり起動されます

 

Flash the System Image to the Device

  1. (戻るマークの)BACKキーを押しながら電源を入れる
    ※3体のDoid君がスケートボードに乗っているイメージに、FASTBOOTが表示されればOK
    ※黄色いラインにFASTBOOTでなく、Serial0が表示されている場合には、
     (戻るマークの)BACKでFASTBOOTに切り替えることができる(逆は、カメラキー)
  2. デバイスとPCを(USB接続していなければ)接続する
  3. 必要であれば、コマンドラインから「fastboot erase userdata」を実行する
    ※成功すると、「erasing 'userdata'... OKAY」と表示されます
    ※実行すると、ダウンロードしたアプリや、その他の設定が削除されます
     (SIMロックを解除していた情報や、セットアップ時に登録したgoogle acountなども含む)
     多くの場合、バージョンアップの際には不要です(バージョンダウンでは必要)
  4. コマンドラインから「fastboot erase cache」を実行する
    ※成功すると、「erasing 'cache'... OKAY」と表示されます
  5. コマンドラインから「fastboot update signed-dream_devphone-img-147201.zip」を実行する
    ※signed~zipは、必要なバージョンに応じて適宜読み替えてください、ここでの例は、Android1.5に書き換える場合の例
    ※fastbootモードを抜けるには、ADP1の場合、、
     (緑の電話)通話キー + (赤の電話)切断キー + MENUキーを押すと、再起動できる
    ※< waiting for device >と表示されていれば接続に失敗している
     Windowsの場合であれば、デバイスマネージャーから
     「ADB Interface - HTC Dream Composite ADB Interface」
     「ディスクドライブ - HTC Android Phone」
     「ポータブルデバイス - Android Phone」などを削除し、再インストールする
  6. 自動的に再起動されるはずであるが、そうでない場合、「fastboot reboot」を実行する
    ※確認した限りでは、自動的に再起動されました

 

ファームウェアのバージョンは、「Settings」-「About Phone」-「Firmware version」で確認できます。
Android 1.5の場合、「1.5」と表示されました。
しかしながら、「Settings」>「Locale & text」>「Select locale」では、「English」しか表示されませんでした。

android1.5.png

Android 1.5 SDK付属の「Spare Parts」アプリの「Battery information」を使用すると、以下のようなバッテリー情報を表示することできます。

BatteryInfo.png

※Android 1.1 SDK以前では、「Setting」アプリの「Abount Phone」>「Status」で、「Battery status」と「Battery level」しか表示できませんでした。

また、Android Marketにも、いくつかのバッテリー情報を取得するアプリが存在していたため、自分でも同情報を表示するアプリケーションを作成しようと試みたのですが、SDKのドキュメントを調べてみても、android.osパッケージのBatteryManagerクラスしか見つけられず。。。
(しかも、BatteryManagerは、ただの定数しか実装していないし。。。)

結局、androidのソースコードから検索して、Intent.ACTION_BATTERY_CHANGEDから取得できることがわかりました。
※ソースコード一式は、「バッテリーの情報(Battery information)を取得するには - 逆引きAndroid入門」に掲載しています

ところで、(受信した)Intent.ACTION_BATTERY_CHANGEDに対して、getIntExtra("status", )のようにキー名として、"status"を指定すると、ステータス情報を取得できるのですが、これらのキー名は、SDKのドキュメントに記載されていません。。。

今回は、ソースコードがあったのでキー名がわかったのですが、「インテントに格納されているキー名を列挙する」ということは可能でしょうか???どなたか ご存じであれば、教えてください。。。

Droid君、一目見た時から、「こいつはパスで描けそうだ!」と思っていたので実際に試してみました。。。

Path

ソースは、こちら(「パス(Path)を描画するには - 逆引きAndroid入門」)。
両目は、白の円で塗りつぶすのでなく、クリッピングしています。

ところで、頭から出でいる2本の線は、角?触覚?アンテナ???

[Android] AppWidget

| トラックバック(0) |

Androidの公式ブログ(Android Developers Blog)に、
Introducing home screen widgets and the AppWidget framework」という記事がありました。

内容は、Android 1.5 SDKで導入されたAppWidgetフレームワークにより、
開発者がホームスクリーン上でウィジットとして応答できるようになったということで、
具体的なサンプルソースコード(抜粋)と、その解説が掲載されています。
※サンプルソースコード(フル)の入手先(SVN  URL)については、「wiktionary-android - Google Code」に記載されています

また、AppWidgetについては、Android 1.5 SDK付属のApiDemosの下記ソースコードにもサンプルコードがあります。
%android-sdk-1.5_pre%\platforms\android-1.5\samples\ApiDemos\src\com\example\android\apis\appwidget\*.java

簡単に読んだ限りでは、以下の実装をすれば良さそうです。
※実際に試せてはないです...

1.AppWidgetProviderを継承したクラスを作成し、onUpdate()をオーバーライドして、フレームワークから呼び出されるウィジットの更新処理で、あなたのウィジットとして必要な処理を実装する。
このOnUpdate()では、時間のかかる処理をしてしまうと、Application Not Respoting(ANR)...応答なし、とみなされるので、そういう場合には、サービスで対応させる。

public class AppWidgetTest extends AppWidgetProvider {
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        Log.v("AppWidgetTest", "onUpdate");
    }
}

2.AppWidgetの最少幅、最小高さ、更新間隔などを記載したappwidget-providerをxmlに追加する。

<appwidget-provider
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="(セル(区画)の数*74)-2)dipを指定する"
    android:minHeight="(セル(区画)の数*74)-2)dipを指定する"
    android:updatePeriodMillis="更新間隔をミリ秒でいれる"
    />

3.アプリがAppWidgetとしてふるまうために、「android.appwidget.action.APPWIDGET_UPDATEに応答できるよ」ということを、AndroidManifest.xmlで宣言し、応答するAppWidgetProviderを継承したクラス(上記の1)、appwidget-providerのxml(上記の2)をメタデータとして関連づける。

<!-- Broadcast Receiver that will process AppWidget updates -->
<receiver android:name=".AppWidgetProviderを継承したクラス名" android:label="ウィジット名文字列">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
        android:resource="@xml/appwidget-providerを記載したxmlファイル名(.xml拡張子は除く)" />
</receiver>

Android SDKに付属のサンプルコードに含まれる「Snake」をビルドし、実行してみました。
※ソースコードは、%android-sdk%\samples\Snakeにあります

Snake.png

ゲームの内容としては、黄色い頭と赤い胴体の蛇(Snake)を上下左右カーソルキーで操作し、ランダムに出現する黄色いリンゴを食べ続けるというものです。リンゴを食べると、胴体が長くなり、だんだん移動速度も早くなります。自分の胴体や周囲の緑の壁に衝突するとゲームオーバーです。

ゲームの主要部分は、SnakeVIew.java(約560行)に書かれており、数少ないゲームのサンプルプログラムの一つです。このソースコードをベースに、音をつけたり、ネットワーク対戦型に拡張するなどすれば勉強になると思います。

※ちなみに、このSnakeゲームは、約25年前にPC-88でテープレコーダーから読み込んで遊んでいました(懐かしいです)

[Android] JetBoy

| トラックバック(0) |

Android 1.5 Early Look SDK付属のサンプルコードに含まれる「JetBoy」をビルドし、実行してみました。
※ソースコードは、%android-sdk-1.5_pre%\platforms\android-1.5\samples\JetBoyにあります

JetBoy

上図のとおり、横スクロール型シューティングゲームの見た目ですが、ゲームのサンプルコードだけでなく、Android 1.5で新規に追加されるandroid.mediaパッケージJetPlayerクラスのサンプルコードとなっています。

ゲームの内容としては、右から流れてくる隕石(Asteroid)に対して、タイミングよくボタンを押し、隕石を破壊するものですが、破壊できた隕石の数に応じて、BGMのビートが変更されるというものです。
※JetBoy(自機)の上下移動は自動的に行われます

このBGMのビートを変更しているソースコードは、JetBoyView.javaファイル、JetBoyViewクラスのprocessJetEvent()メソッド内のJetPlayerインスタンスへの呼び出しであり、JetPlayerクラスのためのサンプルコードとも言えそうです。
※背景の2重スクロールも同ファイルdoDrawRunning()メソッドで実現しています
※JetPlayerクラスのドキュメントは、%android-sdk-1.5_pre%/docs/reference/android/media/JetPlayer.htmlにあります

ちなみに、ゲーム終了時に50個以上破壊しているとクリアとなります。

はじめてのAndroidプログラミング―「Android SDK」で「Googleケータイ」用ソフトをつくる! (I/O BOOKS)」を読みました。
※本のタイトルが以前紹介した[Android] 「初めてのGoogle Androidプログラミング」を読みました - adakodaに似ていますが、別の本です

「はじめての...」ということで、初心者の方が対象です。
Android SDK1.0/1.1が対象ですが、1.1に特化した記載は無いです。
A5サイズなので片手で持って読めます。
以下、詳細です。
※全部で303ページ11章あります。

第1章 Android SDK (9ページ)
Android / SDKとは何か、Androidの構造など。

第2章 開発環境の整備 (30ページ)
Android SDK(1.1の新しいURL)の入手方法、SDKのインストール、Eclipse+Pluginのインストール、エミュレータの起動など。

第3章 まずは「Hello, World!」 (31ページ)
EclipseでHello Worldの作成する方法に加え、TextViewを追加して文字列を表示する方法。デバッガの使い方。AndroidManifest.xmlの記述など。

第4章 SDK付属のサンプルを解説 (45ページ)
SDK付属サンプルのLunarLander(月面着陸ゲーム)のソースコードに日本語でコメントをつけたソースコードが掲載されています。NotePadは、2ページだけですが紹介されています。
LunarLanderのようなゲームを作成したい方は、同コメントが参考になると思います。

第5章 コンポーネントについて (19ページ)
アクティビティ、ビュー、インテント、サービス、通知、コンテント・プロバイダなど。

第6章 画面のレイアウト (48ページ)
LinearLayout、TableLayout、RelativeLayout、AbsoluteLayout、その他のレイアウト、ボタンが押された時の処理、その他のコンポーネント(アナログ時計、デジタル時計、チェックボックス、オートフィル、プルダウンメニュー、画像のギャラリーの表示)、リソースファイルの画像ファイルの表示。
DroidDrawというコンポーネントをドラッグアンドドロップしてXMLファイルを作成するツールの紹介。

第7章 データの入出力 (27ページ)
ファイルの入出力、データベースの入出力(SQLite)など。

第8章 セキュリティ (4ページ)
アクセス制御としてユーザーIDの概念など。

第9章 各種サンプル (51ページ)
ビューの切り替え、ラジオボタン、オプションメニュー、コンテキストメニュー、プレファレンスの保存・取り出し、ファイル操作(第7章とは違って、ディレクトリのファイル一覧を表示するサンプル)、画像を移動させる、など。

第10章 トップ画面に項目を追加してアプリを動かす (9ページ)
アプリのインストール、アンインストール方法など。

第11章 「Android SDK」付属の「その他」のツール (6ページ)
Hierarchy Viewer、Draw 9-patchの紹介など。

Amazonの商品の説明は、以下のリンクから参照できます。

はじめてのAndroidプログラミング―「Android SDK」で「Googleケータイ」用ソフトをつくる! (I/O BOOKS)  

[Android] Android 1.5 Early Look SDK

| トラックバック(1) |

「Android 1.5 Early Look SDK」がリリースされました。
こちら(http://developer.android.com/sdk/preview/)のページからダウンロードできます。
※SDK1.5では、ADTの更新も必要であり、新しいバージョンのADT 0.9も公開されています。

また、Android1.5の機能(ハイライト)については、
こちら(http://developer.android.com/sdk/preview/features.html)に記載されています。

 

インストール手順

  1. http://developer.android.com/sdk/preview/ページを表示し、SDKとADT 0.9をダウンロードする。
  2. ダウンロードしたSDKを任意のフォルダに解凍/展開する。
  3. Eclipseを起動し、「Help」 > 「Software Update」メニューをクリックし、
    表示された「Software Updates and Add-ons」画面の「Installed Software」タブを表示後、
    「Android Development Tools」「Android Editors」を選択し、「Uninstall」ボタンをクリックする。
    ※この作業は、古いADT(例えば0.8)をインストールしていた方が対象です。
  4. 「Help」 > 「Software Update」メニューをクリックし、
    表示された「Software Updates and Add-ons」画面の「Available Software」タブを表示後、
    「Add Site」ボタンをクリックし、表示された「Add Site」画面の「Archive」ボタンをクリックし、
    ダウンロードしてきたADT 0.9(ADT-0.9_pre.zip)を選択、
    追加されたツリーアイテムを選択した状態で「Install」ボタンをクリックし、
    インストールを開始させる(その後の手順は、表示された指示に従う)。
  5. 「Window」 > 「Preferences」メニューをクリックし、
    表示された「Preferences」画面の「Android」をクリックし、
    「SDK Location」にAndroid 1.5 SDK(android-sdk-windows-1.5_pre)のパスを設定し、
    「Apply」「OK」ボタンをクリックし、画面を閉じる。
  6. 環境変数でSDKのパスを追加していた場合には、更新する。
    ※コマンドラインから新しいコマンド(例えば、android)などを実行できれば、OKです。

 

その他

  • ADT 0.9では、「New Android Project」ウィザードで、「Min SDK Version」を設定できるようになっています。
    ※Android 1.5は、Min SDK Version = 3
  • ADT 0.9からAVD(Android Virtual Device)として、複数のシステムイメージを選択して起動できるようになっています。
  • 利用可能なAVDを表示するには、コマンドラインから「android list targets」を実行します。
    ※表示された[1][2][3]などがtatget IDです。
  • AVDを使用するには、少なくとも1つ以上のAVDを作成する必要があり、
    AVDを作成するには、コマンドラインから「android create avd --name sdk1.5 --target 2」などを実行します。
    ※ここでの例では、--nameで、AVDの名前として「sdk1.5」、--tagetで、IDとして2を指定することでAndroid 1.5を選択しています。
    ※作成していない状態で、EclipseからAndroidプロジェクトを実行すると、
    「Failed to find an AVD compatible with target 'Android 1.5'. Launch aborted.」のようなエラーが表示されます。
    ※2009/4/29追記:Failed to ...の対処方法の詳細については、「[Android] Android Virtual Devices (AVDs) - adakoda」にも詳細記事があります
  • 任意のAVDを指定してエミュレーターを起動する場合、コマンドラインから「emulator @sdk1.5」などを実行します。
    @(アットマーク)の後に、作成したAVDの名前(ここでは、sdk1.5)を指定します。
    ※sdk1.5は、ここでのサンプルですので、作成された名前に適宜読み替えてください。
  • 作成したAVDを削除するには、コマンドラインから「android delete sdk avd sdk1.5」などを実行します。
    ※ここでは、sdk1.5という名前のavdを指定していますが、適宜読み替えてください。

 

  Android1.5

1.AnalogClock(アナログ時計)

Android.widgetパッケージに含まれるAnalogClockクラス。
Androidのソースコードでは、frameworks\base\core\java\android\widget\AnalogClock.java。

約240行のソースコードですが、基本となるアナログ時計を実装しています。
外観は、「アナログ時計(AnalogClock)を使用するには - 逆引きAndroid入門」からも参照できます。

時計の針は、リソースから取得したDrawableを、onDraw()で、Canvasを回転させて描画しています。
時計の更新は、1分毎に行われるのですが、このきっかけを作っているのは、
onAttachedToWindow()で、Intent.ACTION_TIME_TICKというIntentFilterをregisterReceiver()している処理です。

2.DigitalClock(デジタル時計)

同じくAndroid.widgetパッケージに含まれる、DigitalClockクラス。
Androidのソースコードでは、frameworks\base\core\java\android\widget\DigitalClock.java。

こちらも約140行と短いソースコードですが、基本となるデジタル時計を実装しています。
外観は、「デジタル時計(DigitalClock)を使用するには - 逆引きAndroid入門」からも参照できます。

時計の文字は、TextViewを使用しています。
時計の更新は、1秒毎に行われるのですが、このきっかけを作っているのは、
onAttachedToWindow()で、Handlerに対して1秒後にpostAtTime()している処理です。

3.AlarmClock(アラーム付きデジタル時計)

AndroidにプレインストールされているAlamClockアプリケーション。
Androidのソースコードでは、packages\apps\AlarmClock。

アラーム機能を実装しているため、同機能を実装する際に参考になります。

時計の更新は、上述したAnalogClockと同じ仕組みです。

4.GlobalTime

OpenGL ESを使用。
Androidのソースコードでは、development\samples\GlobalTime\src\com\android\globaltime。

時計の更新は、連続して行われるのですが、このきっかけを作っているのは、
GlobalTIme.javaのhandleMessage()で、sendEmptyMessage()している処理です。
※仕組みとしては、上述したDigitalClockと同じですが、さらに更新間隔が短いです。

  • Austria(オーストリア)
  • Germany(ドイツ)
  • United Kingdom(イギリス)
  • United States(アメリカ合衆国)

※2009年4月2日現在
※ただし、USとUK在住の開発者に限る(追記)

<<前のページへ 2526272829303132333435

Android 楽しいよ!

2010年11月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        

自作フリーソフトウェア