Mahiru Kamimori のすべての投稿

お話を書いたり、絵を描いたりしています。ノベルアプリ『KIRIKA~同じ人間がいる、もう一つの世界~』をAndroidとiPhoneで配信中です!

Androidプロジェクト作成手順

20110704_pro

プロジェクトを新規作成し、Androidプロジェクトを選択すると上記のような画面が出る。

[ 入力する項目 ]
Project Name :任意の名前(最初に大文字にする)

Build Target: 対応したいバージョンのものを選択。

Properties:
Application name:任意の名前(ここに入れた名前で最終的にapkファイルが作られる)
Package name:任意のパッケージ名
Create Activity:任意のActivity名をつける。Android的なメインクラスを生成する。
Min SDK vertion:Build Targetで指定した最も古いバージョンのAPI Levelに合わせる。
この場合はAndroid2.1が一番古いので、7とする。

Finishを押して確定すればプロジェクト作成は完了です。

2011.7.5
神森 真昼

【新着アプリ】刹那の極意、ついにリリース!

ついに、百マス計算に続く
第2弾のアプリをリリースしました!

その名も「刹那の極意」(Android Marketからダウンロードできます)
https://market.android.com/details?id=net.darkdrive.android.setsuna&feature=search_result

20110703_setsuna1

↓↓スマートフォンの方は下記のQRコードからダウンロードサイトにアクセスできます。

20110703_setsuna2

なんとなくなつかしい気分になった方は星のカービィスーパーデラックスにあった
「刹那の見斬り」を思い出したでしょうか。
私もあのゲームが好きだったので、ねこのキャラクターでアレンジして今回作ってみました。
無料ですので、ぜひなつかしい方は一度試してみてください^^

制作者ながら裏シナリオの最終ステージに到達できません(笑)
仕切りなおしが2回まで許容されているので、それを存分に使って勘を働かせなければクリアが難しいです。。
もしクリアできた方がいましたらぜひ教えてください^^

私もダウンロードして、頑張って銀河を目指してみるかな。。

2011.7.3
神森 真昼
NECO

追記(2011.7.5)
おかげ様で100ダウンロード突破いたしました、(^▽^)ノ
ダウンロードしてくださった皆様に心より御礼申し上げます。
次回作、作成中ですので今後もよろしくお願い致します。

【Androidアプリ作成】エミュレータの起動を高速化する方法

Androidの開発を行う際に、手元にデバイスが無い場合は
emulatorを使って開発していくことになります。
開発は、トライアンドエラーを繰り返しながら行うことが多いので、
emulatorの起動が遅いと開発の効率も落ちてしまいます。
そんな時はスナップショットから起動することでemulatorの起動を高速化を期待できます。
以下の手順になります。

(1)スナップショット用のデバイスイメージを作る
・スナップショットを有効化
AVDのsnapshotをenabledにチェックを入れておきます。
・AVDのSD Cardの設定を最小限に設定
スナップショットのイメージサイズを少なくでき起動時のディスクIOを減らせます。
作成するアプリによりますが、10MBあれば大丈夫です。
・emulatorアプリケーションの管理から削除
消せるものは消しておきましょう。

(2)スナップショットを作成する
telnetでemulatorへアクセスし、スナップショットを作成できます
> telnet localhost 5554
$ avd snapshot save test

(3)スナップショットを指定して起動する
$ANDROID_HOME\tools\emulator.exe -scale 0.5 -no-boot-anim -no-snapshot-save -no-cache -memory 64 -snapshot test

私の環境下では、上記手順により今まで3分ほど要していた
emulatorの起動が20秒程度にまで短縮されました。
ご参考まで。

[参考] Android Emulator | Android Developers
http://developer.android.com/intl/ja/guide/developing/tools/emulator.html

2011.06.26
NECO

Googleモバイル変換で表示させないようにするには

携帯電話向けのサイトを作る人向けの話です。

リンク元の飛び先指定によっては、
PC向けのサイトを指定していることがあります。

例えば、モバイル版ツイッター(twtr.jp)では外部リンクの飛び先として、
PC向けのページであるものとして、Googleのモバイルプロキシーを使用して
携帯電話向けのサイト変換を行ったりしています。
サイト管理者としては、モバイル向けのページを直接表示して欲しいと感じるかと思います。

その場合は、下のタグをジャンプ先のページのHTMLに記載します。

<link rel="alternate" media="handheld" href="モバイル用サイトのURL" />

PCのページをモバイル向けに変換させずに、モバイルのページにリダイレクト
させることができます。

例えば、PC向けのページのURIが
/contents/index.html

