ログイン
When creating a new dynamic feature module using Android Studio, the IDE includes most of the manifest attributes that… 依存関係メインModuleが各Feature moduleに依存してるのではなく、各Feature moduleがメインModuleに依存している形になります。 Feature moduleの build.gradle には、次のように書くことになります。 dependencies { // メイン(app)moduleに依存 implementation project(':app') }なので、メインModuleからはFeature moduleのクラスを直接参照することが出来ません。 画面遷移依存関係が原因で、直接Feature moduleのAc
Activity、Fragment、Viewにコンストラクタインジェクションする Created at Fri, Nov 16, 2018 Daggerライブラリを使い、Androidフレームワークが提供するActivityなどのクラスにコンストラクタインジェクションしたい、 そんな夢をみたAndroidエンジニアは数多くいると思います。 この記事ではそんな夢を叶える方法を紹介します。 サンプルコードはここにあります。 FragmentFactory Fragmentに依存関係を注入する時、普通にやると以下のコードになると思います。 class MainFragment : Fragment() { @Inject lateinit var userHandler: UserHandler ... }
きっかけ Dagger2はAndroid Developersの Guide to App Architecture でも紹介されており そろそろAndroidエンジニアでDagger2やDIがわからないのはまずそうな気がしてきたので、調べてみました。 よく分からないところは対応する【補足メモ】を読んでみてください。ソースコードを載せているので、イメージしやすいかもしれません。 最近アップデートがあったAndroidとの関連(dagger.android)までは今回は触れることができていません。 Dagger初心者の自分が驚いたところを太字にしておきます。 ほぼ以下のドキュメントの意訳です。間違っているところはご指摘下さい。 User's Guide https://google.github.io/dagger/users-guide.html User's Guide Dagger2概
はじめに 2017年に入ってDagger2もバージョン2.9を迎えました. Androidでも使われることが多いDIフレームワークも, バージョンを重ねるごとに便利なAPIが増えています. 本稿はAndroidアプリを例に, Activityに依存するComponentからインジェクションする方法について, 過去のAPIを使用した方法と, 新しいAPIを使用した方法とで比較を行い, より綺麗なインジェクションを実現していきます. 今回紹介する内容+αとソースコードはGitHubにもアップしていますのでそちらもあわせてご覧ください :) Subcomponent. 親と子の密結合問題 Androidでは, コンポーネントをアクティビティの単位で分割することがよくあります(e.g. MainActivityComponent, SettingActivityComponent, etc.) そ
このpostについて Dagger2には @Singleton を始めとした "scope" というものがあります 下記に1つでも該当する人 (= この前までの自分) は読んでもらえると良いかもです - Dagger2はActivity lifecycleを克服するために有用な手段だと思ってる - @Singleton は、いわゆる getInstance() を用いたstaticなシングルトンを実現するためのアノテーションだと思ってる - Daggerのscopeは、インスタンスのlifecycleをよしなにゴニョゴニョしてくれるmagicであると思ってる Scopeって何なんだろう 例を交えて考えてみます MyViewModel というクラスのinstanceをinjectionするケースを考えます "injectする度にinstanceを生成したくない & 一度作ったものを使いまわし
この記事では Dagger 2.10 RC4 を使っています。 短い概要 Dagger 2.10 で Android のための拡張モジュールが公開されました 拡張モジュールを使うとコンポーネントの取り回しがシンプルになります BaseActivity や BaseFragment を使わずに済みます シンプルにはなりますが、準備の手間はかなり増えます とりあえず動作するところまで試したため、ベストプラクティスかは不明です はじめに Dagger は Square が開発した DI ライブラリですが、 Dagger 2 は Google がフォークしたバージョンです。公式に Dagger は Deprecated になっており、 Dagger 2 への移行ガイドが Google から公開されています。 DroidKaigi カンファレンスアプリでも Dagger 2 は使われており、セッショ
Re.Ra.Ku アドベントカレンダー 4日目です。 こんにちは、安部です。Androidアプリを担当しています。初投稿です。 今回はおそらくAndoidアプリ開発者は常に頭を悩ませる問題である、設計の話です。私もずっと試行錯誤を繰り返し、現在進行系で悩んでる問題でもあります。少し見えてきた部分があるので現在の状況を共有したいと思います。 抱えてる問題 Androidアプリ開発していくうえで、よくぶつかる壁です。 ライフサイクル Androidのライフサイクルは複雑でViewの状態をどのように管理すればよいのか難しいです。今はActivityだけではなくFragmentもあるので、更に複雑にしていると思います。 また、画面の回転などの対応を考えたりすると更に大変です。 非同期処理 通信は非同期にしなければいけません。そのためUI側もそれを意識しなければいけなくなり、Viewの状態管理も複雑
去年、DroidKaigi2016の公式アプリをオープンソースで作りましたが、2017もコードを公開しました。 github.com コードだけではわかりにくいところを少し補足しておきます。 2016とは別アプリ 2016とはリポジトリもパッケージも違います。別アプリです。 なぜ去年のリポジトリを引き継がなかったかというと、個人のリポジトリではなくDroidKaigiのリポジトリとして管理したかったというのが1つ。もう1つは、同じアプリをメンテナンスしてると飽きちゃうし、またゼロから作りたかったからです。 余談ですが、カンファレンスアプリに必要な機能はほぼ決まっているので、モデルや画面をガチガチに固めて設定ファイルとリソースを用意するだけで作れるライブラリに切り出してもいいかもなと考えています。 Kotlin メインはKotlinではなくJavaで作っています。コトラーが「Kotlin一択
Androidその2 Advent Calendar 2016 - Qiita 2日目の記事です。 Dagger2は最初のハードルが高くてなかなか導入できなかったり、メリットがよく分からなかったりします。そういう方が雰囲気だけでも掴めれるように、簡単なサンプルを実装しながら確認できるようなのを書きました。 だいぶ長くなってしまった感じですが、あまり複雑なことはやっていないつもりです。 セットアップ build.gradle に依存関係を追加します compile 'com.google.dagger:dagger:2.7' annotationProcessor 'com.google.dagger:dagger-compiler:2.7' Hello Dagger2 すごくシンプルなサンプルです。 依存解決されるクラス まずは依存解決されるクラスを作ります。Dogクラスとします。 pub
@eaglesakura です。 結論から言うと、DIは怖くないぞ。 DI(Dependency Injection, 依存注入)は昨今のプロダクト開発では当たり前のように使われています。 DIそのものに関しての解説は参考URLを読んでください。 参考 http://qiita.com/hshimo/items/1136087e1c6e5c5b0d9f 私自身は今年になって担当案件の開発規模が大きくなり、それに従ってUnitTestや依存関係が増えてきたことで、スマートな依存解決を求めて「どんなもんだろうな」と調べるようになりました。 遅いですか? 遅いですね。 AndroidのDIライブラリ 一般的なAndroid界隈の開発では Square/Dagger やそれをForkした Google/Dagger2 が有名です。 なぜDagger系ライブラリを使わなかったのか コードの追いづらさ
Dagger2を組み込む方法と要素を段階的に説明します。 Dagger1との比較も少し触れます。 Step1 gradle設定 build.gradle でbuildscriptにapt(Annotation Processing Tool)のgradle pluginのclasspathを追加します。 これは、Dagger2がソースを生成する仕組みなので必要になります。 buildscript { repositories { jcenter() + mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:1.3.0' + classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' } } apply plugin: 'com.androi
Eureka EngineeringLearn about Eureka’s engineering efforts, product developments and more.
先日、JackでDagger2が使えないという記事を書きましたが、なんとJackでもDagger2が使えるようになりました! Dagger2だけじゃなくannotation processingが使えるようになりましたので、他のツールも動くようになりました。 なぜ動くようになったかというとGoogle I/O 2016にてAndroid Studio 2.2 preview 2の発表と合わせてJackで可能になったという発表がありました。 そこで早速試してみました。 Jack+APTを実行できるようにする techium.hatenablog.com こちらの記事のサンプルコードを利用して行いましょう。 今まではaptを実行しようとした場合にはandroid-aptというライブラリを導入しないとできませんでしたが、Android Studio 2.2 preview 2とgradle:2.
はじめに Dagger2(google/dagger)でComponentの関連性を指定する@Subcomponentとdependenciesについてまとめる. Dagger2では依存オブジェクト群を”Component”と呼ばれる単位で管理する. このComponentには他Componentと従属関係を築く方法と, 他Componentと使用関係を築く方法の2種類が用意されている. さらにDagger2では”Scope”の概念も加わり, このあたりの仕様理解を難しくしている. Subcomponentやdependenciesを使わなくてもDagger2はDI Frameworkとして十分役に立つ. ただ, Subcomponentとdependenciesの理解はDagger2の依存性充足の仕組みを理解するのに大いに役立つため, 知っておくことをお勧めする. NOTE: 本稿はDa
はじめに Dagger2使ってますか? 小規模なアプリであれば必要ないですが、ある程度規模が大きかったり、複数チーム (特に複数社) で開発する場合は便利ですよね。 Android + Dagger2でテストする日本語の説明があまりない気がするので、書いてみます。 Dagger2の基本的な使い方は端折りますので、適当に検索してください。 環境 本記事の本質とは関係ありませんが、コードを簡単にするためにButter KnifeとLombokも使ってます。 Dagger2 2.5 Butter Knife 8.1.0 Lombok 1.12.6 出来たもの ソース一式を以下に置いておきます。 以降、これベースで説明していきます。 https://github.com/arenahito/AndroidDiExample 構造 サンプルアプリの構造としては、Android-CleanArchit
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く