いまどきの MVP 実装パターンを眺めるべし「Android Architecture Blueprints」

このような, 質問がありました.

こんにちは。

私はアプリの開発を2年ほどやっているものです。
しかし, いつも似たようなコードの繰り返しばかりで少しも進歩していないように思っています。

小さい会社なので, モバイルアプリ開発者は私だけで, だれも私のコードを見ることがないので, 私のコードの間違いを指摘されることはなく, 会社で開発されている他のコードを見ることもありません。

最新技術を利用しすばらしい実装を行っているオープンソースアプリのコードを勉強したいです。

そのようなアプリをどこで見つけたらよいか教えて下さい。

よろしくお願いいたします。

I would like to study some up-to-date open source apps, preferably with material design, do you have any suggestions? : androiddev

このような環境で日々を過ごし, 似たようなことを考えてる開発者は多いと思います。

以下のサイトはいかがでしょうか. よくある ToDo アプリでのサンプルとなっています.

Android Architecture Blueprints [beta] - A collection of samples to discuss and showcase different architectural tools and patterns for Android apps.

ここでフォーカスされているのは, 構造, 設計, テスト, メンテナンスのしやすさですが, リファレンスとして, または, アプリ開発のスタート地点として利用できます.

MVP (基本的な Model-View-Presenter)

googlesamples/android-architecture at todo-mvp

このサンプルはすべての基本となります. 構造を持つフレームワークを使わないシンプルな Model-View-Presenter パターンの実装例です. ローカル/リモートのデータソースである Repository を手作業で Dependency Injection しています. 非同期処理はコールバックを利用しています.

mvp

MVP + Loader

googlesamples/android-architecture at todo-mvp-loaders

Repository から Loader を使ってデータを取得します.

- コールバックなしで Repository 内のデータを非同期で読み込むことができる.
- データソースを監視しており, Repository の内容が変化すると新しい結果として配送できる.
- 画面回転のあと自動的に直近の Loader を再接続できる.

mvp-loaders

MVP + Loader + ContentProvider

googlesamples/android-architecture at todo-mvp-contentproviders

Repository からのデータ取得に ContentProvider を使います.

- 構造化されたデータへのアクセス操作可能.
- 別プロセスで稼働しているコードからデータへ接続できる標準的なインターフェースとなる.

mvp-contentproviders

MVP + DataBinding

googlesamples/android-architecture at todo-databinding

DataBiding ライブラリを利用して, UI要素にデータとアクションをバインドしています. 厳格には Model-View-ViewModel や Model-View-Presenter パターンではありません. ViewModel と Presenter 両方使用しています.

DataBinding ライブラリは, データとUI要素を連携する重複するコードを削減してくれます.

- レイアウトファイルがUI要素へのバインドに利用されている.
- 同時にイベントもアクションハンドラーと結合されている.
- データの監視が可能で必要であるときには自動で更新するようにセットすることができる.

mvp-databinding

MVP + Clean Architecture

googlesamples/android-architecture at todo-mvp-clean

Clean Architecture に基づいており, Presentation と Repository レイヤーの間に Domain レイヤーが存在して, アプリを3つのレイヤーに分けています.

Domain レイヤーでは, すべてのビジネスロジックを収納しており, Presenter に使われる use-case か interactor と命名されたクラスから始まる. これらの use-case は Presentation レイヤーから作ることができるすべての実装可能なアクションを提供します.

mvp-clean

その他

その他, 最近流行のフレームワークや考え方を考慮しての実装サンプルも続々と作成中のようです.

Architecture Blueprints の非同期処理実装にみる Android SDK の方向性

MVP + Dagger2
MVP + RxJava
MVP + Fragmentなし

非常に柔軟性のある使えるサンプルとなると思われます. ぜひご確認あれ.

Architecture Blueprints の非同期処理実装にみる Android SDK の方向性

Hacker News Radio (翻訳) - Google Play の Android アプリ


Gradle ビルド時にやると良い 8つのこと

Gradle のプログレスバーをじっと見てるのは嫌いですよね?

8_things_to_do_while_Gradle_builds_—_Medium

なので, ビルドが完了するまでにできること一覧を作成してみました.

大体, それぞれがいつでもどこでもできる細切れ作業なので, ビルドの間にやるにはちょうどいいと思います.

1. ボキャブラリを増やす.

2. 新しい外国語を学ぶ.

3. Hacker news, Github, ProductHunt, CodePen, StackOverflow, Reddit を徘徊する.

4. 運動をする: 腕立て伏せ, 足首を曲げたり伸ばしたり, スクワットなどたくさんの手軽で器具不要なエクササイズがありますよね.

5. コードを Lint に通す. (3543個も Warning がでたのですぐに止めました)

6. バグを整理する.

7. Android Performance Patterns の動画を見る.

8. Play Store で競合のアプリを見てみる.

あなたはビルドの間, 何をしていますか?

Hacker News Radio (翻訳) - Google Play の Android アプリ
8 things to do while Gradle builds : androiddev
8 things to do while Gradle builds — Medium


gradle 2.2.0-alpha3 で 「APK is not zip aligned」

なぜか apk アップロードで怒られる.

screen1

com.android.tools.build:gradle のバージョンが関係しているようです.

this issue should be fixed in alpha4.

Issue 212591 - android - gradle:2.2.0-alpha3 not zipalign apks - Android Open Source Project - Issue Tracker - Google Project Hosting

