nowinandroid - KotlinとJetpackComposeで完全に構築された完全に機能するAndroidアプリ

(A fully functional Android app built entirely with Kotlin and Jetpack Compose)

Created at: 2022-04-20 04:40:24
Language: Kotlin
License: Apache-2.0

今Androidで

現在Androidアプリで[進行中の作業🚧]

これは、 NowinAndroid アプリのリポジトリです。

現在Androidには、KotlinとJetpackComposeで完全に構築された完全に機能するAndroidアプリがあります。これは、Androidの設計と開発のベストプラクティスに従っており、開発者にとって役立つリファレンスとなることを目的としています。実行中のアプリとして、定期的なニュース更新を提供することにより、開発者がAndroid開発の世界を最新に保つのを支援することを目的としています。

アプリは現在開発の初期段階にあり、Playストアではまだ利用できません。

特徴

Now in Androidは、NowinAndroidシリーズのコンテンツを表示します 。ユーザーは最近のビデオ、記事、その他のコンテンツへのリンクを閲覧できます。ユーザーは、興味のあるトピックをフォローしたり、特定の著者をフォローしたりすることもできます。

スクリーンショット

ForYou画面を示すスクリーンショット インタレスト画面を示すスクリーンショット トピックの詳細画面を示すスクリーンショット

開発環境

現在、AndroidではGradleビルドシステムを使用しており、Android Studioの最新の安定バージョン(ここで入手可能)に直接インポートできます。ビルドは

debug
、デフォルト構成を使用してビルドおよび実行できます。

起動して実行したら、以下の学習ジャーニーを参照して、使用されているライブラリとツール、UI、テスト、アーキテクチャなどへのアプローチの背後にある理由、およびこれらすべてがどのように異なるかをよりよく理解できます。プロジェクトの一部を組み合わせて、完全なアプリを作成します。

注:M1 Macを使用してアプリをビルドするには、 Rosettaを使用する必要があります。詳細について は、次のバグ を参照してください。

建築

Now in Androidアプリは、 公式のアーキテクチャガイダンスに従い、アーキテクチャ学習の旅 で詳しく説明されてい ます。

モジュール化

Now in Androidアプリは完全にモジュール化されており、モジュール化学習の旅で使用されるモジュール化戦略の詳細なガイダンスと説明を見つけることができます 。

建てる

アプリには、通常のバリアント

debug
release
ビルドバリアントが含まれています。

さらに、の

benchmark
バリアントは、
app
起動パフォーマンスをテストし、ベースラインプロファイルを生成するために使用されます(詳細については、以下を参照してください)。

app-nia-catalog
は、 AndroidでNow用に定型化されたコンポーネントのリストを表示するスタンドアロンアプリです 。

また、アプリは 製品フレーバーを使用して、アプリのコンテンツをどこからロードするかを制御します。

demo
フレーバーは静的ローカルデータを使用して、UIを即座に構築および探索できるようにします。

フレーバーは、バックエンドサーバーへの

prod
実際のネットワーク呼び出しを行い、最新のコンテンツを提供します。現時点では、利用可能なパブリックバックエンドはありません。

通常の開発では、

demoDebug
バリアントを使用します。UIパフォーマンステストには、
demoRelease
バリアントを使用します。

テスト

コンポーネントのテストを容易にするために、NowinAndroidはHiltで依存性注入を使用し ます。

ほとんどのデータレイヤーコンポーネントは、インターフェイスとして定義されています。次に、(さまざまな依存関係を持つ)具体的な実装がバインドされ、アプリ内の他のコンポーネントにそれらのインターフェイスを提供します。テストでは、NowinAndroidは特にモッキングライブラリを使用していません。代わりに、HiltのテストAPIを使用して(またはテスト用の手動コンストラクターインジェクションを介して)本番実装をテストダブルに置き換えることができます

ViewModel

これらのテストダブルは、本番実装と同じインターフェイスを実装し、通常、追加のテストフックを備えた単純化された(ただし現実的な)実装を提供します。これにより、モックに対して特定の呼び出しを検証するだけでなく、より多くの本番コードを実行する可能性のある脆弱性の低いテストが実現します。

例:

  • インストルメンテーションテストでは、一時フォルダーを使用してユーザーの設定を保存します。このフォルダーは、リーチテスト後に消去されます。

    DataStore
    これにより、データ更新のフローをあざける代わりに、実際のコードを使用して関連するすべてのコードを実行できます。

  • Test
    各リポジトリの実装が あり、通常の完全なリポジトリインターフェイスを実装し、テスト専用フックも提供します。
    ViewModel
    テストではこれらのリポジトリを使用するため、特定のリポジトリメソッドが呼び出されたことを確認する代わりに
    Test
    、テスト専用フックを使用してリポジトリの状態を操作し、結果の動作を確認できます。
    Test

UI

UIコンポーネントは、 Material 3ガイドラインに従って設計され、 JetpackComposeを使用して完全に構築されています。

アプリには2つのテーマがあります。

  • 動的色-ユーザーの現在の色のテーマに基づいた色を使用します(サポートされている場合)
  • デフォルトのテーマ-動的な色がサポートされていない場合、事前定義された色を使用します

各テーマはダークモードもサポートしています。

アプリは、さまざまな画面サイズをサポートするために適応レイアウトを使用します 。

UIアーキテクチャの詳細については、こちらをご覧ください。

ベースラインプロファイル

このアプリのベースラインプロファイルはにあり

app/src/main/baseline-prof.txt
ます。これには、アプリの起動中に取得された重要なユーザーパスのAOTコンパイルを有効にするルールが含まれています。ベースラインプロファイルの詳細については、このドキュメントをお読みください。

注:アプリの起動を変更するコードに影響を与えたリリースビルドでは、ベースラインプロファイルを再生成する必要があります。

ベースラインプロファイルを生成するには、

benchmark
ビルドバリアントを 選択
BaselineProfileGenerator
し、AOSPAndroidエミュレーターでベンチマークテストを実行します。次に、結果のベースラインプロファイルをエミュレータからにコピーします
app/src/main/baseline-prof.txt

ライセンス

現在Androidでは、Apacheライセンス(バージョン2.0)の条件の下で配布されています。詳細については、 ライセンスを参照してください。