このエントリーをはてなブックマークに追加

2010年1月31日日曜日

Update Dev Phone to Android 1.6

[In English]
I updated Android Dev phone which is gotten at "Google Developer Day 2009" from Android 1.5 to 1.6.

I'll write the some simple steps to do it, for detail steps please see HTC Web Site

  1. At First, set up the Android SDK to transfer some files to the device.(also need to set the path environment to use adb command)


  2. Download the fastboot from HTC Web Site.


  3. and also download "ota-radio-2_22_19_26I.zip" and "signed-google_ion-img-14721.zip" from HTC Web Site.


  4. Connect the Dev Phone to the PC, and then confirm it with adb command.


  5. C:\Users\Developer\Downloads>adb devices
    List of devices attached
    HT963LF00837 device


  6. Transfer the radio image file to the Dev Phone.


  7. C:\Users\Developer\Downloads>adb push ota-radio-2_22_19_26I.zip /sdcard/update.zip
    C:\Users\Developer\Downloads>adb shell sync


  8. Reboot the Dev Phone.While the Dev Phone is booting, Press the HOME key and the you can see the "!" icon.


  9. At the above view, Press the HOME and END key combination to display the recovery menue, and the select"apply sdcard:update.zip".


  10. After that the Dev phone will reboot, so while it is booting, press BACK key to display the FASTBOOT.


  11. Clear the cache


  12. C:\Users\Developer\Downloads>fastboot erase cache


  13. Flash the image


  14. C:\Users\Developer\Downloads>fastboot update signed-google_ion-img-14721.zip


  15. And then after rebooting, confirm the Firmware Version.("Settings" > "About Phone" > "Firmware version".



At the end, after updating the firmware I can not select Japanese locale
Now I'm continuing to search how to use Japanese locale on Android 1.6 Dev Phone.



[In Japanese]
"Google Developer Day 2009"で頂いたDev PhoneをAndroid 1.5からAndroid 1.6へアップデートしました。

詳細はHTCのサイトを参照するとよくわかると思いますが、簡単なステップだけでもご紹介します。

  1. 先ずは、端末に対してファイル転送などをする必要があるため、SDKをセットアップします。(adbコマンドを使うので環境変数PATHの指定もお忘れなく)


  2. HTCサイトより、アップデートのためのfastbootというツールをダウンロードします。


  3. 同じくHTCサイトより、ota-radio-2_22_19_26I.zipとsigned-google_ion-img-14721.zipをダウンロードします。


  4. Dev PhoneをUSB接続し、認識していることを確認します。


  5. C:\Users\Developer\Downloads>adb devices
    List of devices attached
    HT963LF00837 device


  6. Dev Phoneにradioイメージを転送します。


  7. C:\Users\Developer\Downloads>adb push ota-radio-2_22_19_26I.zip /sdcard/update.zip
    C:\Users\Developer\Downloads>adb shell sync


  8. Dev Phoneの電源を切り、再度起動します。
      起動の時に、HOMEボタン(家のマーク)を押し続けると、「!」アイコンのある画面が表示されます。


  9. 上記の画面で、HOMEボタンと終話ボタンを押し、メニューを表示させ、「apply sdcard:update.zip」をトラックボールを使い選択します。


  10. 再度再起動しますので、起動時に、今度はBACKキーを押し続けると、FASTBOOT画面になります。


  11. キャッシュをクリアします。


  12. C:\Users\Developer\Downloads>fastboot erase cache


  13. イメージを書き込みます。


  14. C:\Users\Developer\Downloads>fastboot update signed-google_ion-img-14721.zip


  15. 再起動されるので、起動後に「Settings」>「About Phone」>「Firmware version」を確認してください。「1.6」になっていれば、成功です。



最後になりましたが、アップデート前ではlocaleから日本語の選択が可能でしたが、アップデート後に日本語が選択できなくなりました!!
1.6で日本語使いたい場合には、どうすればよいのでだろうか。。もう少し調査して、日本語に対応しているアップデートイメージなど見つけられればと思っています。

2010年1月29日金曜日

Check The Status Of SD Card

[In English]
Today I wrote how to check the free space and status of SD Card on Android.

The following code is a simple way of checking if the free space is enough or not.

final double saveSize = (The file size);
File file = Environment.getExternalStorageDirectory();
StatFs statFs = new StatFs(file.getAbsolutePath());
final double freeSize = statFs.getFreeBlocks() * statFs.getBlockSize();
if (freeSize < saveSize) {
// There is not enough space in SD Card
} else {
// There is enough space in SD Card
}


If you want to make sure whether SD Card is inserted to the mobile device or not, you can use Environment class static method for it.

String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)){
// SD Card is mounted
} else {
// SD Card is not mounted
}

