woshidan's blog

そんなことよりコードにダイブ。

Android

「DataBindingのコードを読む」のスライドが面白かったのでDataBindingについて少しまとめました

speakerdeck.com 上のスライドが面白かったため、DataBindingについてスライドを読んでわかったことや追加で調べたことをメモしました。 時間が足りず、書いて動かしたわけじゃないし雑なのですが、自分用のメモとしてはないよりましでしょう*1。 Androidア…

マーケティングオートメーションツールとアプリエンジニア ~プッシュ通知・お知らせダイアローグの運用自動化のためのお仕事~という題で発表しました

ふだんやっているお仕事の中から印象的だった事柄をオムニバス方式でお話しさせていただく体の発表をさせていただきました。 speakerdeck.com 技術的にはGradle入門とGCM, FCMを使うとプッシュが届くけど何が起こっているのか、みたいなお話がありますがお仕…

Media Streaming on Androidを見て面白かったので細々調べたメモ(動画のストリーミング配信プロトコル周り)

speakerdeck.com このメモはセッションで話された内容の書き起こしではなく、上記のスライドの内容が面白かったので自分で勝手に調べたメモです。 調べた結果とセッション中と用語のずれがある場合は、Abema TVのCode IQのプレス記事*1を優先させていただき…

adbのCLIでAndroidのエミュレータを起動したりアプリの起動、テストの実行をしたりする

この記事はAndroid Advent Calender その2の15日目の記事です。 今回は https://developer.android.com/studio/command-line/adb.html https://developer.android.com/studio/run/emulator-commandline.html https://developer.android.com/studio/test/comm…

Cocos2d-x 2.2.6をMac OS Sierraで動くようにするまでのメモ

仕事でやってて面白かったので許可を取って公開。 環境 Cocos2d-x 2.2.6 Eclipse Oxygen.1a Release (4.7.1a) Android NDK, Revision 10e Android SDK & tools v24.0.3 のもの一式 Android Studioとは別に用意 Eclipseの環境設定で下図のように設定 メモ プ…

インテントフラグとActivityStackのふるまいについていくらか

Android の Activity のスタックの振る舞いを設定するものとして、 AndroidManifest.xml に記述する activity 要素の launchMode 属性 Activity を立ち上げる時に使う Intent に付与するインテントフラグ があります。先日、launchModeの話をしたので、今日…

AndroidのCamera2 APIを触ってみた

ちょっと面白そうだったので調べました。 概要 https://developer.android.com/reference/android/hardware/camera2/package-summary.html からざっくり読み取った結果、Camera2 APIでカメラ経由で画像を取得したりする流れをかなり大雑把にいうと CameraMan…

Activityの起動とlaunchModeについて

ActivityのlaunchMode の違いが気になっていたので、公式で推奨されている standard, singleTop についてざっくり整理しました。 launchMode=“standard"、あるいは指定がない場合 Androidのシステムは常に、ターゲットタスク*1内で新しいActivityのインスタ…

Androidの通知チャンネルの振る舞いをプロジェクトのtargetSDKVersionを変えて少し試してみた

Android OのEaster Eggはoctopusでした*1が、OのコードネームはOreoでしたね。さて、Android Oではユーザーが通知をより便利に管理するために通知チャンネルが導入されました。 通知チャンネルがなんたるかや主要な扱い方については公式他に任せるとして、こ…

Android SDK Toolsのバージョンを25.2.xから25.3.xにあげたらcocos runコマンドが実行できなくなった

症状 Android SDK Toolsのバージョンをあげて cocos runコマンドを実行した際、以下のメッセージが出てビルドできなくなりました。 $ cocos run -p android --android-studio Building mode: debug Using Android Studio project : /Users/woshidan/path/to/…

API19, API21のAndroid端末で透過GIFを表示すると、透過色の部分が真っ黒になることがある

stackoverflow.com stackoverflow.com API19とAPI21のNexus 5のエミュで再現。API18以下、API23以上のエミュでは未確認。 透過色を決めておいて、その色の部分を後から透明にするという対応もありますが、他の画像形式を用いてもよいのではないでしょうか。 …

Android 4.0, 4.1の対応がまだ必要なので、adb shellを使ってAndroidのUIの手動確認自動化について調べてみた

AndroidのUITest(手動)と自称していた手動の確認作業を自動化したかったのですが、UITest用ツールないしフレームワークで現在有力な選択肢と思しきEspressoやAppiumはAPI18以降対応です。そのため、まだ4.0, 4.1系でのテストが外せない自分の仕事の環境では…

java.util.TimerをAndroidで使ってみた場合

以前気になったので素振りした時のメモ。AndroidのバージョンはAPI 21です。 まとめ Timer.schedule(TimerTask task, long delay, long interval)はdelay秒後から、前回のタスクと今回のタスクの実行開始時間の間隔がなるべくintervalになるように定期的にta…

コードでボタンのStateによって色を変えるようにする

前回の続き的なノリで、コードでボタンのStateによって色を変えるように指定するコードを書いてみます。 API21以上の場合 API21以上の場合は、以下のように記述できます。 Button button = (Button) findViewById(R.id.button_bg_code); // 角丸の設定 int r…

ShapeDrawableのRoundRectShapeとGradientDrawableをそれぞれ使って角丸ボタン作ってみた

