PhoneGapでサクッと。加速度センサーを使うサンプルを紹介します。

今回は、PhoneGapを利用してAndroid端末に搭載されている加速度センサーから端末の向きを取得するサンプルを紹介します。加速度センサーから取得できる値については、こちらで説明されていますので参考して下さい。

さて、シグニチャです。

今回は、一定間隔ごとにAndroid端末の向きを取得します。

navigator.accelerometer.watchAcceleration(accelerometerSuccess, accelerometerError,
[accelerometerOptions]);

参考:PhoneGap API Documentation

accelerometerOptions

frequency

加速度センサーからパラメータを取得する間隔を設定します。

設定値 ミリ秒単位で設定(デフォルトは10000)

accelerometerSuccess

取得した向き情報が引数として渡されますので、データの処理を記述します。

function(acceleration){
    // ここに処理を記述
}
acceleration
acceleration.x 端末を正面に見て横(x)軸の傾き。重力方向に対して水平にすることで0。-10~10
acceleration.y 端末を正面に見て縦(y)軸の傾き。重力方向に対して水平にすることで0。-10~10
acceleration.z 端末を正面に見て手前(z)軸の傾き。重力方向に対して水平にすることで0。-10~10
acceleration.timestamp 情報を取得した日時のミリ秒

cameraError

加速度センサーの情報が取得できなかった場合に実行されます。引数はありません。メッセージの表示や代替の処理を記述します。

function(){
    // ここに処理を記述
}

とりあえずサンプルソース

<!DOCTYPE HTML>
<html>
<head>
<title>PhoneGap Showcase</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="utf-8"/>
<link rel="stylesheet" href="jquery.mobile-1.0.min.css" type="text/css" media="all">
<link rel="stylesheet" href="jquery.mobile.structure-1.0.min.css" type="text/css" media="all">
<STYLE type="text/css">
<!--
-->
</STYLE>
</head>
<body>
    <div data-role="page">
        <div data-role="header">
            <h1>Accelerometer Showcase</h1>
        </div>
        <div data-role="content">
            <a id="accelerometer_watch" href="#" data-role="button">計測開始</a>
            <div style="width:100%;height:150px;text-align:center;">
                <div id="accelerometer_watch_word" style="line-height:150px;font-size:100px; "></div>
            </div>
            <div id="accelerometer_watch_status"></div>
            <a id="accelerometer_clear" href="#" data-role="button">計測終了</a>
        </div>
    </div>
</body>
<script type="text/javascript" charset="utf-8" src="jquery-1.7.1.min.js"></script>
<script type="text/javascript" charset="utf-8" src="jquery.mobile-1.0.min.js"></script>
<script type="text/javascript" charset="utf-8" src="phonegap-1.2.0.js"></script>
<script type="text/javascript">
$(function(){
    document.addEventListener("deviceready",
        function(){
            $('#accelerometer_watch').attr('href', 'javascript:watchStartAccelerometer()');
            $('#accelerometer_clear').attr('href', 'javascript:watchStopAccelerometer()');
        },        false);
})
/*
 * 加速度センサー計測開始
 */
var _accelerometer;
function watchStartAccelerometer(){
     _accelerometer = navigator.accelerometer.watchAcceleration(
        function(acceleration){
            // accelerometerSuccess
            $('#accelerometer_watch_status').html(
                      'x:' + acceleration.x + "<br>" +
                      'y:' + acceleration.y + "<br>" +
                      'z:' + acceleration.z + "<br>" +
                      '日付:' + new Date(acceleration.timestamp).toString());
           
            if(Math.abs(acceleration.x)>9){
                $('#accelerometer_watch_word').html("横")
            }else if(Math.abs(acceleration.y)>9){
                $('#accelerometer_watch_word').html("縦")
            }else if(Math.abs(acceleration.z)>9){
                $('#accelerometer_watch_word').html("水平")
            }else{
                 $('#accelerometer_watch_word').html("")
            }
        },
        function(){
            // accelerometerError
            alert('加速度センサーで内部エラーが発生しました');
        },
        {
            frequency : 1000,
        }
    );
}
/*
 * 加速度センサー計測終了
 */
function watchStopAccelerometer(){
     navigator.accelerometer.clearWatch(_accelerometer);
     $('#accelerometer_watch_status').html('');
     $('#accelerometer_watch_word').html('');
}
</script>
</html>

加速度センサーから情報を取得する

加速度センサーからは、端末の傾きと取得日時が取得できます。コンパスと同様に、取得日時があるので取得間隔の変化量で、端末がどの向きに動かされたか求めることもできます。以下のコードでは、引数として受け取った傾きと取得日時を画面に表示します。

