2013年11月16日土曜日

Android4.4KitKatでscreenrecordを使ってみる

歳を取った瞬間したことは AdventCalendarの更新でした。
Android 4.4 KitKat 冬コミ原稿リレーを開催」の11/16担当、mochicoです。
本記事ではAndroid4.4KitKatで追加されたadbの機能、screenrecordについてお話します。

超訳 Recording a device screen

http://developer.android.com/tools/help/adb.html#screenrecord

screenrecordはAndroid4.4(API level 19)以上で動作するディスプレイ録画のシェルコマンドです。
MPEG-4ファイルとして書き出され、プレゼンテーションの一部などに使用することができます。
別の端末等でわざわざ使用方法の動画を作ったりしなくてよくなるので、便利です。

AndroidのSDKにパスが通っていれば、KitKat端末をつないで

$ adb shell screenrecord /sdcard/ファイル名.mp4

で記録を開始します。--time-limitオプションをつけなければ

3分間待つ  or  Ctrl-C

で録画を終了します。端末に保存されます。
ギャラリーからも確認することができます。

PCにファイルを持ってきたい場合は

$ adb pull /sdcard/ファイル名.mp4

注意:
・端末によっては解像度の問題で記録ができない場合があります。解像度のオプションを変更してみてください・記録中の画面回転には対応していません。記録中に画面の回転が起こった場合、記録が中断されます
・音声は記録されません

オプション
--help 使い方を表示します
--size 画面サイズを指定します。デフォルトは端末のメインディスプレイの解像度です(サポート外の大きさの場合1280x720になります)。デバイスのAVCエンコーダーでサポートされているサイズを使用するのが一番良いです。
--bit-rate ビットレートを指定します。クオリティと容量がトレードオフになります。デフォルトで4Mbpsです。
sceenrecord --bit-rate 6000000 /sdcard/ファイル名.mp4
--time-limit 180秒以内で記録秒数の最大値を指定します。
--rotate 出力を90度回転させます。実験的な機能だそうです。
-- verbose Logをコマンドラインに表示します。これを指定しないと記録中特に何も表示されません。

超訳ここまで//

ちなみに、このscreenrecordはシステム権限が必要なためアプリからは使用できないようです。
また、バーチャルデバイスで記録を行うこともできません。

AndroidStudioでやってみる

AndroidStudio0.3.2からscreenrecordの機能が追加されていました。
こちらも(AndroidStudioさえ正常に動いていれば)超簡単なのでやってみましょう。


AndroidDDMSの左側ツールボタンに緑色のScreenRecordボタンを押します。


ビットレートと解像度を指定してStartRecordingをクリックします。


記録中のダイアログが出るので、任意のタイミングでStopRecordingをクリックします。

PC上の保存先を指定します。


記録が完了しました。
コマンドで行ったのと同様、mp4ファイルは端末上にも保存されています。

screenrecordの使いどころ
今まではPC上のバーチャルデバイスを録画するなどして作らなければならなかった動画を作る手間は大幅に省かれるでしょう。
root権限を取得したり、アプリを新しいアプリを入れる必要もありません。
解像度やビットレートも指定できるので、あとから動画を軽くする必要もありません。
GooglePlayに使いかたをあげたり、動きのプレビューを気軽に共有できるようになります。
issueに動画をつけるなんてのも簡単ですね!


screenrecordのコードは以下から確認できます。
http://tools.oesf.biz/android-4.4.0_r1.0/xref/frameworks/av/cmds/screenrecord/screenrecord.cpp

コレを使ってASMみたいにPCにミラーリングできないかなぁと眺めていますが、むずかしいですね。

明日は11/17 @sys1yagi さんの「Printing Framework後編」です。

2013年5月13日月曜日

GoogleAnalytics v2をAndroidアプリに導入する

ご存知GoogleAnalytics。

AndroidのSDKManageからも落とせるのですが、
こちらが2013.1.8にv2beta4にアップデートしたようです。

基本的にはv1とそう変わらないし、
OverViewからNextstep、自分の使いたい機能をDevGuideから見れば問題ないのだけど、
微妙な変更点についてとOverViewつまみぐい。

つかいかた
①libs下にlibGoogleAnalyticsV2.jarを配置

②AndroidManifest.xmlに以下のpermission追加

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

③analytics.xmlをvalues以下につくる
<?xml version="1.0" encoding="utf-8"?>

<resources>

 <string name="ga_trackingId">トラッキングID</string>

 <!-- Enable automatic activity tracking -->

 <bool name="ga_autoActivityTracking">true</bool>

 <!-- Enable automatic exception tracking -->

 <bool name="ga_reportUncaughtExceptions">true</bool>

</resources>
④トラッキングスタート
EasyTracker.getInstance().startActivity(context);
をonStartに
EasyTracker.getInstance().stopActivity(context);
をonStopに書く。

