Androidアプリ開発を長くやっていると、当然、とんでもない失敗をたくさんやらかします。 リリースの翌日大炎上。クラッシュ数グラフがうなぎ登り。低評価レビューの嵐。そこまで行かずとも、危うくとんでもないバグ付きアプリをリリースするところだったぜ、というヒヤリハット事例もたくさん。皆さんもそんな経…
どんな本なの? Android Studioの日本語化 Javaを説明しすぎない レイアウトエディターはデザインモードのみ 執筆の経緯 執筆の体制 CSS組版 リモートデスクトップ グランドスラム達成 まとめ 来る9月21日(金)に「たった1日で基本が身に付く! Androidアプリ開発超入門」という本が技術評論社さんから出ることになりました。電子書籍版もあります。 たった1日で基本が身に付く! Androidアプリ開発超入門 作者: 中川幸哉出版社/メーカー: 技術評論社発売日: 2018/09/21メディア: 単行本(ソフトカバー)この商品を含むブログを見る 人生初の商業向け単著です! しんどかった。世の中の単著erの皆さんすごい。 いろいろ思い出があるので、出版にあたってのあれこれを書いてみようと思います。 どんな本なの? プログラミング未経験者やAndroid未経験者の方が、本の内
Shibuya.apk #20 の資料とCyberAgent Developers Advent Calendar 2017の9日目です。 今日はAbemaTVで利用しているデバッグメニューの仕組みについて紹介したいと思います。 背景 アプリのデバッグやQAによるテスト中にはバグ修正などさまざまな作業があります。 よくあるのが、『めったに出ないレビューを訴求するダイアログをデバッグ中は毎回出したい』『デバッグ中にサーバー環境を切り替えたいという』などという一時的な変更があります。 そのために作業を中断し、ブランチを切り替え、編集して動作を確認し、ビルドし直してapkを渡して、作業に戻っているとあっという間に時間が過ぎてしまいます。 そういうタイミングでよくやる方法としてはデバッグメニューを実装して、 デバッグ時にデバッグメニューで動作を変更できるようにして、テストを楽にします。 例えばデバ
Daggerってありますよね。コンパイル時に依存性を解決するのでパフォーマンス的に有利なDIコンテナです。 https://google.github.io/dagger/ 依存関係の不備がコンパイル時にエラーになって発見できるのも、実行時にエラーが出たときの修正の難易度が高いAndroidアプリにはありがたいということで、Androidでよく使われてるようです。 基本的なオブジェクトの定義 I have a pen. public class Pen { @Override public String toString() { return "ペン"; } } I have an apple. public class Apple { @Override public String toString() { return "アッポー"; } } Ohh!!! Apple Pen!!! p
問題 まず、これから解決していく問題を先に述べます。 イベント(例えばOSの通知やBluetoothの状態)を受け取る部分がアプリ内に複数あり、各部分に関係がある時にのみその情報を受け取りたい場合を想像してみてください。 アプリの最初のクライアントが関心を持った時にのみイベントリスナーが登録され、誰も関心を持たなくなれば、すぐに登録を解除する必要がある。 新しいクライアントがイベントを購読する際、既存のクライアントに送信済みの前回のイベントを新しいクライアントがすぐに受け取れるようにして、全クライアントが常に同期するようにする。 今回の記事では、RxJavaの様々なコンポーネントを組み合わせることで、この問題を解決する道を探ろうと思います。本題に入る前に、 Subject や Replay 、そして Connectable Observables などのコンセプトを理解しておいてください。
RxAndroidとRetrolambdaで大体Java8をAndroidに持ち込む - visible trueから1年以上経過して界隈も色々更新されていってます。ということでイマドキのJava8環境構築をメモします。 バックポートライブラリとJava8の機能 バックポートライブラリとそのライブラリがカバーするJava8の機能を列挙します Retrolambda or Jack ラムダ式 メソッド参照 Lightweight-Stream-API Stream API Optional ThreeTenABP Date and Time API 実現不可の機能 次の機能はバックポートライブラリ等では実現不可能です*1。 interfaceのデフォルト実装 interfaceのstaticメソッド build.gradle 次の設定はRetrolambdaを使っています。そのまんまコピペで
多言語化 一般的なAndroidアプリで多言語化するとき,注意するのはstrings.xmlと日付の表示方法ぐらいだけど,通貨を扱うような場合には注意が必要. 1ドルが何円になる?っていう為替の話ではなくて, プログラム的に1という数字が通貨の何を表しているのか?という話. 通貨のフォーマット 通貨をLocaleに合わせて表示させるにはNumberFormatを使用する. 例えば1000という数字をLocaleに合わせて通貨表示させるには下記のようにする. public static void main(String[] args) { int value = 1234; printValue(value, Locale.JAPAN); printValue(value, Locale.US); printValue(value, Locale.UK); printValue(value,
追記: StreamやOptionalはpreview-2で実装されたようです。 gfx.hatenablog.com Android N previewが公開されましたね!このバージョンではJava8のサポートがあると発表されています。また、標準クラスライブラリがOpenJDKベースの実装になったことで、Java8との互換性が高まるのではないかという前評判もありました。 First Preview of Android N: Developer APIs & Tools | Android Developers Blog 本エントリでは、この「Android NでJava8」について解説します。 三行まとめ Android N runtimeはOpenJDK7ベースで、Java8クラスライブラリは一部のみ移植されている Android N SDKに同梱されているJackコンパイラはlam
Mathは本当に遅いのか 色の距離(色差)を計算するときにちょっとだけ試してみたので,実際によくある(小手先)高速化手法でMathが速くなるのか検証してみた. 検証方法 JavaとAndroidで検証. 単純に実行時間をSystem.nanoTimeで取得し,比較している. 検証順や検証タイミングで最適化がかかったりするので,何回か実行して落ち着いた値で比較している. Javaの検証はIntel Xeon E5 3.5GHzのMac Pro,Androidの検証はQualcomm Snapdragon 800 MSM8974 2.2GHzのSO-02Fで試している. 従来のMathクラスと,実装したDMathクラスで比較した. 10万回実行して1回あたりの実行時間をnano秒で表示している.詳しい方法は一番下を参照. べき乗の高速化 べき乗を計算するMath.pow()は小数のべき乗もサポ
public class Main { public static void main(String[] args) throws Throwable { int num = 100; double[] syncList = new double[num]; double[] atomicList = new double[num]; for (int i = 0; i < num; i++) { IntTest it = new IntTest(); double sync = test(()->it.testSync()); double atomic = test(()->it.testAtomic()); syncList[i] = sync; atomicList[i] = atomic; System.out.println(i+" "+sync+" "+atomic); }
なぜ今Javaの例外処理か Javaにおける「チェック例外」はSwift、Objective-C、Ruby、JavaScriptといったネイティブ・ウェブアプリ開発でよく用いられる他の言語には現れないものです。 SwiftにはOptionalやErrorTypeがありますが、Javaにおいてもnullやエラーのハンドリングの実装方法をうまくやる必要があります。 なぜ例外を握りつぶしたらいけないのか、なぜアサーションが望ましいのか、なぜチェック例外と非チェックを分けたのか、という点を考えてみたいと思います。 参考資料 例外設計における大罪 (契約プログラミングについて) Effective Java読書会9日目 - 例外 (Javaにおける例外の扱いについて) 契約による設計から見た例外 (この記事の方がより詳しいけど難しいイメージ) チェック例外と非チェック例外の違い チェック例外→「回復
たまたまChangeLogを読んだので、気になったポイントを紹介します。 Package名を変更した 3系になってcom.squareup.okhttpからokhttp3に変更されています。理由はJakeのブログに詳しく書かれていますが、要約すると、2系のコードと共存出来るようにすることで、部分的/段階的に3系のコードを取り入れることを可能にして、バージョンアップの負担を減らすことが目的のようです。 グローバルなconnection poolの仕組みがなくなった 2系は全てのOkHttpClientのインスタンスがグローバルなコネクションプールを共有していたらしいのですが(知らなかった... )、それがなくなりました。 そのため、3系では一つのOkHttpClientインスタンスをアプリケーション全体で使いまわすことが薦められています。 OkHttpClientが不変になった 2系のOkH
これは RxJava Advent Calendar 2015 の第22日目の記事です。昨日は kazy さんによる RxJava 2.xについて でした。 この記事では、 RxJava を理解するために自分が RxJava をどのように捉えているか、という話をします。なお、自分は ReactiveX や Reactive Functional Programming について詳しいわけではないので、その方面の理解の助けになるものではありません。どちらかといえば、RxJava という特定のライブラリをこう理解しておけば全体の挙動を把握しやすいのではないか、という生活の知恵のようなものになります。RxJS や他のライブラリではまた異なる実装かもしれませんのでご留意ください。 RxJava は非常に強力でよく考えられたものですが、ソースを見て挙動が直感的に分かるとは言えないライブラリです。本稿
去年Androidソースコードレビューで指摘する事が多い項目まとめという記事を書いた時はアプリ全体を一度に見るような機会が多かったため、内容も大きめのものばかり書いていましたが、最近はプルリクエスト単位でレビューする機会が増えたので細かい項目についてまとめてみようと思います。 ミリ秒で時間を指定する時に自前で計算している 1000L * 60L * 60L * 24Lのようなコード。 TimeUnitを使いましょう。 24時間の場合は以下のように書けます。 TimeUnit.DAYS.toMillis(1L) ある文字列がhttp/httpsで始まるかチェック URLUtil.isNetworkUrl()を使いましょう。 ただしequalsIgnoreCaseで判定してます。 ベースURLにパラメータを付与していってURLを生成したい StringBuilder#append("&key=
Java にはリフレクションがあり、当時は目新しかった。 人々がリフレクション API を使いこなしだすと遅さが目立ち始めた。ライブラリ開発者はリフレクションを実行時バイトコード生成で置き換えた。こうして Java のバイトコード編集ライブラリが発達した。 言語仕様にアノテーションが追加されたのも同じ頃。アノテーションと実行時バイトコード生成が Java フレームワークのデザインに与えた影響は大きく、モダンなサーバサイド Java は案外簡潔なコードを書けたりする。XML がアノテーションになっただけ、とは言わない約束。いちおう型をチェックできるし、冗長といわれる Java だって XML よりは簡潔だし。 Android Java は実行時に Java バイトコードを解釈できない。だから Java のコード生成資産が使えない。実行時にロードできる DEX にもデータを一旦ファイルに書かな
いろいろあって最近また設計について考えています。 AndroidでMVPを使用した設計は色々な人が紹介していますが、記事によって定義がそれぞれ異なっていたり、具体的にどうやってテストコードを書けばいいのかイメージ出来なかったりしてモヤモヤしていました。 以前自分で試したものもUIロジックへの厳密なテストを書くのを目的にしていましたが、実装が面倒過ぎて全然現実的ではありませんでした。 しかし、仕事で実際にMVPベースの汎用的な設計を考える必要があったため、今更ながらMVPをベースにどう実装すれば負担が大きくならずちゃんとテストが書ける設計になるのかを改めて色々試行錯誤しています。 その結果、それなりに実用的な設計になってきたんじゃないかなと思うので一旦進捗を共有します。 クラス構成 基本的には android10/Android-CleanArchitecture · GitHub を参考に
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く