タグ

ブックマーク / yuki312.blogspot.com (60)

  • Maven Central Repositoryにライブラリを公開する

    公式手順はここで説明されています。 The Central Repository Documentation - Getting started 稿では必要な手順を端的に書いていきます。 1. Create your JIRA account & Issue Maven Central Repositoryにあなたのレポジトリを作成するには申請する必要があります。 申請はJIRAチケットで行われますので、下記からアカウントを作ります。 https://issues.sonatype.org/secure/Signup!default.jspa アカウントを作ったら下記リンクからリポジトリ作成のIssueを作ります。 https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134 フィールド 値 要約 プ

    Maven Central Repositoryにライブラリを公開する
  • NavHostFragmentをFragmentの入れ子にする時はsetPrimaryNavigationFragmentを指定する

    craf
    craf 2021/02/27
  • OkHttp Interceptor

    稿ではOkHttpのApplication InterceptorとNetwork Interceptorの役割について書きました. 内容はOkHttp公式wiki - Interceptorsと被っていますが, メモとして残します. Interceptor OkHttpでは処理に割り込めるポイントが2つあり, 必要に応じて使い分けます. アプリケーションとOkHttpとのコミュニケーションに割り込むInterceptorをApplicationInterceptor, OkHttpとネットワークとのコミュニケーションに割り込むInterceptorをNetworkInterceptorと呼びます. これらはOkHttpClient.Builderを経由して設定できます. OkHttpClient client = new OkHttpClient.Builder() .addInter

    OkHttp Interceptor
    craf
    craf 2019/12/11
  • Android: /data/data配下にadb push

    /data/data/<Application ID>/配下にADBでファイル追加しようとするとpermission errorで失敗した✍ issueはこれ. https://issuetracker.google.com/issues/37138359 Android Studioに付属してるFileExplorerを使えばファイルを追加できた. FileExplorerは次の手順を踏んでいた。 # ファイルを一時領域へコピー $ adb push hoge /data/local/tmp # アプリユーザに切り替え $ adb shell $ adb run-as <Application ID> # ファイルコピー $ cp /data/local/tmp/hoge /data/data/<ApplicationID>/hoge ## ↑でエラーが出た場合はcatリダイレクトする

    craf
    craf 2019/01/10
  • Yukiの枝折: 不変条件とか, Nullabilityとか, Kotlin化とか

  • Android: Exoplayer DownloadManager

    Exoplayer r2.8.4のダウンローダ機能関連APIのメモ. r2.6.0の頃はコンテンツをダウンロードするAPIだけが提供されていましたが, r2.8.0からはダウンロードタスクの管理やダウンロード処理の再開、サービスや通知といった部分までサポートされるようになっています. 関連記事:Android: ExoPlayer - Downloader DownloadManager DownloadManager マルチダウンロードストリームの管理とダウンロードリクエストの削除をするクラスです. このクラスのメソッドはメインスレッド上から呼び出す必要があり, 複数スレッドからの呼び出しは想定されていません. ダウンロードマネージャは内部ハンドラを持ちます. もしLooperを持たないスレッドからの呼び出しがあった場合, Looper.getMainLooper()によってメインスレッ

  • Android: ExoPlayer - Downloader

    ExoPlayer 2.6.0からDownloaderが追加されたので実装を追った際のメモ書き. Download ダウンローダの構築に必要な情報を持つビルドパラメータクラスDownloaderConstructorHelper ダウンローダのコンストラクタ引数に使われる. public SegmentDownloader(Uri manifestUri, DownloaderConstructorHelper constructorHelper) { ダウンロードメイン処理 // SegmentDownloader#download @Override public final synchronized void download(@Nullable ProgressListener listener) throws IOException, InterruptedException {

    craf
    craf 2017/12/22
  • Android: デフォルトで@NonNull扱いにする

    JSR 305’s @ParametersAreNonnullByDefault を使うと, @Nullable でアノテートされていないメソッド, 引数, フィールドが @NonNull アノテートされているように解釈され, @NonNull アノテートされているのと同じ振る舞いになります. プロジェクトによっては, @NonNull を明示することが煩わしく, @Nullable のみを定義することにして, それ以外は @NonNull 扱いとするルールを採用しているところもあるかと思います. ただ, これではIDEが提供するNull安全のインスペクションメッセージによる恩恵を受けることができず, 実装者が “@Nullableをつけ忘れていた” なんて悲劇を招く可能性もあります. “Tool, not Rules” ということで, デフォルトの振舞いを @NonNull にしたいとき

    craf
    craf 2017/11/08
    Androidでも使えるのか。
  • Android Performance. UI Rendering

    レイアウトXMLはどのようなプロセスを経てピクセル情報に変換され, 画面に描画されるのでしょうか? Androidのパフォーマンスを改善するには, UIレンダリングの仕組みを理解しておく必要があります. Android Performance. Dropped frameでは画面のアップデートが16ms毎に行われ, これが遅延するとユーザ体験を悪くしてしまうことについて触れました. アプリが60fpsを維持するためにはMainThreadでの処理を軽くし, 16msごとのリフレッシュレートを逃さないようにしなければなりません. 60fpsを維持できなくする理由はたくさんありますが, 今回はViewの更新とレンダリングパイプラインについて見ていきます. Layout & Draw レイアウトXMLがパースされるとレイアウトツリー(ビューヒエラルキー)が作成されます. 描画はルートノードから始

    Android Performance. UI Rendering
    craf
    craf 2017/10/16
  • Android Performance. Dropped frame

    SystemEvents, Input Events, Application, Service, Alarm, UI Drawingといった多くの処理はMain Thread(UI Thread) で実行されます. 重要なポイントは, 画面は16ミリ秒の間隔で再描画されているということです. Why 16ms, Why 60fps? 人間は繋がりのある複数枚の絵が十分な速さで連続していると, それがあたかもアニメーションしているかのように錯覚します. パラパラ漫画やアニメGifの原理です. アニメーションをスムーズに見せるために, どれだけ素早く画像を表示できるかという点が重要で, 滑らかで流れるようなアニメーションには必要不可欠な要素です. 人間の脳がアニメーションしているように感じるためには, 最低でも12fps程度の速度が必要です. これよりも遅いとパラパラ漫画のようなぎこちない見

    craf
    craf 2017/10/13
    なんでUIスレッドで重い処理をしてはいけないのかという話。
  • aapt:attr でリソースファイル数を節約する

    layer-list や selector など, リソースがまた別のリソースを参照する場合があります. <selector ...> <item android:drawable="@drawable/image01" /> <item android:drawable="@drawable/image02" /> image01 や image02 がベクタードロワブルの場合は, 新たに image01.xml, image02.xml と2つのドロワブルリソースを用意する必要があります. selector や layer-list の定義ファイル image01.xml image02.xml image01 や image02 が他リソースでも使われている共通化されたリソースであれば良いのですが, 他では使われず, ここでしか参照されない場合は1つのリソースファイルとしてまとめて定

    craf
    craf 2017/10/10
  • DevFest2017

    Android1.5~8.0 Walkthrough from Yuki Matsumura Android1.5~8.0 Walkthrough のセッションに登壇した際のスライドとスピーカーノートメモ、あと喋った内容の文字起こし. はじまり。 2017年8月に最新のOS Android8.0 コードネーム Oreoがリリースされました. アプリを Oreo に最適化するには TargetSdkVersion を 26 に上げる必要があります。 TargetSdkVersion を上げることで、Oreoの新機能を十分に活かすことができます。 ここ数年のアップデートでは システムリソースの消費を抑える DozeやAppStandby、バックグラウンド動作制限などがリリースされています。 これによって、ユーザは端末やアプリを使っていないときの バッテリー消費 を抑えることができます。 その一

    DevFest2017
    craf
    craf 2017/10/10
  • VisibleForTestingとRestrictTo

    昨日, メッセージの表示頻度を簡単に調整できるライブラリdenbunをリリースしました. 初めてのライブラリリリースなので色々と学びがありました. 稿ではVisibleForTestingとRestrictToアノテーションについて書き留めます. VisibleForTesting RestrictTo VisibleForTesting フィールドやメソッドのスコープはできるだけ狭くすることが大切ですが, テスタビリティを確保するためにやむなくスコープを広くとる場合があります. VisibleForTestingは, スコープをテスタビリティのために広く定義していることを明示します. 例えば, Denbunライブラリでは情報の永続化先であるSharedPreferenceとのI/Oをフックできるようにしてテスタビリティを確保しています. @VisibleForTesting(other

    craf
    craf 2017/07/25
  • Denbunライブラリでメッセージの表示頻度を調整する

    tl;dr メッセージの過度な表示はユーザを退屈させてしまう Android向けライブラリ “Denbun” をリリースした Toast, Dialogなどのメッセージ表示頻度を簡単に調整できるライブラリ はじめに モバイルプラットフォームでは, ユーザ向けに何かしらのメッセージを表示することがよくあります. それは, イベントの発生を知らせるものであったり, ユーザのアクションが完了したことを知らせるものであったり, エラーの発生を知らせるものであったりと様々です. これらのメッセージは重要なものですが, 中には退屈と思われてしまうものもあります. ユーザがアプリケーションの振る舞いを学習するのに重要なメッセージが, アプリケーションを使い慣れた後になっては, ただのお節介なメッセージになってしまうケース 毎回閉じるだけの”お知らせダイアログ”といった類のもの コンテンツの削除確認といっ

    Denbunライブラリでメッセージの表示頻度を調整する
    craf
    craf 2017/07/25
  • Intentの共有先一覧から自アプリを除外する

    craf
    craf 2017/07/21
  • Replace Dialog to BottomSheet

    従来はコンテンツを他アプリへ共有する際などにダイアログUIが使われていましたが, 昨今では, マテリアルデザインのModal bottom sheetsで説明されているように, ボトムシートUIにするのが一般的です. ボトムシートを実装するにはいくつか方法がありますが, 既存のダイアログをボトムシートに変更したいだけであれば, AppCompatDialogを継承したBottomSheetDialogFragment/BottomSheetDialogを使うだけで比較的容易に対応できます. // 継承元をDialogFragmentからBottomSheetDialogFragmentに変更 // public class MyDialogFragment extends DialogFragment public class MyDialogFragment extends Bottom

    Replace Dialog to BottomSheet
    craf
    craf 2017/07/11
  • DaggerのAndroid拡張を導入する(v2.11-rc1)

    Dagger 2.11-rc1 Dagger2.10でdagger.androidモジュールがリリースされました. 稿ではDagger2.10と2.11でリリースされたdagger.androidモジュールの使い方について簡単に紹介したいと思います. 題へ入る前に, Dagger2.11では当然, 歴代のバージョンで追加されてきた機能を土台にしています. Daggerを触ったことがない人は Android: Dagger2 を. Subcomponentを使ったことがない人はAndroid: Dagger2 - Subcomponent vs. dependenciesを. マルチバインディングを使ったことがない人はDagger2. MultibindingでComponentを綺麗に仕上げるを一度読んでから稿に戻ってくると理解しやすいと思います. また今回紹介するコードのリポジトリ

  • レイアウトのサイズ指定で足し算する

    craf
    craf 2017/04/26
  • モバイルアプリ開発エキスパート養成読本

    この度「モバイルアプリ開発エキスパート養成読」をご恵贈頂きました. ありがとうございます. ご恵贈頂いたことに加えて, このの執筆メンバーでもある@shihochanさん, @ogaclejapanさんからの頼みとあっては, 何も書かないというわけにはいきませんので, 拙文ではありますが色々と稿で書かせて頂きます. *このAndroidとiOSをカバーしていますが, 私はAndroiderなので稿ではAndroidに関する部分に絞っています. このではリアクティブプログラミング, ビルドバリアント, DI, ユニットテストや運用に役立つツールが紹介されており, 流行り廃りの早いライブラリの類ではなく, 息の長いアプリを開発する上で押さえておくべきポイントがほどよくまとまっています. 稿ではこので取り上げられている内容をいくつかピックアップし, このを執筆されていたであろ

    モバイルアプリ開発エキスパート養成読本
  • ConstraintLayout

    勘所 ConstraintLayoutは名前の通り, 制約によってレイアウトを組むものです. 今までのLinearLayoutやRelativeLayoutのようにViewの配置によるレイアウトから考え方を変えて, レイアウトを制約で定義することによってレスポンシブUIのような柔軟なUIや複雑なレイアウトをよりフラットなViewヒエラルキで実現できるようになり, パフォーマンスの向上が期待できます. ConstraintLayoutについては下記のDeveloperサイトにまとめられています. 導入方法まで含めた動画も公開されています. Build a Responsive UI with ConstraintLayout https://developer.android.com/training/constraint-layout/index.html Layout Editorの使い

    ConstraintLayout
    craf
    craf 2017/03/26