Google Analyticsで収集した結果を示します。

 21,315 ユニーク ユーザー数
 41,579 ページビュー数(起動回数)

私のアプリは、米国が殆どです。
モトローラが多そうです。

ソース

trk = String.format("/model/%s", Build.MODEL);
m_tracker.trackPageView(trk);	

結果

/model/Droid,3768
/model/PC36100,2711
/model/SHW-M110S,2560
/model/DROIDX,2481
/model/GT-I9000,1829
/model/X10i,1553
/model/HTC+Desire,1496
/model/ADR6300,1313
/model/SO-01B,1048
/model/DROID2,949
/model/HTC+Wildfire,870
/model/Ally,868
/model/SCH-I500,801
/model/Eris,778
/model/SHW-M130L,666
/model/SPH-D700,618
/model/HERO200,598
/model/SGH-T959,572
/model/Desire+HD,533
/model/SHW-M100S,509
/model/T-Mobile+myTouch+3G,492
/model/E10i,436
/model/LU2300,411
/model/SPH-M900,407
/model/SAMSUNG-SGH-I897,379
/model/X10a,374
/model/GT-P1000,364
/model/U20i,339
/model/SKY+IM-A630K,333
/model/SKY+IM-A650S,332
/model/XT720,317
/model/HTC+Glacier,312
/model/E15i,311
/model/PB99400,305
/model/SC-02B,296
/model/T-Mobile+G1,287
/model/IS01,285
/model/GT540,281
/model/LG-KU3700,281
/model/SHW-M130K,279
/model/HTC+Legend,271
/model/Nexus+One,262
/model/SPH-M910,260
/model/SHW-M180S,258
/model/LS670,255
/model/T-Mobile+G2,254
/model/M860,241
/model/IS03,236
/model/Milestone,215
/model/SKY+IM-A600S,215
/model/HTC+Liberty,211
/model/T-Mobile+myTouch+3G+Slide,203
/model/GT-I5503,191
/model/GT-I5800,176
/model/Zio,163
/model/GT-I5700,160
/model/LG-P509,159
/model/SCH-R880,146
/model/Dell+Streak,144
/model/HTC+Bee,144
/model/Devour,138
/model/GT-I5801,135
/model/MB525,130
/model/DROID2+GLOBAL,128
/model/HTC+Vision,124
/model/LG-LU3700,122
/model/SH-03C,122
/model/XT800W,116
/model/HTC+Magic,113
/model/IM-A690L,112
/model/MTC+Evo,110
/model/LG-P500,97
/model/E10a,94
/model/HTC+Hero,90
/model/Liquid,84
/model/GT-I5500,82
/model/Vortex,81
/model/A853,80
/model/HTC+Tattoo,76
/model/Milestone+XT720,70
/model/SU950,69
/model/Ideos,65
/model/LG+KH5200,64
/model/GT-I9000M,62
/model/A854,59
/model/Galaxy,49
/model/U20a,49
/model/HTC+Aria+A6380,48
/model/GT-I9000T,47
/model/SPH-M920,47
/model/EV-S110,46
/model/EV-S100,44
/model/KU9500,44
/model/Garminfone,43
/model/LG-SU370,39
/model/X06HT,39
/model/US740,36
/model/SC-01C,35
/model/Docomo+HT-03A,33
/model/U8100,33
/model/Behold+II,31
/model/Comet,31
/model/SK-S100,29
/model/CBW+Blaze,28
/model/GT-I9000B,28
/model/Garmin-Asus+A10,24
/model/MB200,24
/model/Vodafone+845,24
/model/FroyoEris,23
/model/SBM003SH,23
/model/U8110,23
/model/LG-MS690,21
/model/MotoA953,21
/model/Spice_Mi300,21
/model/XT701,21
/model/Boston,20
/model/CHT8000,19
/model/SCH-I400,19
/model/SH-10B,19
/model/ZTE-BLADE,19
/model/SAMSUNG-SGH-I896,18
/model/U8230,18
/model/001HT,17
/model/A101IT,17
/model/Garmin-Asus+A50,17
/model/Orange+San+Francisco,17
/model/Ideos+S7,16
/model/IM-A690S,16
/model/MB502,16
/model/MotoMB511,16
/model/GT-I5500L,15
/model/Pulse+Mini,15
/model/Stream,15
/model/HUAWEI-M860,13
/model/Archos5,12
/model/E400,12
/model/LG-C710h,12
/model/DROID+PRO,11
/model/GT-I5800L,11
/model/HTC+HD2,11
/model/MB511,11
/model/Acer+Liquid,10
/model/MB300,10
/model/Motorola-XT502,10
/model/T-01C,10
/model/FroShedYo.V6,9
/model/I7500,9
/model/Tactile+internet,9
/model/ZTE-RACER,9
/model/AS740,8
/model/E130,8
/model/U8500,8
/model/Android+for+Telechips+TCC8902+MID,7
/model/E120,7
/model/HTC+Dream,7
/model/MB508,7
/model/Micromax+A60,7
/model/Alcatel+OT-980,6
/model/LG-P500h,6
/model/Nexian+NX-A890,6
/model/SPH-P100,6
/model/MTC_Android,5
/model/XT702,5
/model/Alcatel+OT-981A,4
/model/CSL_Spice_MI700,4
/model/GT-P1000M,4
/model/harmony,4
/model/MTC_A,4
/model/SGH-I987,4
/model/V-T100,4
/model/WX445,4
/model/XT800,4
/model/zt180,4
/model/Abyzou+by+ikxdf,3
/model/COSMOS_IM8500,3
/model/DAMAGEDHERO200,3
/model/Era+G1,3
/model/GT-I5500M,3
/model/Htcclay's+SuperBad+G1,3
/model/i-mobile+IE+6010,3
/model/Legend,3
/model/MB520,3
/model/MID,3
/model/Nexus+S,3
/model/SCH-I800,3
/model/SGH-T849,3
/model/TOUCHSTONE_I858,3
/model/U8220,3
/model/u8800,3
/model/C8500,2
/model/cherry+mobile-SUPERION,2
/model/Chromatic+Dream,2
/model/CSL_Spice_MI300,2
/model/Ivy,2
/model/N1,2
/model/Orange_Boston,2
/model/SmartQ+V7,2
/model/TaiwanMobileT1,2
/model/V9,2
/model/WellcoM-A88,2
/model/ZTE-U+V880,2
/model/GT-I5500B,1
/model/GT-I5503T,1
/model/GT-I897,1
/model/HTC+bravo,1
/model/LG-US670,1
/model/Motorola+XT720,1
/model/MTC+916,1
/model/wildfire,1
/model/XT300,1

