2014年10月30日木曜日

GenymotionのFailed to import OVAエラー

久しぶりにGenymotionを使おうとしたら起動しなくなってしまっていました。
原因は不明ですがGenymotionの更新かOS更新が原因だったのでは、と思ってます。

苦肉の策でGenymotion及びVirtualBoxをAppCleanerで削除して
再インストールしたところ今度は端末登録できなくなってしまいました。
エラー内容は

Failed to import OVA

これとかこれとか見たのですが解決せず。。。

ダメ元でGenymotion Shellを実行したらアプリの認証(ダイアログのやつ)を
してなくて、これが原因で端末追加できていませんでした。

Genymotionを更新したらGenymotion Shell起動は必須のよう。

2013年12月24日火曜日

Android開発環境をAdt Bundle からIntelliJ CE に変更しました。

エンジニアの知人からイケてるエンジニアはIntelliJを使うと聞き
試しがてらIntelliJ CE(無料版)を使ってみたところなかなか良い感触だったので
本格的に乗り換えをしました。

ちなみにAndroidStudioはまだプレビュー版ということなので手はつけていません。
IntelliJ最新版の13はAndroidStudioからAndroid周りの機能を逆輸入したものらしく
Android関連は無料版でも十分とのことです(真意不明)。

1周間ほど使った感触は

・eclipse互換はありがたい
 →eclipseで作成してたプロジェクトをすんなり読み込んでくれる

・ライブラリ参照で理解に手こずる
 →コード上では参照できてるのにビルドで見つかれないとなる。
 →IntelliJのモジュールの仕組みを理解する必要あり。

・レイアウトはxmlエディターのとなりにプレビューあるのは有難い。
 →eclipseでの切り替えは地味にローディングしてしまうので。

・プログラムはコード補完はeclipseより優れてます。
 →こっちが求めてる候補が最上位に出てくる気がしてます。
 →あと地味に余分な()を入れないのでBSする手間が省けます。

・ターミナルは付属してますがFinderでファイルをコピーしてもフルパスでクリップボードに登録されないので不便。
 →adb install {フルパス} ができない。
 →adbコマンドは簡単なもののみintelliJで叩いてinstallは本家ターミナルで叩いてます。

・DDMSは別途Tool起動
 →1つのTool内で簡潔したい人は不便でしょう。
 →intelliJで出来るのはlogcatくらいです。
  ただしアプリでのフィルターは自分で検索窓に打ち込む必要があります。

・デバッグは慣れが必要な気がします。
 →僕はF6, F8でずっとやってきたのでどうしても未だにF6してしまう。
 →あと、インスペクタはどれですか?

・apk書き出しは簡単
 →一度keystoreとパスワード×2を登録してしまえば次からはクリックのみで署名付きapkにしてくれます。たまにマスターPass訊かれるけどそれでも簡単になります。

・Draw9patchはintelliJ内で起動。
 →地味に便利だけどDDMSもやってほしかった。。。

・ソース管理
 →Git、SVNはデフォルトで使える。

・DB管理
 →有料版にはViewerがあるとか。

とりあえずこれくらい。他にもあった気しますが。。。


総じてメリットデメリットありますが、個人的にはメリットが上回ってます。
なのでとりあえずこれからも使っていきます。

2013年9月27日金曜日

Jenkins導入①

Androidのテストをある程度自動化したいためJenkinsを導入することにしました。

将来的にはサーバーを立ててメンバーで共用する予定ですが とりあえず練習がてら自端末に導入してみます。

オフィシャルサイトからパッケージがDLして楽々インストールしようと思ったのですが、Mac版がDLできなかったので先人たちの知恵を借りてターミナルからインストールすることに。

Homebrew導入
http://qiita.com/skinoshita/items/fd146ac223bab433b348

Jenkins導入
http://tech.hazi.jp/2012-08/13/

おおー動いてるー!!



これから設定に入ります。

2013年3月8日金曜日

HTC J(butterfly)のメニューバー(…)を消す