となっていて、
モバイル向けのURIが
/m/contents/index.html

の場合は、以下のようなタグを、PC向けページのheadタグ内に追記します。
<link rel="alternate" media="handheld" href="/m/contents/index.html" />

以上の記述だけで、Googleのモバイルプロキシーによるページ変換を

回避できます。

Google Mobile Proxy
http://www.google.co.jp/gwt/n

2011.6.22
NECO

【Androidアプリ作成】シミュレータ画面を横表示に切り替える方法

次回作は横表示のアプリなのですが、
縦表示だと首曲げないといけないし、めんどくさいなぁと思ってやってたら、
「Ctrlキー+F12で横になるよ」とNECOに言われてしまいました。。

そうだったのか、知らなかった!!
ってか、首痛める前に早く教えてくれ!!

すぐショートカットを忘れてしまうので、備忘録に記載。。
皆さんも忘れたらここみてね、リファレンスにもリンクしておきます。。

2011.6.21
神森 真昼

【Androidアプリ作成】logcatを使って効率良くデバッグをしよう

こんにちは、NECOです。

Android開発を行う際、
変数の中身を確認したいことが多々あります。

昨今のIDEならば、ステップ実行を行えば
比較的簡単に確認できたりしますが、
やはりデバッグの基本はログ出力かと思います。

Javaの場合、以下のようなコードで
確認するのが一般的かと思われます。

System.out.println("Cat#eat food=" + food);

ですが、Androidでは標準出力や標準エラーといったものが
存在しません。

じゃあどうすればいいんだー!ってことで登場するのが、
「logcat」です。

logcatとは、Androidにはログを集めて表示する機能で、
adbのシェルから表示したりフィルタリングするといったことが行えます。

ログを出力する場合は、以下のようになります。

Log.d("CatLife", "Cat#eat food=" + food);

またログを見る場合は、Eclipseプラグインならば
DDMSパースペクティブのLogCatビューから確認できます。
以下のように出力されます。

06-18 19:00:19.128 D 2664 CatLife Cat#eat food=カルボナーラ

コマンドラインでlogcatでログ表示する場合は
事前にadbサーバーを起動しておきます。Eclipseを使った場合は裏で自動で起動してます。

> adb start-server

adbが起動できたら、次はクライアントのシェルを起動します

> adb shell

adbのシェル上からlogcatを起動します。

$ logcat

以上で行えます。
一連の流れをまとめて実行する場合は、以下のコマンドで行えます。

> adb -s [デバイス識別子] logcat

デバイス識別子は、以下のコマンドで確認できます。

> adb devices

ログを出力して効率よくデバッグを進めましょう。

[参考] logcat | Android Developers

http://developer.android.com/intl/ja/guide/developing/tools/logcat.html

2011.6.19
NECO

【Androidアプリ作成】描画が遅い時はSurfaceViewを使って高速化

ゲームを作っていると、どうしても描画処理が重くなる傾向があります。

そんなときは、ViewをSurfaceViewに呼びかえることで、
描画高速化を期待できます。

以下のようにコードを追加するだけで導入できるので、
お試しください。

■今までのView
public class MyView extends View
{

public MyView(Context context, AttributeSet attrs)

{

this(context, attrs);

}

@Override

public void onDraw(Canvas canvas)

{

super.onDraw(canvas);

~~描画処理~~

}
}

■SurfaceViewに呼び代えたもの
public class MySurfaceView extends SurfaceView
{

public MyView(Context context, AttributeSet attrs)

{

this(context, attrs);

getHolder().addCallback(new SurfaceHolder.Callback() {

public void surfaceDestroyed(SurfaceHolder surfaceholder) {

// nop

}

public void surfaceCreated(SurfaceHolder surfaceholder) {

doDraw(surfaceholder);

}

public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) {

doDraw(surfaceholder);

}

});

}

private void doDraw(SurfaceHolder holder)

{

Canvas canvas = holder.lockCanvas();

if (canvas == null){ return; }

try

{

onDraw(canvas);

}

finally

{

if ( canvas != null )

{

holder.unlockCanvasAndPost(canvas);

canvas = null;

}

}

}

@Override

public void onDraw(Canvas canvas)

{

super.onDraw(canvas);

~~描画処理~~

}
}

オレンジの部分が、追加した処理です。

2011.6.18
NECO

【Androidアプリ作成】ボタンをもっと角丸にするには?

規定値でもそもそも角丸なのですが、もっと角丸にしたいもしくは角丸をなくしたい場合は
XMLで自分で定義して決めることができます。

このcornersを定義することで角丸を自分でカスタマイズできます。

<corners

android:bottomRightRadius="10dp"