/*
 * 加速度センサーから現在の傾きを取得開始
 */
     _accelerometer = navigator.accelerometer.watchAcceleration( // 取得処理を終了させるため、変数 _accelerometerに格納
        function(acceleration){
            // accelerometerSuccess
            $('#accelerometer_watch_status').html(
                      'x:' + acceleration.x + "<br>" +
                      'y:' + acceleration.y + "<br>" +
                      'z:' + acceleration.z + "<br>" +
                      '日付:' + new Date(acceleration.timestamp).toString());
           
            if(Math.abs(acceleration.x)>9){
                $('#accelerometer_watch_word').html("横")
            }else if(Math.abs(acceleration.y)>9){
                $('#accelerometer_watch_word').html("縦")
            }else if(Math.abs(acceleration.z)>9){
                $('#accelerometer_watch_word').html("水平")
            }else{
                 $('#accelerometer_watch_word').html("")
            }
        },
        function(){
            // accelerometerError
            alert('加速度センサーで内部エラーが発生しました');
        },
        {
            frequency : 1000,
        }
    );

端末を水平においた状態
https://lh5.googleusercontent.com/-NvV4CUuLq8Y/Tvhg4PpY-EI/AAAAAAAALCc/QASFTh9UlRo/s800/accelerometer_Horizontal.jpg


端末を縦にした状態
https://lh6.googleusercontent.com/-Ja8yLPQv99k/Tvhg4-AaO0I/AAAAAAAALCg/biD_H4zfoB8/s800/accelerometer_Longitudinal.jpg


端末を横にした状態
https://lh6.googleusercontent.com/-jUX5T34dj_Q/Tvhg5BTxviI/AAAAAAAALCk/Waw0JScaC-8/s800/accelerometer_Landscape.png.jpg

加速度センサーからの情報取得を終了する

情報取得開始時に格納した変数 _accelerometerを引数にして加速度センサーからの情報取得を終了します。終了時に、表示していた情報を消去しています。

     navigator.accelerometer.clearWatch(_accelerometer);
     $('#accelerometer_watch_status').html('');
     $('#accelerometer_watch_word').html('');

まとめ

コンパス同様、簡単に端末の傾きが取得することができます。しかし、加速度センサーの用途として、アクションゲームのコントロールに利用するシーンが考えられますが、シビアなレスポンスを求められる使い方には向かないようです。私が使用しているIS03で動作確認をしたところ、端末の状態が変化してから表示されるまでのタイムラグがありました。原因は、JavascriptからブリッジしてJavaを呼び出し、戻り値を取得するまでの処理コストと考えられます。こういう場合は、やはりネイティブでコーディングすることが必要だと思います。
PhoneGapを利用する場合でも、HTML+Javascript+CSSのみで構築することにこだわらず、ネイティブの利点を生かしながらハイブリットで構築することが大事ですね。

PhoneGapで簡単。Androidでコンパスセンサーを使うサンプルを紹介します。

今回は、PhoneGapを利用してAndroid端末に搭載されているコンパスセンサーから方位を取得するサンプルを紹介します。コンパスセンサーは、他のカメラやGPSセンサー、加速度センサーと比べて非常にシンプルです。取得できるパラメータは「方位」と「取得日時」のみですから(・∀・)

さて、シグニチャです。

navigator.compass.getCurrentHeading( compassSuccess, compassError, [ compassOptions ] );

参考:PhoneGap API Documentation

compassOptions

frequency

コンパスからパラメータを取得する間隔を設定します。

設定値 ミリ秒単位で設定(デフォルトは100)


Androidでサポートしているのは、frequencyのみとなります。

compassSuccess

取得した方位データが引数として渡されますので、データの処理を記述します。

function(compassHeading){
    // ここに処理を記述
}
compassHeading
compassHeading.magneticHeading 北を0度として、0~359
compassHeading.timestamp パラメータを取得した日時のミリ秒

cameraError

コンパスの情報が取得できなかった場合に実行されます。エラーコード(compassError.code)が引数として渡されますので、メッセージの表示や代替の処理を記述します。

function(compassError){
    // ここに処理を記述
}
compassError.code
CompassError.COMPASS_INTERNAL_ERR コンパスセンサーの内部的なエラーが発生した場合
CompassError.COMPASS_NOT_SUPPORTED コンパスセンサーがサポートされていない端末の場合

とりあえずサンプルソース

