AndroidとかiOSとかモバイル多め。その他技術的なことも書いていきます。

KotilnでTheoryとDataPointsを使ったJUnitのパラメータテストを書く

Kotlinに何も考えずにTheoryとDataPointsを使ったテストを書こうとするとデータがJUnitから参照できずエラーになる。 Kotlinにstaticはないのでcompanion objectを作って@JvmFieldをつけることでJUnitから参照できるようになる。 @RunWith(Theories::class) …

【Android】Activityを2重で開かないようにする

なにも考えずに実装を行うとActivityが2重で開いてしまうことがある。 例えばボタンを押して次のActivityが開くとき、そのActivityやIntentに設定をしていなければ、素早く連打することで2重に開くことができる。 修正方法 AndroidManifestでActivityのlaunc…

【Android】画像が押されたときの背景を簡単につける

ImageButtonを使えば簡単にできたので自分用にメモ。 <ImageButton android:id="@+id/ib_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/your_imgae" android:background="?android:selectableItemBackground" android:contentDescription="@string/your_image_desc" /> 参考 stacko…</imagebutton>

Jenkinsのビルドの説明を自動的に設定する

Jenkinsのビルドでパラメータをつけてビルドするときに何のパラメータでビルドしたかいちいち確認するのが面倒なので自動化した。 まずパラメータに必要なビルドオプション(build_option)とビルドの説明(description)を入力できるようにする。 そしてパイプ…

pycryptoのインストールがCentOS7.3 minimalで失敗する問題の対処

環境 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) 結論 gccとpython-develをyumで入れる 調査 デフォルトで入れようとすると以下ログでこける。Cコンパイラがないとのことなのでgccを入れる [root@localhost ~]# pip…

Android通知のバージョンごとのUIの違い

自分用にメモ。以下のコードを実行したときのAndroid OSバージョンごとのUIを調べた。 Intent intent = new Intent(context, MainActivity.class); PendingIntent pi = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); …

CircleCIでAndroid SDKとGradleをキャッシュする

CircleCIで普通にビルドしていると毎回Android SDKとGradleのダウンロードが行われてビルド時間が長くなってくる。CircleCIにはデフォルトのキャッシュ以外にも自分でキャッシュの設定ができるので、Android SDKとGradleをキャッシュすることでビルドを短く…

Python3でSlackのステータスを変える

最近Slackにステータスの機能が実装された。ミーティング中や帰宅済みなど名前の横を見ればステータスがわかるようになって非常に便利になった。 https://get.slack.help/hc/ja/articles/201864558-Slack-%E3%81%AE%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%…

【Android】jacocoでコードカバレッジを取る