android:bottomLeftRadius="10dp"

android:topLeftRadius="10dp"

android:topRightRadius="10dp"

/>

このcornersをどこに設定して、どうやって使えばいいかは
こちらの記事を参照してください。
こちらにも<corners>が設定されたタグがありますので、そのまま設定を変更して活用できます。
>> ボタンのカスタマイズ

2011.6.16
神森 真昼

【Androidアプリ分析】デベロッパーになると詳細なインストール状況がわかる!

「ねこニャンの百マス計算」リリースして、
晴れてマーケットデビューを果たしたデベロッパーになったわけですが、
デベロッパーになるとアプリごとの詳細な統計情報を参照することができます。

百マス計算は現在100人ぐらいの方がインストールして遊んでいただいているのですが、
その100人がどのプラットフォームで、どの端末で、どの国で、どの言語でプレイされているのかが分かります。

百マス計算はやはり、百マス計算という日本発祥で一番知名度が高いことから
日本人のユーザーが9割で、1割が海外ユーザーとなっています。
海外ユーザーが多い場合は英語もしっかりした文にした方がよいですね!
(私は翻訳ツール使っていますが、もっと上手くかけたらといつも思います:;)

その中でも私が一番気にしているのは端末です。
実機動作環境ではGALAXY Sを使用しているのですが、一番インストールで多い端末が
TOSHIBAのREGZA Phoneです。(ちなみにGALAXY Sは2位でした。)

もしこれがタブレットタイプで表示された場合、
解像度が高い画像を用意したりそれ向けのテストを強化する必要があるかなと考えていたわけですが、
ターゲットユーザーの端末がある程度は予想通りなのでよかったです。
(もちろん、タブレットもシミュレータで動作確認しているので問題ないと思います。)

さらに端末は同じ種類でも、型番別に表示されます。
例えばGALAXY Sなら Samsung Galaxy S
(SC-02B)とSamsung Galaxy S (GT-I9000)が
あるわけですが、前者はdocomoから発売されている端末で後者は海外から発売されている端末です。
日本で後者を使っている方はSIMフリーで購入されていることが多いと思います。

もっと分析して、ゲームを作成することでより多くの方に遊んでいただける
アプリを提供していけたら本望でございます('▽*)ノ
まずは2作目を作ります^^>

2作目もねこが登場するのですが、お勉強ゲームではなく反射ゲームです。
もっと多くの方が簡単に楽しくプレイすることができると思います。
現在鋭意作成中ですが、7月末リリース予定です♪

2011.6.14
神森 真昼

【Androidアプリ作成】InflateExceptionが出た場合の対処法

InflateExceptionが出た場合、
マルチスレッド下でLayoutInflater.inflateを行っていないか確認するといい。

独自クラスを含んだレイアウトをLayoutInflater.inflateで生成する場合、
GUIスレッド以外のスレッドでは動作しない模様。
呼び出すと、以下のような例外が出る。
android.view.InflateException: Binary XML file line #(行番号): Error inflating class <unknown>

ダメな例だが、以前は描画スレッドから以下のような処理をしていた。
呼び出しはGUIスレッド(onCreateやonDrawなど)から行う。

{

final int INTERVAL = 1000/20;

Timer timer = new Timer();

timer.schedule(

new TimerTask() {

@Override

public void run() {

// レイアウト生成

View vw = getLayoutInflater().inflate(R.layout.hogehoge, null);

setContentView(vw);

}

}, 0, INTERVAL

);

}

以下のように書き換えることで、
想定通りの処理が行われるようになった。

{

final int INTERVAL = 1000/20;

final int INFLATE = 1;

// 独自イベント定義

Handler timerHandler = new Handler() {

@Override

public void handleMessage(Message msg){

if ( msg.what == INFLATE )

{

// レイアウト生成

View vw = getLayoutInflater().inflate(R.layout.hogehoge, null);

setContentView(vw);

// 次回のメッセージを作る

long nextTime = Math.max(

msg.getWhen() + INTERVAL

, SystemClock.uptimeMillis());

msg = obtainMessage(INFLATE);

sendMessageAtTime(msg, nextTime);

return;

}

super.handleMessage(msg);

}

};

// 初回のメッセージを送る

Message msg = timerHandler.obtainMessage(INFLATE);

timerHandler.sendMessage(msg);

}

androidはシングルスレッドでGUI処理を行うため、
上記のようにHanderを介して処理する必要がある。
今回のように、レイアウトxmlの構文に問題が無く、上記のような例外が出る場合は
GUI処理に問題が無いか見直してみたほうがいいと思った。

2011.6.13

NECO