<!DOCTYPE HTML>
<html>
<head>
<title>PhoneGap Showcase</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="utf-8"/>
<link rel="stylesheet" href="jquery.mobile-1.0.min.css" type="text/css" media="all">
<link rel="stylesheet" href="jquery.mobile.structure-1.0.min.css" type="text/css" media="all">
<STYLE type="text/css">
<!--
-->
</STYLE>
</head>
<body>
    <div data-role="page">
        <div data-role="header">
            <h1>PhoneGap Showcase</h1>
        </div>
        <div data-role="page">
            <div data-role="header">
                <h1>Compass Showcase</h1>
            </div>
            <div data-role="content">
                <div id="compass_heading"></div>
                <div id="compass_timestamp"></div>
                <div style="width:100%;height:200px;text-align:center;">
                    <div id="kita" style="line-height:200px;font-size:30px; ">(*´ω`*)</div>
                </div>
            </div>
        </div>
    </div>
</body>
<script type="text/javascript" charset="utf-8" src="jquery-1.7.1.min.js"></script>
<script type="text/javascript" charset="utf-8" src="jquery.mobile-1.0.min.js"></script>
<script type="text/javascript" charset="utf-8" src="phonegap-1.2.0.js"></script>
<script type="text/javascript">
$(function(){
    document.addEventListener("deviceready",
        function(){
            watchStartCompass();
        },
        false);
})
/*
 * コンパスセンサーから現在の方位を取得
 */
function watchStartCompass(){
    navigator.compass.watchHeading(
        function(heading){
            // compassSuccess
            $('#compass_heading').html('方角:'+heading.magneticHeading);
            $('#compass_timestamp').html('日付:'+new Date(heading.timestamp).toString());
           
            if( (0<=heading.magneticHeading&&heading.magneticHeading<=10)
                      || (350<=heading.magneticHeading&&heading.magneticHeading<=360)){
                $('#kita').html('キタ━━━━(゚∀゚)━━━━!!');
            }else{
                 $('#kita').html('(*´ω`*)');
            }
        },
        function(compassError){
            // compassError
            if(CompassError.COMPASS_INTERNAL_ERR==compassError.code){
                 alert('コンパスで内部エラーが発生しました');
            }else if(CompassError.COMPASS_NOT_SUPPORTED){
                alert('コンパスがサポートされていません');
            }
        },
        {
            frequency : 100,
        }
    );
}
</script>
</html>

コンパスから情報を取得する

コンパスからは、方位と取得日時が取得できます。取得日時があるのでログを残して、あとから履歴を参照するような使い方もできます。以下のコードでは、引数として受け取った方位と取得日時を画面に表示します。
https://lh4.googleusercontent.com/-4nxpGWnY-pc/TvBqYtWBXvI/AAAAAAAALBY/EKepBaBJEgg/s800/compass.jpg

/*
 * コンパスセンサーから現在の方位を取得
 */
function watchStartCompass(){
    navigator.compass.watchHeading(
        function(heading){
            // compassSuccess
            $('#compass_heading').html('方角:'+heading.magneticHeading);
            $('#compass_timestamp').html('日付:'+new Date(heading.timestamp).toString());
           
            if( (0<=heading.magneticHeading&&heading.magneticHeading<=10)
                      || (350<=heading.magneticHeading&&heading.magneticHeading<=360)){
                $('#kita').html('キタ━━━━(゚∀゚)━━━━!!');
            }else{
                 $('#kita').html('(*´ω`*)');
            }
        },
        function(compassError){
            // compassError
            if(CompassError.COMPASS_INTERNAL_ERR==compassError.code){
                 alert('コンパスで内部エラーが発生しました');
            }else if(CompassError.COMPASS_NOT_SUPPORTED==compassError.code){
                alert('コンパスがサポートされていません');
            }
        },
        {
            frequency : 100,
        }
    );
}


ちなみに、北の方角を向くとこうなります。
https://lh6.googleusercontent.com/-WjJKUhAI2kc/TvBqZcgw6bI/AAAAAAAALBc/wB_UT1AMicw/s800/compass_north.jpg
キタ━━━━(゚∀゚)━━━━!!
これがやりたかっただけです。

まとめ

いかがだったでしょうか。取得できるパラメータは少ないですが、地図を利用したアプリの開発には欠かせないものです。数行で実装できますので、コンパスの利用を検討したときには、参考にしてください。

PhoneGapできる!! カメラから画像を取得するサンプルを紹介します。

今回は、PhoneGapを利用してカメラアプリを起動し画像を取得する、またはギャラリー等から画像を取得するサンプルを紹介します。

まずはシグニチャから