最近UTを書くようになってきたのでカバレッジを取ってみました。Gradleにjacocoのプラグインがあるのでそれを使います。 build.gradleはDroidkaigi2017のbuild.gradleを参考にしました。 apply 'jacoco' apply plugin: 'com.android.application' android { …

【UI Automator 2.0】UiObject2#longClick()が効かない問題の対策

UI Automator 2.0を使ってListViewのContextMenuのテストを書きたかったのですが、UiObject2#longClick()ではどうもまくいきませんでした。 動きを見る感じロングクリックの時間が短いですね・・・ 調べるとUiDevice#swipe()でロングクリックしたい場所の座…

【Android】SQLiteのテーブルからカラムを削除する

ALTER TABLE mytable DROP COLOMN mycolomnを実行すれば完了・・・と思いきや、SQLiteはDROP COLOMNをサポートしていないらしい。 http://www.sqlite.org/faq.html#q11 そのため、以下の手順でカラムを削除した テーブルのデータを全て取得 DROP TABLEでテー…

JenkinsでSlaveを作ってビルドする

久々にデスクトップを買ったのでUbuntuを入れてビルドマシンとして設定してみる。 Slave(Ubuntu14.0.4) まずJenkinsをインストールする。 [bash] wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add - sudo sh -c ‘echo deb…

ErgoDox EZを買いました

最近流行ってることもあり買いました。 https://www.indiegogo.com/projects/ergodox-ez-an-incredible-mechanical-keyboard-computers-health#/ 以前使っていたキーボードはテンキー付きで横に広いものでした。そのためキーボードの横にあるマウスを使うた…

【Android】UI Automator 2.0でUIテストをする

UI AutomatorはGoogleが開発しているAndroid向け自動UIテストフレームワークです。 2015年3月にバージョンが2.0になりGradleに対応しました。 有名なテストフレームワークのAppiumも中ではUI Automatorを実行しています。 Espressoとの違い Googleはテストフ…

【Android】MaterialShowcaseViewライブラリでチュートリアルを実装する

MyCurationの1.2.1でチュートリアルを追加しました。というのもインストールされてもすぐアンインストールされているようで、説明が足りなかったかな・・・と思い始めたためです。 実装を自分でやってもよかったのですが、デザイン的なセンスがないのと、あ…

2週間毎日GitHubにコードを上げ続けて思ったこと

最近私にしては珍しく2週間毎日GitHubにコードを上げ続けています。 (2週間ごときで何を言ってるだと思う方もいらっしゃるとは思いますが・・・) なんとなくで始めたことですが、自分にとっては結構よかったです。 よかった点としては 定期的なアウトプット…

【Android】App Standbyがわからない

App StatndbyはAndroid 6.0になって追加された省電力の機能である。 Doze と App Standby 用に最適化する | Android Developers アプリが以下の場合でないとき、そのアプリは"Idle"状態になり、"Idle"状態が長時間続くとバックグラウンドでの通信を1日1回し…

【Android】 リモートリポジトリに繋がらない環境でJUnitを実行する

ネットワーク環境に問題がないときは、Googleのページのやり方で設定すればJUnitの環境設定は簡単だけど、Proxyなどでmaven centralに繋がらない場合の対処法 jarファイルのダウンロード リモートリポジトリに繋がらないので、jarファイルをlibsフォルダに置…

【Android】自分でキュレーションを作るフィードリーダー「MyCuration」を公開しました

MyCuration -キュレーションを作るフィードリーダー - Google Play の Android アプリ だらだらと自分用に作ってたアプリがある程度まとまったので公開しました。 Android4.0以上対応です。 背景 開発の背景としては以下のような背景がありました。 feedlyが…

【Android】PreferenceActivity/PreferenceFragmentを使った設定画面

Androidの設定画面について AndroidではAPI1から設定画面を生成してくれるPreferenceActivityが用意されている Android 3.0で各設定画面をFragmentに分けるためのPreferenceFragmentが追加された Android 4.0ではPreferenceActivityが拡張され、PreferenceFr…

【Rasberry Pi】カメラモジュールでmmal: No data received from sensorエラー

Rasberry Pi B+とカメラモジュールを買ってみたので使ってみたところエラーで買い直しになった・・・ Raspberry Pi Camera Board | Raspberry Pi Video Module Raspberry Pi Camera Board | Raspberry Pi 【通販RS】 $ raspistill -o test.jpg mmal: No data…

【Java】メインスレッドから別スレッドの停止

自分用メモ。 メインスレッドからの停止 Thread#interrupt()で行う。Thread#stop()メソッドは安全性を壊す可能性があり、非推奨 Thread#interrupt()自体はインタラプト状態を変更するだけ。 ただし、スレッドがThread#sleep(), Thread#wait(), Thread#join()…

Intel Stick PCを買いました

インテルから発売されたIntel Stick PCを買いました。 インテル® Compute Stick(CSTK-32W) | スティック型パソコン(インテル® Compute Stick) | IODATA アイ・オー・データ機器www.iodata.jp Intel Stick PCとは インテルから発売されたスティック型のPC…

DockerでAndroidの環境を構築する

Androidでテストを同時並行に実行したいなーと思っていたので作ってみた。 phicdy/Docker-android-envgithub.com Javaのインストール dockerfile/javagithub.com こちらからコードを拝借。ただ、add-aptがデフォルトではUbuntuに入っていないのでatp-getでイ…

adbで端末のモデル名を取得する

adb shell cat /system/build.prop | grep ro\.product\.model | awk -F"=" 'NR==1 {print $2}' | tr -d ' ' | awk -v RS='\r\n' '{print $1}' 詳細はこちらから adbコマンドあれこれ - shima111の日記d.hatena.ne.jp ほとんどの機種は上記記事のコマンドで…

Alfredからビルドする

最近、なるべくマウスから手を離したくないなーと思ってなんでもかんでもターミナルでコマンドなりシェルスクリプトでやろうとしている。 ビルドに関してもオプションを受け取れるようにして、シェルスクリプトで切り替えているのだけども、実行するには一回…

JenkinsのJUnitでNoClassDefFoundError

JUnitの結果のXMLファイルがなぜかNoClassDefFoundErrorで読めなかったが、解決したのでメモ。 環境 Ubuntu 12.04 Jenkins 1.581 JUnit plugin 1.5 エラーと原因 エラーは以下の通り。 Process leaked file descriptors. See http://wiki.jenkins-ci.org/dis…

mitmproxyで端末の通信内容を見る

mitmproxyとは mitmproxyはコンソール型の通信監視ツールである。 mitmproxyは、プロキシを通じて通信サーバと端末の間に入り、その通信内容を表示する。 mitmproxy - home 例えばモバイルのアプリケーションを開発している際に、端末から実際に行っている通…

【Android】API16のuiautomatorでNoSuchMethodError

uiautomatorでNoSuchMethodErrorが発生して困っていた問題が解決したのでメモ。 発生までの流れ http://www.atmarkit.co.jp/ait/articles/1410/07/news029.html に従ってテストプロジェクトを作り、ターゲットは、API16(4.1, 4.1.1)としていた。 そして(Andr…

【Android】ActionBarから検索して別Activityで結果を表示する

検索してもなぜか、同じActivityで受け取る例ばかり出てくるので、自分のメモ用に。検索を行うActivityをDoSearchActivity、検索結果を受け取るActivityをSearchResultActivityとする。 AndroidManifest 検索を行う側(DoSearchActivity)にandroid.app.defaul…