HTC Jの端末で2.X系のアプリを使ったときに画面下部に出る・・・の黒いバー。 自分でも邪魔だと思ってたんですが、カメラ系を開発したときにあいつのせいで プレビューサイズと誤差が現れます。 2.X系のアプリでも消す方法を探していたのですが マニフェストのターゲットSDKバージョンを14に変える。 プロパティのbuild targetは9のまま。 で解決しました。 僕も勘違いしてたのですが、↑のふたつの要素はまったく別ものだったんですね。 ターゲットSDKは14〜の端末で14のスタイルとか振る舞いをするってだけ。 なんて簡単!!

2013年2月8日金曜日

Androidで国番号の取得

仕事でSimの電話番号と国コード(よく見る+81とか)を取得する必要があって そこそこ悩んだのでメモ。

  TelephonyManager telephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
  String number = telephonyManager.getLine1Number();
  String iccid = telephonyManager.getSimSerialNumber();
  Log.d(getClass().getSimpleName(), "TelephoneNumber " + number);
  Log.d(getClass().getSimpleName(), "ICCID " + iccid);
  
  //R.string.tel_formatの中身は+%1$s %2$s-%3$s-%4$s
  String internationalTelephoneNumber = 
    getString(R.string.tel_format, 
      iccid.substring(2, 4), 
      number.substring(1, 3),
      number.substring(3, 7),
      number.substring(7, 11));
  Log.d(getClass().getSimpleName(), "InternationalTelephoneNumber " + internationalTelephoneNumber);
良い感じに取得できた。

2012年12月19日水曜日

Facebook graph Apiで写真URLつき投稿

Facebookへの写真URLつき投稿。
自分のFeedに流れるやつです。

 写真をクリックすると写真が貼ってある外部ページに飛びます。
 link要素を付与するとシェア扱い。
pictureを無効にすると普通のFeedに。 
この内容だと写真が外部にあるものになりますが、Facebook上のアルバムにUPするためには別途画像データをバイナリで渡す必要があります。

			Builder urlBuilder = new Builder();
			urlBuilder.scheme("https");
			urlBuilder.authority("graph.facebook.com");
			urlBuilder.path("/me/feed");
			urlBuilder.appendQueryParameter("format", "json");
			urlBuilder.appendQueryParameter("method", "POST");
			urlBuilder.appendQueryParameter("message", message);
			urlBuilder.appendQueryParameter("link", params.url);
			urlBuilder.appendQueryParameter("picture", imageUrl);
			urlBuilder.appendQueryParameter("access_token", facebookToken);
			String url = urlBuilder.toString();
			String contents = getContentsByGet(url);

getContentsByGet部分は省略しました。内容はHttpClientでPostしているだけです。

Android4.0でタッチフォーカス(マニュアルフォーカス)実装

Androidのカメラアプリでのオートフォーカス実装は何度もやったけど マニュアルフォーカス(MF)は未経験でした。
デフォルトカメラアプリには往々にしてMFがありますが マーケットアプリにはほとんどない現状。
カメラアプリを貪っていると唯一lgcameraが実装してました(他にもいっぱいあると思うんですが見つけられなかった。。。)

でも2.XシリーズだとMFが動かずICSだとMFが効く。
ということはネイティブでMFやるにはICSが必要ということか。
勉強不足を実感しました。。。

調べたところCAMERAクラスのsetFocusAreasを利用することでcamera#autofocusのfocusのエリアを変えられる模様。

touchイベントからとったview座標をプレビューの座標に変換。

座標をRectに変換。
weight(よく分からないけど1000で良い感じになった)と一緒にList<Camera.Area>型でCamera.ParametersのsetFocusAreasに渡してやればフォーカスエリアの変更完了。

Viewには何の変化もないけど、同じタイミングでautofocus(null)を呼んであげると
フォーカスエリアが変化していることが分かり易いはず。

ただし、端末のカメラが対応していないと落ちるので
Camera#getParameters().getMaxNumFocusAreas()>0
のときだけ使うようにしましょう。

ちなみに同じ方法で測光を行うsetMeteringAreasも使えます。