navigator.camera.getPicture( cameraSuccess, cameraError, [ cameraOptions ] );

参考:PhoneGap API Documentation

続きを読む

Webエンジニアは試してみる価値アリ!! PhoneGapの導入手順を紹介します。

PhoneGapとは

PhoneGapは、javascriptからAndorid端末に搭載されているデバイス(カメラやGPSセンサ、加速度センサなど)の操作を可能にするライブラリです。これによって、HTML+CSS+javascriptAndroidアプリを作成することができます。Webエンジニアは、馴染み深いjavascriptでコーディングできることで、習得が容易であることは採用する大きなインセンティブになるのではないでしょうか。
まず今回は、PhoneGapの導入手順を紹介します。

PhoneGapを導入します。

導入するPhoneGapのバージョンは、執筆時点最新の1.2.0を使います。

ダウンロード

http://phonegap.com/download-thankyouにアクセスすると5秒後に自動的にダウンロードが開始されます。ダウンロードしたファイルを解凍しましょう。

導入方法

まず、PhoneGapを導入するAndroid Projectを作成します。メニューから[File]-[New]-[Android Project]を選択するとダイアログが表示されるので、[ProjectName],[Build Target],[package]を入力して、[Finish]を押下します。
https://lh5.googleusercontent.com/-MjEtEZ2pQcA/TuiwcJQY9rI/AAAAAAAAK-0/HBFLOsTuHmY/s800/New%252520Android%252520Project.jpg

準備

次に、プロジェクトルートに以下のフォルダを追加します。

  • /libs
  • /assats/www

フォルダを追加するところからメニューを表示して、[New]-[Folder]を選択します。表示されたダイアログの[Folder name]に入力して[Finish]を押下します。
https://lh3.googleusercontent.com/-MTo1RykpVWY/TuiwdsusK6I/AAAAAAAAK-4/fiWgBG5QmmM/s800/Create%252520libs%252520Folder.jpg


追加するとこんな感じです。
https://lh5.googleusercontent.com/-4AVam53IQto/TuiweE_86JI/AAAAAAAAK-8/1UswWSzLKVQ/s800/Package%252520Explorer.jpg

PhoneGapのファイルを配置

さっき解凍したPhoneGapのファイルを配置します。配置先は下表のようになります。

phonegap-1.2.0.jar /libs
phonegap-1.2.0.js /assets/www
xml /res

追加するとこうなります。
https://lh3.googleusercontent.com/-wvUG80sUFqg/Tuiwe0WrPKI/AAAAAAAAK_A/uEpWFmZOiQY/s800/Add%252520PhoneGap%252520File.jpg

phonegap-1.2.0.jar をビルドパスに追加しておきましょう。

デフォルトのActivityファイルを編集

Activityファイルを編集します。

  • 継承しているActivityクラスを、DroidGapクラスに変更
  • 「setContentView(R.layout.main);」を、「super.loadUrl("file:///android_asset/www/index.html");」に変更

変更したら、メニューから[Source]-[Organize Imports]を選択してimport文を整理します。
https://lh5.googleusercontent.com/-V3OnpgvwlDU/TuiwfhIaCbI/AAAAAAAAK_E/iwIqDMn_YiU/s800/Modify%252520Activity%252520File.jpg

AndroidManifest.xml を編集

ます、mamifestタグの子要素として、以下の記述を追加します。

<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:resizeable="true"
android:anyDensity="true"
/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<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_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />


次に、activityタグに、以下の属性を追加します。

android:configChanges="orientation|keyboardHidden"


最後に、activityタグを追加します。

<activity 
     android:name="com.phonegap.DroidGap" 
     android:label="@string/app_name" 
     android:configChanges="orientation|keyboardHidden"> 
     <intent-filter> </intent-filter> 
</activity>


結果的には、以下のようになります。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="me.gungnir.android.phonegapshowcase"
      android:versionCode="1"
      android:versionName="1.0">
    <supports-screens
        android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="true"
        android:resizeable="true"
        android:anyDensity="true"
    />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <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_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />

    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".PhoneGapShowcaseActivity"
                  android:label="@string/app_name"
                  android:configChanges="orientation|keyboardHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.phonegap.DroidGap" 
                  android:label="@string/app_name" 
                  android:configChanges="orientation|keyboardHidden"> 
            <intent-filter> </intent-filter> 
        </activity>
    </application>
</manifest>
index.html を作る

Activityファイルを編集した際に記述した、「"file:///android_asset/www/index.html"」を作成します。
[www]フォルダからメニューを表示して、[New]-[File]を選択します。表示されたダイアログの[File name]に index.html と入力して[Finish]を押下します。ファイルの内容は、以下のソースを参考にして下さい。

