- 依存性注入 :システムおよびカスタム依存性の初期化。
- SQLiteのオブジェクトリレーショナルマッピング :CRUD操作は「そのまま」;
- Fragments 、 ActionBar Sherlockのサポート。
- JSONの単純な(de) シリアル化 。
- AsyncTasks、例外処理を伴うIntentService。
- JSONをサポートするRESTful HTTPクライアント 。
- L. ogタグなし、AndroidManifestで設定可能。
- キャッシュされた非同期httpローダー、ビューおよびインテントヘルパーなどのユーティリティ 。
ほんの1時間前
*
ライブラリの最初のバージョンがリリースされましたが、最初のバージョンは...
長い間、私は次のスタイルのコードでオールドスクールのアプローチに取り組んでいました。
private Button btn; onCreate(Bundle b) { super.onCreate(b); btn = (Button)findViewById(R.id.btn); }
彼がRoboGuiceを使用したプロジェクトに参加するまで。 そして後:
@InjectView private Button btn;
自発的な帰還はありませんでした。
一方、RoboGuiceはサイズに神経質であり、Fragmentsをサポートする未リリースのバージョン2.0です。 また、ORMにはサードパーティのライブラリが必要でした。 また、Gsonを使用すると、JSONを簡単に操作できます。 これが間違っていると、複数のアプリケーションサイズにわたって依存関係がプルされます。
一般に、「 何かを正しくしたい場合は自分でやる 」という原則に従って、私はただ楽しみのために始めました。
そこから来たものはgithub.com/yanchenko/droidpartsのバージョン0.5で利用可能であり、以下から構成されています:
- ベース -DI、ORM、アクティビティ、その他の主要コンポーネント。
- extra-オプションのRESTfulクライアントとさまざまなユーティリティ。
- support-actionbarsherlock-デフォルトのActionBarSherlockとともにFragments、ActionBar、およびタブをサポート。
- サンプルはサンプルアプリケーションです。
はじめに
git clone github.com/yanchenko/droidparts.git
git clone github.com/yanchenko/droidparts.git
、
base
、
extra
、
sample
からEclipseプロジェクトをインポートし
sample
。
それらの最初の2つはライブラリ(Androidライブラリプロジェクト)です。
本格的なアプリケーション
project.properties
後者の
project.properties
では、
proguard.config=../proguard.cfg
という行に注意して
proguard.config=../proguard.cfg
これは、.apkへのエクスポート時に使用される変更された難読化設定を示しています。
DroidPartsにはカスタムorg.droidparts.Applicationが含まれていますが、アプリケーション自体でインジェクションが必要な場合にのみ継承することは理にかなっています。 そのような単純なアプリケーションの必要性はありません。 ただし、独自の依存関係を注入する必要があります。
AndroidManifest.xml
行:
<meta-data android:name="droidparts_dependency_provider" android:value=".DependencyProvider" />
org.droidparts.inject.AbstractDependencyProvider
を継承し、必要なオブジェクトのファクトリーであるクラスを宣言します。
スキームは単純です。各
DependencyProvider
'aメソッドは、インジェクションに使用できるクラスの1つのインスタンスを返します。 2つのタイプのメソッドがサポートされています:パラメーターなしで呼び出され、単一の
Context
パラメーターで呼び出されます。 アクティビティにインジェクションが行われた場合、渡されるコンテキストは正確にそのコンテキストになります。これは、UIに関連付けられた依存関係にとって重要です。
以下を含むコードの例 シングルの実装方法(シングルトン、
org.droidparts.sample.DependencyProvider
、翻訳用語が大好きです)、
org.droidparts.sample.DependencyProvider
直接確認できます。
システムリソースとサービスの注入には、もちろん、追加のメソッドは必要ありません。
インジェクション自体は、
Injector.get().inject(...)
メソッドのいずれかを呼び出すときに
@Inject...
によって注釈が付けられたフィールドに対して実行されます。
Activity
、
Service
などから継承して、手動呼び出しをスキップできます。
org.droidparts
から。
アプリケーション
org.droidparts.sample.activity.EntryListActivity
では、このアプローチの例です。
次のことに注意してください。
@Override public void onPreInject() { setContentView(R.layout.activity_entry_list); }
onCreate(...)
へのすべての呼び出しは、インジェクターの完了後に発生します。 この場合、これは未定義の
View
つながり
View
。
この混oticとした控えめな表現については、入門記事を完了します。 ライブラリの使用を開始するのに十分なDI、ORM、およびJSONシリアル化の例は、アプリケーションにあります。 詳細なレビューとベストプラクティスは、さらなる記事のトピックです。
近い将来、
Activity
用に独自のコンストラクタを置き換える方法を説明します(ヒント:このパターンはアプリケーションにあります)。
私はここで質問に答えます: stackoverflow.com/questions/tagged/droidparts 。
ありがとう、そしてより少ないコードを書いてください! (:
*昨夜現在。