ShapeDrawableのRoundRectShape、あるいは、GradientDrawableを使うとコードからフチの余白や色を指定できる形で角丸四角形の背景を持つボタンが作ることができます。 もともとShapeDrawableで書いていたのですが、こちらの記事でShapeDrawableのリソースをG…

AndroidのNDKやABIについてのメモ

はじめに C系の言語で動いているクロスプラットフォームのブリッジを作成するには、そのコンパイルなどの過程でNDKに関する知識があるとトラブルシューティングやテストケースの設計に役立つことがあります。 なので、ここではその概要をまとめておきます。…

emulator: ERROR: This AVD's configuration is missing a kernel file!

エミュレータネタ連発。上記エラーが発生した時に確認することを順にメモ。 エラーメッセージ全体 Cannot launch AVD in emulator. Output: emulator: ERROR: This AVD's configuration is missing a kernel file! Please ensure the file "kernal-qemu" is …

ERROR: resizing partition e2fsck failed with exit code 8

stackoverflow.com Androidのエミュレータの設定をいじっている最中、上図のエラーダイアローグを稀によく見かけていたような気がするのですがいままで原因がわからないうちになんか回避してしまっていたのでした。その原因と対応がなんとなくわかったのでメ…

後からコード上でBitmapを与える場合、ImageViewのadjustViewBounds=trueの指定が動かない

結論 onMeasureで一部人間にはよく分からない動きをしている気がします。 ImageViewのandroid:adjustViewBounds属性がtrueで、ImageViewの幅などを直接指定していない場合 ImageViewを許される限り拡大した場合の高さと幅を求める(widthSize/heightSize) 上…

AndroidのImageViewのscaleTypeについて(コード読んだメモ編)

前の記事の検証する前に、いまいち動作がはっきりしないところがあったのでコード読んでいたときのメモです。 力尽きたので雑なのですが。。 どこでscaleTypeの設定を適用しているかを調べるために、 https://github.com/android/platform_frameworks_base/b…

AndroidのImageViewのscaleTypeについて(検証結果スクショ編)

AndroidのImageViewのscaleTypeについて試したのでまとめました。 検証結果について 検証用画像 検証結果スクショ 次の記事であるコード読んだときのメモのところで軽く触れているのですが、各種ScaleTypeはサイズがぴったり合っていたら何もしません。その…

build.gradleでminifyEnabledをtrueにしてもActivityはminifyされない

まとめ Activityはgradleの設定でminifyをかけてもminifyされない minifyされているかの確認をしたかったらJavaだけのクラスを仕込んで見るのがお手軽 検証1 gradleでminifyの設定をした時、うまくいっていたらActivityのクラス名がaなどになっているだろう…

Support LibraryのNavigationViewでどこまでできるのか試してみる

久しぶりにサイドメニューのコードいじろうかと思ったのですが、デザインのカスタマイズ性の都合でサードパーティライブラリを使うのが辛く、ここから整理するよりSupport LibraryのNavigationViewを使って書き直した方が楽ではないか、と思ったので、どこま…

Spinnerのレイアウトをコードで変更する

スタイルを利用した指定がうまく動かなかったり見つけるまでにちょっと時間がかかったりしたので、まあ適当にメモ。 android:id="@android:id/text1"と@android:id/text1がidに指定されたTextViewだけのレイアウトリソースを用意 Spinnerの要素をセットする …

AndroidのWidgetで時計を作ってみる

Androidを立ち上げたらホーム画面にいくつか時計や天気予報などが表示されていると思うのですが、AppWidgetクラスを利用してそういったホーム画面に表示されるウィジェットを作成することができます。 今回は時計もどきを作成してみたのでそのときのメモです…

potatotips #29で「メモリリークに関するウワサの今昔」という題で発表しました

speakerdeck.com 現在上がっているバージョンは発表後、懇親会やブログ記事などで教えていただいたことを元に、まとめの部分のApplicationContextをActivityContextに訂正させていただいております。 ytrino.hatenablog.com Yukiの枝折: Android:引数はthis…

Activityの各ライフサイクルメソッドの役割について

Activityのライフサイクルメソッドをなんとなくしか理解していなかったので、 onCreate onStart onResume onPause onStop onDestroy の順番に呼ばれて、なんとなく、 onCreate、あるいはそこから呼び出すメソッドでレイアウトファイルに書いたViewの初期化を…

ライフサイクルコールバックのsuperについて、自分の実装の先に呼ぶか、後に呼ぶか

ライフサイクルコールバックのsuperについて、自分の実装の先に呼ぶか、後に呼ぶかというのが気になっていて、 java - What is the correct order of calling superclass methods in onPause, onStop and onDestroy methods? and Why? - Stack Overflow とい…

LayoutInfalter#inflateの引数について

RecyclerView.Adapter の onCreateViewHolder メソッドの中で、 @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_in_list, pare…

ToolbarのMenuItemを一度表示した後に切り替えたい

ToolbarのMenuItemを、その後のActivityの状況が変化するなりして切り替えたい*1といったことが稀に良くあります。 そう言う場合、ActivityにToolbarを置いている場合は下記のようなコードでとりあえず対応可能です。 // Activity内 private int mMenuResour…