<!DOCTYPE HTML>
<html>
<head>
<title>PhoneGap</title>
<script type="text/javascript" charset="utf-8" src="phonegap-1.2.0.js"></script>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>

起動して確認

プロジェクトルートからメニューを表示して、[Run As]-[1 Android Application]を選択します。
https://lh3.googleusercontent.com/-bpBtPjIBMxc/Tuiwgdxl4gI/AAAAAAAAK_I/WSUabo3YBTE/s800/Android%252520Application.jpg


このように表示されれば導入完了です。
https://lh6.googleusercontent.com/-kdPnIg_WMgc/TuiwhKRhyKI/AAAAAAAAK_M/Goqi5uFfQ1Y/s800/Hello%252520World.jpg

まとめ

次は、PhoneGapを利用して、カメラから画像を取得するサンプルを紹介します。

Androidアプリを迷わず公開!! Android Market にアップロード手順まとめ(後編)

さて、前回のAndroidアプリを迷わず公開!! Android Market にアップロード手順まとめ(前編) - DISってHONEY♪ @gungnir_odinに引き続き、前回作成したapkファイルをAndroid Market にアップロードする手順です。

Android Market にアプリケーションをアップロード

Androidマーケットデベロッパーサイトにログインします。画面右下の「アプリケーションをアップロード」リンクを押下します。
https://lh3.googleusercontent.com/-1sIB9HoxsBk/TuX0-AIF7WI/AAAAAAAAK94/Duzwq1W4NCQ/s800/%2525E3%252583%252587%2525E3%252583%252599%2525E3%252583%2525AD%2525E3%252583%252583%2525E3%252583%252591%2525E3%252583%2525BC%252520%2525E3%252582%2525B3%2525E3%252583%2525B3%2525E3%252582%2525BD%2525E3%252583%2525BC%2525E3%252583%2525AB.jpg

[新しいAPKのアップロード]が表示されたら、[ファイル選択]を押下して、前回作成したアップロードするapkファイルを選択します。選択したapkファイル名を確認して、[アップロード]を押下します。
https://lh3.googleusercontent.com/-b0v2QDA8TEE/TuX0-nHvmhI/AAAAAAAAK98/OeRvdG753dM/s800/%2525E3%252583%252587%2525E3%252583%252599%2525E3%252583%2525AD%2525E3%252583%252583%2525E3%252583%252591%2525E3%252583%2525BC%252520%2525E3%252582%2525B3%2525E3%252583%2525B3%2525E3%252582%2525BD%2525E3%252583%2525BC%2525E3%252583%2525AB-2.jpg

AndroidManifest.xml に指定したVersionName、VersionCodeが表示されていることを確認します。アプリケーションのアップデートの際には、特に、[VersionCode]が新しいVersionCodeであることを確認しましょう。

https://lh6.googleusercontent.com/-J1Xh9FJUxZ8/TuX1Dmbu9YI/AAAAAAAAK-c/mI3GOLG_VdM/s800/%2525E3%252583%252587%2525E3%252583%252599%2525E3%252583%2525AD%2525E3%252583%252583%2525E3%252583%252591%2525E3%252583%2525BC%252520%2525E3%252582%2525B3%2525E3%252583%2525B3%2525E3%252582%2525BD%2525E3%252583%2525BC%2525E3%252583%2525AB-%2525E8%2525A8%252580%2525E8%2525AA%25259E3.jpg

商品の詳細

「商品の詳細」を登録します。「スクリーンショット」「高解像度アプリケーション アイコン」「プロモーション画像」「宣伝用画像」については、すべて画像サイズが指定されていますので注意が必要です。また、「プロモーション動画」としてYouTubeの動画もリンクすることができます。


今回は、「スクリーンショット」と「高解像度アプリケーション アイコン」のみを登録します。


[ファイル選択]を押下して、アップロードする画像を選択します。画像を選択すると[ファイル選択]ボタンの右にファイル名が表示されます。表示されたファイル名を確認して[アップロード]を押下します。アップロードが完了すると画面にサムネイルが表示されます。
https://lh6.googleusercontent.com/-L8BZr2U926Q/TuX0_Mpc8YI/AAAAAAAAK-k/TGszG7SO0bs/s800/%2525E3%252583%252587%2525E3%252583%252599%2525E3%252583%2525AD%2525E3%252583%252583%2525E3%252583%252591%2525E3%252583%2525BC%252520%2525E3%252582%2525B3%2525E3%252583%2525B3%2525E3%252582%2525BD%2525E3%252583%2525BC%2525E3%252583%2525AB-4.jpg