Androidアプリ生成Webサービスのpbookを簡単にしました。

画象をフォルダーなしのzipファイルにしてアップロードするだけで、写真集アプリが
ダウンロード出来ます。
サウンドファイルと再生は一時的にやめました。

http://mk18.lolipop.jp/pbook/

入力画面

実行結果のダウンロード画面

pbook

sakuraVPSを使用して、Androidアプリを生成するWebサービスを作りました。(pbook)

http://mk18.lolipop.jp/pbook/

写真の画象とサウンドファイルをzipにしてアップロードすると、apkファイルをダウンロードすることが出来ます。
サーバ上で、リソースファイルを埋めこんでビルドします。
アプリ名も指定でき、署名もしているのでマーケットへ登録することも可能です。

こんばんわ

もうすぐ、アプリリリースとなったのでアプリの操作履歴が取れるようにしてみました。
GoogleAnalyticsを使用して「/hoge/fuga」みたいな物を沢山埋め込みました。
普通のWebページと同じような感じでページの識別が出来それぞれのアクセス数が記録出来ます。

埋め込んだのは以下の物です。

アプリが実行された時に1回実行されるメソッド
アクティビティのonCreate()


Build.xxx の情報
実行した、機種やSDKのバージョンを記録


UUIDを生成してユーザの識別
e.putString(tag, uuid);を使って初回起動時にUUIDを保存します。


onCreate()のソース

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    	Log.v(TAG, "onCreate");

//途中省略

	//uuid
	String uuid;
	uuid = get_uuid(); //get
	if(uuid==null){
		Log.v(TAG, "uuid null");
		UUID id = UUID.randomUUID();
		uuid = id.toString();
		put_uuid(uuid);	//put
	}
		
	//Analytics
        m_tracker = GoogleAnalyticsTracker.getInstance();  
        m_tracker.start("UA-xxxxxx-1", 60, this); 

       	m_tracker.trackPageView("onCreate");
        m_tracker.trackPageView(m_app_name);
       	
       	String trk;
       	trk = String.format("/brand/%s", Build.BRAND);
       	m_tracker.trackPageView(trk);	

       	trk = String.format("/manufacture/%s", Build.MANUFACTURER);
       	m_tracker.trackPageView(trk);	
       	
       	trk = String.format("/model/%s", Build.MODEL);
       	m_tracker.trackPageView(trk);	

       	trk = String.format("/sdk_int/%s", Build.VERSION.SDK_INT);
       	m_tracker.trackPageView(trk);	
       	
       	trk = String.format("/uuid/%s", uuid);
       	m_tracker.trackPageView(trk);	


UUIDの保存と読み出し

    //put_uuid
    private void put_uuid(String uuid){
        Log.v(TAG, "put_uuid " + uuid ); 
    	SharedPreferences pref = getPreferences(MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE);
    	Editor e = pref.edit();
    	String tag = "uuid+m_app_name";
    	e.putString(tag, uuid);	//put
    	e.commit();
    }
    
    //get_uuid
    private String get_uuid(){
    SharedPreferences pref =getPreferences(MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE);
	String tag = "uuid+m_app_name";
    	String uuuid = pref.getString(tag, null);	//get
    	
        Log.v(TAG, "get_uuid " + uuuid ); 
    	return uuuid;
    }