You can check the other status of SD Card as well as mount(insert) status,
so if you want to know it, please see the java doc.
for example, Read-Only(Environment.MEDIA_MOUNTED_READ_ONLY).



[In Japanese]
本日は、Android上でSDカードの空き容量やステータスの確認方法につて、ブログを書きました。

下記のコードは空き容量が十分であるかどうかを確認するための簡単な方法です。

final double saveSize = (ファイルサイズ);
File file = Environment.getExternalStorageDirectory();
StatFs statFs = new StatFs(file.getAbsolutePath());
final double freeSize = statFs.getFreeBlocks() * statFs.getBlockSize();
if (freeSize < saveSize) {
// 十分な空き容量なし
} else {
// 十分な空き容量があるため、ファイルを保存
}


また、その他にSDカードが端末に挿入さえているかどうかをチェックしたい場合は、Environmentクラスの
staticメソッドを使うことで確認できます。

String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)){
// SD Card is mounted
} else {
// SD Card is not mounted
}

マウント(挿入)されているかどうかのSDカードの状態確認以外にも色々と確認できますので、興味のある方は、Environmentクラスのjava docを参照してみてください。
例) 読み取り専用の場合:(Environment.MEDIA_MOUNTED_READ_ONLY)

2010年1月28日木曜日

introduced Hudson

[in English]
I introduced 'Hudson' which belongs to the genre of CI tool.
I found it that 'Hudson' is an extraordinary CI tool. There's three reasons.

1. EASY TO INTRODUCE. It's quite simple. The only thing I had to do is to deploy jar file on the servlet container. That's it.
In case of no servlet container, you need to install java and run hudson.jar( java -jar hudson.jar). That's all.

2. EASY TO USE. very simple to understand how to use.

3. HIGH FUNCTIONALITY. Hudson has many customizable functionality. You can set every configuration from the browser.





This time I introduced Hudson to deploy HTML files to my web server. Of course hudson can adapt to any kind of application; Web application, client-server-type application as well as static HTML.

I manage HTML files by SVN server and let hudson know where the SVN server is. So when I want to renew my web site, first commit HTML files to SVN server and second execute build on hudson from the browser. That's all. Don't you think it's easy, do you?

Why don't you think of introducing CI tool? It's gonna be very helpful.



[In Japanese]
HudsonというCIツールを導入してみました。CIツールの中ではかなりイケてるツールだと思います。理由は3つあります。

1.導入が簡単。導入の際に行う事は、jarファイルをサーブレットコンテナ上に配置するだけです。サーブレットコンテナがない環境でも、Javaをインストールしてhudsonを単体で起動するだけです。(java -jar hudson.jar)。

2.使いやすい。習得がとても簡単です。

3.高機能。設定項目がたくさん用意されていて、全てのjavascript:void(0)設定がブラウザ上から行えます。
今回はHTMLファイルをWebサーバに配置する目的でHudsonを導入しました。勿論、静的なHTMLファイルだけではなく、Webアプリケーションやクライアント-サーバ型のアプリケーションなど、何にでも使用できます。

私はHTMLファイルをSVNサーバで管理していて、HudsonにSVNサーバのURLを設定済みなので、ウェブサイトを更新したい時は、まず編集したHTMLファイルをSVNへコミットし、次にHudson上でビルドを実行するだけです。
簡単だと思いませんか?
興味があれば、CIツールを導入してみてはどうでしょうか。きっと役に立つと思います。

2010年1月22日金曜日

Sony Ericson Xperia X10 press conference




[in English]
Last Thursday, Sony Ericson and Docomo held the press conference for Xperia X10 in Japan. It consists of two parts. one is for mass media, the other is for Developers and Blogers. I joined it from second part. Some application Vendors exhibitted Android Application which will be released at the same time of Xperia X10 release.
Some of them are Location Based Service Applications and Cloud Applications, and some of them are movie and music applications for only high spec mobile phone like Xperia X10. I'll be watching some of them, and I'll report it later.


[In Japanese]
先週の木曜に、ソニーエリクソンとドコモがXperiaの端末発表会を開催しました。2部構成になっていて、1部はメディア向け、2部はブロガー及びデベロッパ向けでした。
私は、2部より参加したのですが、Xperiaの発売にあわせてリリースされるAndroid Applicationの展示がありました。位置情報やクラウド系のアプリのほか、Xperiaの高性能を活かした音楽と映像のアプリなどがありました。いくつかのアプリに注目して、正式リリース後にまたレポートしたいと思います。

2010年1月21日木曜日

Get HTC-Magic




[In English]
The other day I purchased HTC-Magic phone called HT-03A in Japan. As you know it's the only android phone in Japan for now.
In fact I've already owned Dev Phone. They are not exactly the same between HTC-Magic and Dev Phone from a functional point of view. That's why I wanted to get it.