掲載情報

次に「掲載情報」を登録します。
https://lh4.googleusercontent.com/-R4fUma0CGys/TuX0__2jh8I/AAAAAAAAK-E/dVICs2-EtVY/s800/%2525E3%252583%252587%2525E3%252583%252599%2525E3%252583%2525AD%2525E3%252583%252583%2525E3%252583%252591%2525E3%252583%2525BC%252520%2525E3%252582%2525B3%2525E3%252583%2525B3%2525E3%252582%2525BD%2525E3%252583%2525BC%2525E3%252583%2525AB-5.jpg


登録内容は、下表のようになります。

Title アプリケーションのタイトル
Description アプリケーションの説明文
Recent Changes 最近の変更点
Promo Text 広告文
アプリケーション タイプ アプリケーション/ゲーム から選択
カテゴリ アプリケーション タイプが、アプリケーションであれば ウィジェット/エンターテイメント/カスタマイズ など、ゲームであれば アーケード&アクション/ウィジェット/カジュアル などから選択


言語については、デフォルトで「English」となっています。変更する場合は [言語を追加] リンクを押下して [掲載言語を選択] を表示します。 [日本語(ja)]をチェックして[OK]を押下しましょう。
https://lh4.googleusercontent.com/-eWgSpD7KrQo/TuX1CUbFOPI/AAAAAAAAK-U/WinB_d6Ru2Y/s800/%2525E3%252583%252587%2525E3%252583%252599%2525E3%252583%2525AD%2525E3%252583%252583%2525E3%252583%252591%2525E3%252583%2525BC%252520%2525E3%252582%2525B3%2525E3%252583%2525B3%2525E3%252582%2525BD%2525E3%252583%2525BC%2525E3%252583%2525AB-%2525E8%2525A8%252580%2525E8%2525AA%25259E1.jpg


すると、言語の欄に「英語の掲載情報を削除」が表示されます。[x]を押下して削除します。
https://lh4.googleusercontent.com/-rclzVe5DcBc/TuX1C-ZTLWI/AAAAAAAAK-Y/uT_xHjvZmEo/s800/%2525E3%252583%252587%2525E3%252583%252599%2525E3%252583%2525AD%2525E3%252583%252583%2525E3%252583%252591%2525E3%252583%2525BC%252520%2525E3%252582%2525B3%2525E3%252583%2525B3%2525E3%252582%2525BD%2525E3%252583%2525BC%2525E3%252583%2525AB-%2525E8%2525A8%252580%2525E8%2525AA%25259E2.jpg


これで、[日本語(ja)]にアスタリスクがついて日本語がデフォルトになります。
https://lh6.googleusercontent.com/-J1Xh9FJUxZ8/TuX1Dmbu9YI/AAAAAAAAK-c/mI3GOLG_VdM/s800/%2525E3%252583%252587%2525E3%252583%252599%2525E3%252583%2525AD%2525E3%252583%252583%2525E3%252583%252591%2525E3%252583%2525BC%252520%2525E3%252582%2525B3%2525E3%252583%2525B3%2525E3%252582%2525BD%2525E3%252583%2525BC%2525E3%252583%2525AB-%2525E8%2525A8%252580%2525E8%2525AA%25259E3.jpg

公開設定のオプション

最後に「公開設定」を登録します。

https://lh6.googleusercontent.com/-ofk03gKzxcU/TuX1AfGH-dI/AAAAAAAAK-I/V6YcL6f24bI/s800/%2525E3%252583%252587%2525E3%252583%252599%2525E3%252583%2525AD%2525E3%252583%252583%2525E3%252583%252591%2525E3%252583%2525BC%252520%2525E3%252582%2525B3%2525E3%252583%2525B3%2525E3%252582%2525BD%2525E3%252583%2525BC%2525E3%252583%2525AB-6.jpg

コピー防止

オンにしておきます。後で変更することはできません。ただし、現在のコピー防止は完全ではないため、今後の「ライセンスサービス」を待ちましょう。

コンテンツのレーティング

アプリやゲームのコンテンツのレーティング - Play Console ヘルプ を参考に選択します。

価格設定

有料にする場合には、Google Checkout で設定する必要があります。

連絡先情報、同意事項