こんな感じでユーザが操作したものの回数が記録出来ます。
機種名やSDKのバージョンは今後の開発の参考になりますし、
あまり操作していない機能はいらないということにもなります。


GoogleAnalyticsの情報

こんにちは

Android+IS01+ConnectBotについて

右Shiftキーでパイプの入力に対応しました。
これも変更箇所がわかってしまえば簡単でした。


ここで公開しています。
Androidアプリ公開用の記事 - mk18のプログラミング日記


単独で押すとTABに設定されていたところをパイプに変更しました。

TerminalKeyListener.java

実行の様子

これで
左SHift+数字で記号
絵・顔・記でCtrl
文字キーでEsc
左Shiftで|(パイプ)

が入力出来るようになりました。
ただしCtrlは同時押しでなく、Ctrl+Aを入力したい場合は、
「絵・顔・記」を押した後「A」を押して下さい。

当初のConnectBotではサーバ操作は不便でしたが、これで
便利になりました。

AndroidのレイアウトにLinearLayoutを使用して思うどおりに配置できたのでメモします。

画面の四隅に配置する

LinearLayoutを2階層にして実現しました。

linearLayout10をhorizontalにして子を3つ配置します
画像を左右に貼り付けるため真ん中にダミーのTextViewを入れて、layout_weight="1"として空白を埋めました。

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >


<LinearLayout
android:id="@+id/linearLayout10"
android:orientation="horizontal" 
android:layout_height="wrap_content" 
android:layout_weight="1" 
android:layout_width="fill_parent">
	<ImageView
	android:id="@+id/ImageView11"
	android:layout_width="wrap_content"
        android:layout_height="wrap_content"
	android:layout_weight="0"
	android:background="@drawable/icon"                  
        android:layout_gravity="top|left"/>
	
	<TextView 
	android:text="TextView12" 
	android:id="@+id/TextView12" 
	android:layout_width="wrap_content" 
	android:layout_height="wrap_content"
	android:layout_weight="1"
	android:layout_gravity="center|top"
	android:gravity="center"/>
	
	<ImageView
	android:id="@+id/ImageView13"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:layout_weight="0"
	android:background="@drawable/icon" 
	android:layout_gravity="top|right"/>
</LinearLayout>

<LinearLayout
android:id="@+id/LinearLayout20"
android:orientation="horizontal" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:layout_weight="1" 
android:layout_gravity="center_horizontal">
	<ImageView
	android:id="@+id/ImageView21"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:layout_weight="0"
	android:background="@drawable/icon" 
        android:layout_gravity="bottom|right"/>
	
	<TextView 
	android:text="TextView22" 
	android:id="@+id/TextView22" 
	android:layout_width="wrap_content" 
	android:layout_height="wrap_content"
	android:layout_weight="1" android:layout_gravity="bottom|center" 
        android:gravity="center"/>
	
	<ImageView
	android:id="@+id/ImageView23"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:layout_weight="0"
	android:background="@drawable/icon" 
        android:layout_gravity="bottom|left"/>
</LinearLayout>
 

</LinearLayout>

十字の端に配置

子が水平方向に1つだけの場合はorientation="vertical"で配置します。
bottom|center"に配置したいImageView62は下に貼り付けるため、ImageView61で
押し下げました。

main2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

<LinearLayout
android:id="@+id/LinearLayout40"
android:layout_width="fill_parent" android:orientation="vertical" android:layout_weight="1" android:layout_height="fill_parent">
	<ImageView
	android:id="@+id/ImageView41"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:layout_weight="0"
	android:background="@drawable/icon" 
        android:layout_gravity="top|center"/>
</LinearLayout>

<LinearLayout
android:id="@+id/LinearLayout50"
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_weight="1" 
android:layout_height="fill_parent">
	<ImageView
	android:id="@+id/ImageView51"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:layout_weight="0"
	android:background="@drawable/icon" 
        android:layout_gravity="left|center_vertical"/>
	
	<ImageView
	android:id="@+id/ImageView52"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:layout_weight="1"
	android:background="@drawable/icon" 
        android:layout_gravity="center" 
	/>
	
	<ImageView
	android:id="@+id/ImageView53"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:layout_weight="0"
	android:background="@drawable/icon" 
        android:layout_gravity="right|center_vertical"/>
</LinearLayout>

<LinearLayout
android:id="@+id/LinearLayout60"
android:layout_width="fill_parent" android:layout_weight="1" android:layout_height="fill_parent" android:orientation="vertical">
	<ImageView
	android:id="@+id/ImageView61"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:layout_weight="1"
	android:background="@drawable/icon" android:layout_gravity="top|center"/>
	
	<ImageView
	android:id="@+id/ImageView62"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:layout_weight="0"
	android:background="@drawable/icon" 
        android:layout_gravity="bottom|center"/>
</LinearLayout>
 
</LinearLayout>


リニアレイアウトは順番に配置するので左右に振るときや下に押し付けるときは
ダミーの子が必要かと思います。