alpha4

これでOKです.


Android Studio の セキュリティアラート が発令中!!

今, メール受信したけど.

alert

Dear Android Studio Developer,

As an app developer on Google Play, we wanted to make you aware of an important security update for Android Studio.

On May 11th, we released the Android Studio 2.1.1 update. This incremental update addresses a security vulnerability in the underlying IntelliJ platform that affects all previous versions of Android Studio. The vulnerability concerns the IDE itself and has no effect on individual apps.

Please update to Android Studio 2.1.1 as soon as possible. More information about the vulnerability can be found in this G+ posting. JetBrains has also released more details on the vulnerability.

To address this security vulnerability, simply go into Android Studio and check updates. For OS X users, navigate to the Android Studio Menu and click Check for Updates. For Windows or Linux users, navigate to the Help menu and click Check for Updates. You should be running at least Android Studio 2.1.1. The update message was sent as a in-product notification to all users of Android Studio. If you want a new install, you can download v2.1.1 from the Android Studio website.

If you’re still using v1.5.x and not able to switch to v2.x immediately, please download Android Studio v1.5.2 from the Android Studio tools website.

Regards,

The Android Studio Team

正直, このメールさえもなんだかクリックするのが怖い...

以下, HTMLメールに掲載されているリンク先一覧.

Download Android Studio and SDK Tools | Android Developers

Please update to Android Studio v2.1.1 We wanted to make you aware of an imp...

Security update for IntelliJ-based IDEs v2016.1 and older versions | Company Blog

Android Studio 1.5.2 - Android Studio Project Site

どのリンクもクリックするとまともなサイトが表示されるのですが, どのリンクもリダイレクトされているのが, なんとなくきもい.

curl

バージョン 2.1.1 にしておけばいいということですかね.

いまやメールもすぐには信じられなくなってるのは私だけでしょうか.

きもくないすか?


【Android Studio】idea.vmoptions の設定

少し遅すぎないかと思い, ビルド時間を短縮しようとな.

~/Library/Preferences/AndroidStudio2.1/idea.vmoptions

デフォルトで以下でした.


-Xms128m      
-Xmx750m
-XX:MaxPermSize=350m
-XX:ReservedCodeCacheSize=96m
-XX:+UseCompressedOopseservedCodeCacheSize=96m
-XX:+UseCompressedOops

他人の設定を見てみる.


-Xms128m
-Xmx1024m
-XX:MaxPermSize=350m
-XX:ReservedCodeCacheSize=64m
-XX:+UseCodeCacheFlushing
-XX:+UseCompressedOops
-Dfile.encoding=UTF-8
-Dgroovy.source.encoding=UTF-8

Tips: Android StudioのIDEのメモリ割り当てを増やす(Xmxはどこやねん) - sos の 作業メモ


-Xms512m
-Xmx1024m
-XX:MaxPermSize=512m
-XX:ReservedCodeCacheSize=128m
-XX:+UseCodeCacheFlushing
-XX:+UseCompressedOops
-Dgroovy.source.encoding=UTF-8
-Dfile.encoding=UTF-8

[Android Studio] 起動時のメモリ割り当てサイズを変更する / コンパイラのエンコーディングを変更する | Developers.IO


-Xms2048m
-Xmx8192m
-XX:MaxPermSize=2048m
-XX:ReservedCodeCacheSize=1024m

PSA: Apparently assigning a ton of memory to gradle makes it noticeably faster.. : androiddev


-server
-Xms2g
-Xmx2g
-XX:NewRatio=3
-Xss16m
-XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:ConcGCThreads=4
-XX:ReservedCodeCacheSize=240m
-XX:+AlwaysPreTouch
-XX:+TieredCompilation
-XX:+UseCompressedOops
-XX:SoftRefLRUPolicyMSPerMB=50
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djsse.enableSNIExtension=false
-ea

One and the only one reason to customize IntelliJ IDEA memory settings - Tomasz Dziurko


-server
-Xms2048m
-Xmx2048m
-XX:NewSize=512m
-XX:MaxNewSize=512m
-XX:PermSize=512m
-XX:MaxPermSize=512m
-XX:+UseParNewGC
-XX:ParallelGCThreads=4
-XX:MaxTenuringThreshold=1
-XX:SurvivorRatio=8
-XX:+UseCodeCacheFlushing
-XX:+UseConcMarkSweepGC
-XX:+AggressiveOpts
-XX:+CMSClassUnloadingEnabled
-XX:+CMSIncrementalMode
-XX:+CMSIncrementalPacing
-XX:+CMSParallelRemarkEnabled
-XX:CMSInitiatingOccupancyFraction=65
-XX:+CMSScavengeBeforeRemark
-XX:+UseCMSInitiatingOccupancyOnly
-XX:ReservedCodeCacheSize=64m
-XX:-TraceClassUnloading
-ea
-Dsun.io.useCanonCaches=false

Prashanth's Blog: Performance Tuning of IntelliJ IDEA startup options

こんなグラフあったけども, そんなにデフォルトではとろいのか?

One_and_the_only_one_reason_to_customize_IntelliJ_IDEA_memory_settings_-_Tomasz_Dziurko

きっと多くの環境で稼働できるようにやわらかめの設定なのでしょうね, デフォルトって.

Configuring JVM options and platform properties – JetBrains Support

Android Studio の ビルド がやけにトロい