https://lh3.googleusercontent.com/-blHmzbQs1PE/TuX1A2ZepfI/AAAAAAAAK-o/ZWk3D3n0P5Y/s800/%2525E3%252583%252587%2525E3%252583%252599%2525E3%252583%2525AD%2525E3%252583%252583%2525E3%252583%252591%2525E3%252583%2525BC%252520%2525E3%252582%2525B3%2525E3%252583%2525B3%2525E3%252582%2525BD%2525E3%252583%2525BC%2525E3%252583%2525AB-7.jpg

連絡先情報 ウェブサイトかメールを入力すれば、他は省略可能です。電話番号の登録は控えた方が無難だと思います。
同意事項 両方ともチェックします。

いよいよ公開!!

画像にあるように、[有効にする]リンクを押下して、[公開]ボタンを押下しましょう。これで晴れてAndroidアプリの公開となりました!

https://lh4.googleusercontent.com/-04Vk9O5EC9A/TuX08l58ZWI/AAAAAAAAK9w/SAs2RKXA0nI/s800/%2525E3%252583%252587%2525E3%252583%252599%2525E3%252583%2525AD%2525E3%252583%252583%2525E3%252583%252591%2525E3%252583%2525BC%252520%2525E3%252582%2525B3%2525E3%252583%2525B3%2525E3%252582%2525BD%2525E3%252583%2525BC%2525E3%252583%2525AB-9.jpg

まとめ

4つの記事にわたりAndroid Marketへのデベロッパー登録から、Androidアプリの公開まで紹介しました。
微力ながら、これからAndroidアプリを公開したい人の手助けになればと思います。

Androidアプリを迷わず公開!! Android Market にアップロード手順まとめ(前編)


Android Marketにアプリケーションをアップロードする手順を紹介します。

準備するものは、以下の3点です。

  • 開発が完了しているアプリケーション
  • アプリケーションのスクリーンショット
  • 高解像度アプリケーション アイコン
スクリーンショット 高解像度アプリケーション アイコン
サイズ 320x480, 480x800, 480x854, 1280x720, 1280x800 512x512
画像形式 24ビットPNG, JPEG形式 32 ビット PNG または JPEG 形式

アプリケーションのスクリーンショットの撮り方は、Android開発者は必修! スクリーンショットの撮り方 - DISってHONEY♪ @gungnir_odinを参考にして下さい。

アプリケーションの準備

まず、アップロードするアプリケーションの準備をします。

マニュフェストファイルの編集

プロジェクトディレクトリの直下にある[AndroidManifest.xml]を開きます。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="me.gungnir.android.wareking" 
     android:versionCode="1"
     android:versionName="0.1">
     <uses-sdk android:minSdkVersion="8" />
     <supports-screens 
          android:largeScreens="true"
          android:normalScreens="true" 
          android:smallScreens="true"
          android:resizeable="true" 
          android:anyDensity="true" />

     <application android:icon="@drawable/icon" android:label="@string/app_name">


applicatoinタグの debuggable=true は、既に削除しています。

編集する場所は、「manifestタグ」の属性である「android:versionCode」と「android:versionName」です。

android:versionCode 整数値で指定します。この番号は、開発者がアプリケーションのアップデートする度に増やす必要があります。初めてのアップロードであれば「1」と入力しましょう。
android:versionName 文字列で指定します。この文字列は、利用者に提示するバージョン表記になります。バージョン表記については、「意外と知らないバージョン表記・数字の豆知識:安藤幸央のランダウン(51) - @IT」が参考になりますので、検討してみては如何でしょうか。
apkファイルをエクスポート

マニフェストファイルの準備ができたら、アップロードするapkファイルをエクスポートします。
Eclipseでエクスポートするプロジェクトからメニューを表示して、[Android Tools]-[Export Signed Application Package...]を選択します。

https://lh6.googleusercontent.com/-vUxyYS4vyWM/Ttd5gR1NCbI/AAAAAAAAK34/F5enTRhS3x4/s800/Eclipse.jpg


[Project]欄にエクスポートするプロジェクト名が表示されていることを確認して、[Next >]を押下します。プロジェクト名が目的のプロジェクト名ではない場合、[Browse]を押下してエクスポートするプロジェクトを選択します。

https://lh6.googleusercontent.com/-Ayqjhtq4Pvg/TuDZ21oWtMI/AAAAAAAAK68/hsfrZ82QtEY/s800/Export%252520Android%252520Application.jpg


次に、Keystore を作成します。Keystoreについては、別の機会に説明します。

https://lh4.googleusercontent.com/-FMRM9ZXgGHw/TuDZ1YFm40I/AAAAAAAAK60/PezmnmWB_IM/s800/Export%252520Android%252520Application-1.jpg