Actually I found some differences between them in developing android application.
Now that I owned the both, I could develop better application and could find it easy to fix bugs.





[In Japanese]
先日、HTC-Magic携帯を購入しました。日本ではHTC-03Aと呼ばれており、現状では唯一のAndroid携帯です。
実は既にDev Phoneを所有していたのですが、ずっとHTC-03Aを欲しいと思っていました。というのも、両者は機能的に全く同じではないからです。実際、開発をしてる時に動作が異なる点をいくつか発見しました。

2台体制で、より品質のいいアプリが提供でき、かつバグ改修も簡単になるはずだと思ってます。

2010年1月16日土曜日

Android Frame-by-Frame animation

[in Englis]
Today I'll write the article about when I was in the trouble about Android Frame-by-Frame Animation using several png image files.

In the short, Frame-by-Frame animation is like a flipbook using picture files.

First, I tried to write animation codes referring to Android Developer Reference, but it didn't work.
so I looked into the cause of it, and then I studied that Frame-by-Frame animation must be started after onCreate/onResume is finished on Activity life cycle.
Translate or rotate animations can be started in onCreate/onResume, but Frame-by-Frame animation cannot be done.

How to start Frame-by-Frame animation is that starting it in onWindowFocusChanged.
(It is easy solution, so if I find the any other better solution I'll write blog about this)

I'll show the sample codes.

・main.xml

<framelayout id="@+id/FrameLayout01" android="http://schemas.android.com/apk/res/android" layout_width="wrap_content" layout_height="wrap_content">
<imageview id="@+id/ImageView01" layout_height="wrap_content" layout_width="wrap_content" layout_gravity="top" background="@anim/frame_anim">
</imageview>
</framelayout>


・frame_anim.xml

<animation-list id="animation_sample" android="http://schemas.android.com/apk/res/android" oneshot="false">
<item duration="100" drawable="@drawable/anim01">
<item duration="100" drawable="@drawable/anim02">
<item duration="100" drawable="@drawable/anim03">
<item duration="100" drawable="@drawable/anim04">
<item duration="100" drawable="@drawable/anim05">
</animation-list>


・AnimActivity.java

package com.sample.frameanim;

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.widget.ImageView;

public class AnimActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

@Override
public void onWindowFocusChanged(boolean hasFocus) {
ImageView imageView1 = (ImageView) findViewById(R.id.ImageView01);
    AnimationDrawable animation1 =
(AnimationDrawable)imageView1.getBackground();
    if (hasFocus) {
      animation1.start();
    } else {
      animation1.stop();
    }
  }
}





[in Japanese]
pngファイルを複数使って、AndroidのFrame-by-Frameアニメーションをするサンプルアプリの作成で、はまったことを書きたいと思います。


Frame-by-Frameアニメーションとは、一言で言うと画像ファイルのパラパラ漫画です。(同一サイズの)複数の画像ファイルを次々と変えることでアニメーションを実現します。

先ず、Android Developer Referenceを参照して作ったのですが、全くアニメーション動作が開始されませんでした。
色々調べたところ、Frame-by-Frameアニメーションは、Activityのライフサイクルの中で、onCreate/onResumeが完了した後に実施する必要があるようです。
手っ取り早く動作を見たくて、他のtranslateやrotateのアニメーション同様に、onCreateの中でアニメーションをスタートしたのが原因でした。

取り急ぎの解決方法として
onWindowFocusChangedメソッド内で実行することです。
(他にも方法があれば追記していきたいと思います。)

下記は、onWindowFocusChangedメソッドを使って、Frame-by-Frameアニメーションを実現させたコードです。

・main.xml

<framelayout id="@+id/FrameLayout01" android="http://schemas.android.com/apk/res/android" layout_width="wrap_content" layout_height="wrap_content">
<imageview id="@+id/ImageView01" layout_height="wrap_content" layout_width="wrap_content" layout_gravity="top" background="@anim/frame_anim">
</imageview>
</framelayout>


・frame_anim.xml

<animation-list id="animation_sample" android="http://schemas.android.com/apk/res/android" oneshot="false">
<item duration="100" drawable="@drawable/anim01">
<item duration="100" drawable="@drawable/anim02">
<item duration="100" drawable="@drawable/anim03">
<item duration="100" drawable="@drawable/anim04">
<item duration="100" drawable="@drawable/anim05">
</animation-list>


・AnimActivity.java

package com.sample.frameanim;

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.widget.ImageView;

public class AnimActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

@Override
public void onWindowFocusChanged(boolean hasFocus) {
ImageView imageView1 = (ImageView) findViewById(R.id.ImageView01);
    AnimationDrawable animation1 =
(AnimationDrawable)imageView1.getBackground();
    if (hasFocus) {
      animation1.start();
    } else {
      animation1.stop();
    }
  }
}