Activity以外で使いたい場合は
EasyTracker.getInstance().setContext(context);
あとはEasyTracker.getInstance().sendEventやsendViewでTraackerを利用できる。


v1からの大きな違いは、一番簡単な方法ではEasyTrackerというクラスを使うようになったことと、
analytics.xmlを作らなければいけなくなったこと。
setAppIdのメソッドは残っているけれど、意味がないようなのでanalytics.xmlでトラッキングコードを設定する。
また、Androidのライブラリからリアルタイム解析を使用する場合にはプロファイルをモバイルで作成しないと反映されないようです。

2013年2月25日月曜日

HttpGet/Postにパラメータを渡す

setParams仕事しろ。

HttpClient#getParams() とかHttpPost#setParams(HttpParams) とかあるから
パラメータそのまま渡せるような気がするじゃないですか。

できないんですよ。
(HttpProtocolのパラメータらしい。)

なのでPostは

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://url");
List parameters = new ArrayList();
parameters.add(new BasicNameValuePair("key", "value"));
post.setEntity(new UrlEncodedFormEntity(parameters, HTTP.UTF_8));
HttpResponse response = client.execute(post);

Getは


HttpClient client = new DefaultHttpClient();
List parameters = new ArrayList();
parameters.add(new BasicNameValuePair("key", "value"));

String query = URLEncodedUtils.format(parameters, "UTF-8");
HttpGet get = new HttpGet(url + "?" + query);

HttpResponse response = client.execute(get);

2013年1月7日月曜日

AntでAndroidアプリをビルドする

※Win環境です

①環境変数JAVA_HOME=C:/dir/Java

②antインストール。ダウンロードはこちら。こちらはbinにPath通す

③cmdからEclipseで作ったプロジェクトに移動し
 $ android update project -p ./

④署名付きのリリースapk作りたかったからant.propertiesをプロジェクトに作成。
 key.store=C:/dir/filename
 key.store.password=password
 key.alias=alias
 key.alias.password=password

⑤ $ ant release

リリースまで一直線にやってくれるバッチ
cd C:\workspace\Project
cmd /C ant release
cmd /C adb install -r C:\workspace\Project\bin\ActivityName-release.apk

ワークスペース内でプロジェクト参照をしている場合、
参照しているプロジェクトもandroid update projectする必要がある。
(subprojectオプションでできるっぽいけど不明。)
コマンドでリリースしたあとEclipseが警告してくることあるけどcleanで大体直る。

2013年1月2日水曜日

2012年備忘録と振返り

新年早々夜更かしして去年の振り返り。眠いです。mochicoです。
以下去年頭に立てた目標と振り返りです。

・人の前で話す。
 →結構頑張った。Android女子部でも二回LTさせてもらったし、
  社内プレゼンでも2回くらいLTさせてもらいました。
  ですが、毎回本番直前にスライドを上げて練習不足もあり超緊張するという
  繰り返し・・・。飛び込む度胸はついてきたと思うので、
  今年はこの辺りから勉強し直そうか。
  
エンジニアのためのPowerPoint再入門講座 伝えたいことが確実に届く“硬派な資料”の作り方エンジニアのためのPowerPoint再入門講座 伝えたいことが確実に届く“硬派な資料”の作り方
石川 智久 植田 昌司

翔泳社  2009-09-17
売り上げランキング : 177072

Amazonで詳しく見る by G-Tools

プログラミング能力の底上げ。
 →まだまだですね。プログラミングしながら年越したり、新年早々vvakame10jsに参加したり、
  PSVita本体買うより先にPSSDKいじったり電脳メガネで遊んだり。
  GTUG Girlsには2月のChromeExtensionと10月のWebIntensに参加しました。
  Android女子部のプログラミング系の勉強会ではiPhone勉強会とか。NFCLabとか。
  コンスタンスに勉強会で知識を仕入れては、それを仕事で生かす機会に恵まれたので(jsとかiPhoneは特に)
  Blogとかの形ではあまり昇華していないけどいいサイクルはできてたと思います。
  その一方で、勉強した分自分のプログラミング能力を見直さなければいけなくもなりました。

アプリ出す。
 →これが去年はできなかった。多摩屋は実質活動休止中。
  アプリを出すのに飽きた、という訳ではないです。(お仕事では何本も携わってますし。)
  自分の目的と志向が「アプリを出す」ということ自体から変化していきました。
  多摩屋ではまだ何かやりたいと思っているので、この辺踏まえて今年の活動は考えていきたいと
  思います。
  
一昨年が激動だったせいか、割と落ち着いた一年だったなーなんて思っていたけど、
こうして振り返ってみると案外いろいろやってみてたし、ある程度の結果は出して来れたかな、と。
ここに書き切れていないこともたくさんあって、楽しい一年だったなぁ。
ただ、これまでは目の前にあることにただぶつかって行くだけだったけれど、
今年はもう少し自分の進む方向を考えようかな、と思います。
例えば多摩屋、もっとおもしろいことしたいしね!