Location Keystoreの出力先を入力。または、[Browse]を押下して出力先を選択します。
Password パスワードの入力
Confirm 再度パスワードを入力

入力が完了したら、[Next >]を押下します。


https://lh3.googleusercontent.com/-owup7oeFeds/TuDZ2GGqs-I/AAAAAAAAK64/pG8LY2Yb7Jw/s800/Export%252520Android%252520Application-3.jpg

Alias 署名の別名
Password パスワード
Confirm 再度パスワードを入力
Validity(years) 鍵の有効期限 (25年が推奨されています)
First and Last Name 名前
Organizational Unit 部門名
Organization 組織名
City or Locality 市区町村名
State or Province 都道府県名
Country Code 国番号(日本は81)

入力が完了したら、[Next >]を押下します。


https://lh4.googleusercontent.com/-_uOT7_n35tI/Ttd5YjS2NII/AAAAAAAAK3A/iylaA6-SgIc/s800/Export%252520Android%252520Application-4.jpg

Destination APK file apkファイルの出力先を入力。または、[Browse]を押下して出力先を選択します。

入力が完了したら、[Finish]を押下します。
これで、apkファイルを出力することができました。次は、いよいよAndroid Marketにアップロードします。

Android開発者は必修! スクリーンショットの撮り方


AndroidアプリをAndroid Marketに登録する場合、登録するアプリのスクリーンショットが必ず必要になります。しかし、Android端末には標準機能としてスクリーンショットを撮る機能がありません。そこで、今回はDDMSを利用して簡単にスクリーンショットを撮る手順を紹介します。

スクリーンショットを保存する

まず、開発が完了したアプリをエミュレータで起動します。起動したらスクリーンショットを撮りたい画面までアプリを操作しを表示します。

https://lh4.googleusercontent.com/-ZW0nKbTszWc/TuIBygFniLI/AAAAAAAAK9k/gA1ZdstlaOI/s800/Android%252520Emulator.jpg


続いて、EclipseのDDMS perspectiveを表示します。
perspectiveを表示していない場合は、DDMS perspectiveを追加しましょう。
https://lh4.googleusercontent.com/-s2uEwZdXOJ0/TuHx9LmK2jI/AAAAAAAAK9I/oK8zwHJkxcA/s800/Eclipse%252520perspective.jpg


DDMS perspectiveのDevice viewにある、[Screen Capture]ボタンを押下すると表示されている画面のスクリーンショットを撮ることができます。
https://lh3.googleusercontent.com/-2icTVMALHFc/TuHzbpBLvoI/AAAAAAAAK9Q/OjkaK6dzf9M/s800/DDMS%252520-%252520Eclipse.jpg


目的のスクリーンショットが表示されたら、[Save]ボタンを押下して画像を保存します。画像形式はPNG形式になります。撮り直ししたい場合は、エミュレータ上のアプリを再度操作して画面を表示したあとに、[Refresh]ボタンを押下することでスクリーンショットが更新できます。その後、[Save]ボタンを押下して画像を保存してください。
https://lh6.googleusercontent.com/-O1F-au1lN5w/TuIBQcbyptI/AAAAAAAAK9Y/riDElsQUlfU/s800/Device%252520Screen%252520Capture.jpg

保存したスクリーンショットの画像サイズを変更する

Android Marketに登録するときには、下表の画像が必要となります。スクリーンショットは必ずしも下表のサイズにはならないため、画像サイズの変更が必要になります。

スクリーンショット 高解像度アプリケーション アイコン
サイズ 320x480, 480x800, 480x854, 1280x720, 1280x800 512x512
画像形式 24ビットPNG, JPEG形式 32 ビット PNG または JPEG 形式


そこで、便利なのが「縮小専用AIR」です。AIRアプリなのでMac,Windows問わず利用することができます。公式サイトからダウンロードしてください。


起動したら、画像サイズの[カスタム]を選択して縮小するサイズを入力します。あとは、スクリーンショットをドラッグ&ドロップするだけで縮小された画像がつくられます。

https://lh3.googleusercontent.com/-bpa4QBdyr1Y/TuIBQ6jN8-I/AAAAAAAAK9c/zX8bnEQ6JeQ/s800/%2525E7%2525B8%2525AE%2525E5%2525B0%25258F%2525E5%2525B0%252582%2525E7%252594%2525A8AIR.jpg

まとめ

アプリのスクリーンショットは、利用者にAndroid Marketでアプリを選んでもらったあと、すぐに目にするコンテンツです。利用者がインストールするか否かの判断をする重要なコンテンツになりますので、作成したアプリの魅力を最大限に伝えることができるものにしたいですね。