1。いくつかの言葉
2。詳細
Android SDK
Android SDKをホームディレクトリまたはアプリに関係のない他の場所に配置します。一部のIDEは、SDKをインストールするときにSDKを関連付け、IDEの同じディレクトリに配置します。 IDEをアップグレード(再インストール)する必要がある場合、またはIDEを交換する必要がある場合、何か悪いことが見つかります。さらに、IDEがrootの代わりにユーザーアカウントの下で実行されている場合、SDKをシステムレベルのディレクトリに配置しないでください。
システムを構築します
デフォルトの選択はGradleです。アリには多くの制限があり、大きすぎます。 Gradleを使用すると、簡単に行うことができます。
- さまざまなフレーバーまたはアプリケーションバリエーションをコンパイルします
-simple Classes -Scriptタスクを作成します
- 管理およびダウンロード依存関係
-Custom Keystores
-等
Android用のGradleプラグインは、Googleによって新しい標準コンピレーションシステムとしても指定されており、Googleは引き続きアップグレードしています。
プロジェクト構造
2つの一般的なオプションがあります。古いAnt&Eclipse ADTプロジェクト構造。新しいGradle&Android Studioプロジェクト構造。後者を選択する必要があります。プロジェクトが古い構造を使用している場合は、交換してください。
古い構造
古い構造old-assets├。libs├。Res├。Src│└└└com/futurice/project
新しい構造
新しい構造├─ライブラリフォーバル→app│├├。libs│├。Src│├├├├├├├││││└│└。 AndroidManifest.xml│├├。build.gradle│└。Proguard-rules.pro├─build.gradle└─settings.gradle
新しい構造の主な違いは、Gradleの概念である「ソースコードセット」(Main、Androidtest)の分割です。
最高レベルの「アプリ」を使用することは、アプリ(ライブラリフーバーなど)で参照される他のライブラリプロジェクトとアプリを区別するのに役立ちます。次に、settings.gradleはこれらのライブラリへのアプリケーションのインデックスを保持し、app/build.gradleはこれらのライブラリを指すことができます。
Gradle構成
一般的なアーキテクチャAndroidのGradleに関するGoogleのガイドに従ってください。
小さなタスク(スクリプト)では、Gradleを使用して、シェル、Python、またはPerlなどの代わりに小さなタスクを作成できます。詳細については、Gradleのドキュメントを参照してください。
パスワード。アプリケーションのbuild.gradleでは、コンピレーションを公開するためのsigningconfigsを定義する必要があります。詳細は次のとおりです。
次のように書かないでください、それはあなたのバージョン制御システムに表示されます:
signiveConfigs {lelease {storefile file( "myapp.keystore")storepassword "password123" keyalias "thekey" keypassword "password789"}}}代わりに、バージョン制御システムに追加されないGradle.Propertiesファイルを作成する必要があります。
keystore_password = password123key_password = password789
このファイルはGradleによって自動的にインポートされるため、build.gradleで使用できます。
signiveConfigs {release {try {storefile file( "myapp.keystore")storepasswordkeystore_password keyalias "thekey" keypasswordkey_password} catch(ex){thrownewinvaliduserdataexception( "keystore_password} properties" "(Mavenを使用している場合は、元のドキュメントを参照してください)
図書館
ジャクソンは、オブジェクトとJSONデータを互いに変換できるJavaライブラリです。 GSONも同様に良い選択です。ただし、JSCONはJSON、ストリーミング、メモリツリーモデル、JSON-Pojoのデータバインディングを駆動する複数の方法をサポートしているため、優れていると考えています。ただし、ジャクソンはGSONよりも大きいので、65Kの方法制限を避けたい場合は、GSONを使用するのが最善です。その他のオプション:JSON-SMARTおよびBOON JSON
ネットワーク、キャッシュ、写真。ボレーまたはレトロフィットを使用します。ボレーは、画像の読み込みとキャッシュにも使用できます。 Retrofitを選択した場合、Picassoを使用して画像をロードしてキャッシュできます。次に、OKHTTPを使用して、有効なHTTP要求を実行します。これらの3つのタイプ:レトロフィット、ピカソ、およびokhttpはすべて同じ会社から来ているため、お互いを補完します。 okhttpを使用してボレーに接続できます。
RXJavaは、レスポンシブプログラミングライブラリです。つまり、非同期イベントを処理します。 (詳細については、元のドキュメントを参照してください)
Retrolambdaは、JDK8以前にAndroidまたは他のプラットフォームでLambda式を使用するのに役立つJavaライブラリです。 (詳細については、元のドキュメントを参照してください)
最後に、DEXメソッドの制限を覚えておいて、あまりにも多くのライブラリを使用しないでください。 (Androidアプリケーションは、Dexファイルにパッケージ化された場合、最大制限を持っています。65535参照方法[1] [2] [3]。
アクティビティとフラグメント
フラグメントは、Android展開UIインターフェイスのデフォルトオプションである必要があります。フラグメントはアプリケーションで再利用できます。アクティビティの代わりにフラグメントを使用して、次のポイントに基づいてインターフェイスを描画することをお勧めします。
Javaパッケージ構造
AndroidアプリケーションのJava構造は、MVC構造(Model-View-Controller)に近いです。 Androidでは、フラグメントとアクティビティは実際にコントローラークラスです。別の観点から見ると、それらはユーザーインタラクションの一部です。つまり、ビュービュークラスに属します。
したがって、フラグメント(またはアクティビティ)がコントローラーであるかビューであるかを厳密に区別することは困難です。したがって、Javaパッケージの観点からは、フラグメントを独自のフラグメントパッケージに入れた方が良いでしょう。その後、アクティビティは最先端のパッケージにあります(上記の提案に従ってください)。もちろん、2つ以上のアクティビティが必要な場合は、アクティビティパッケージを作成します。
このようにして、構造全体が典型的なMVC構造のように見えます。モデルパッケージには、APIインターフェイスによって取得されたJSONデータを変換するために使用されるPOJOが含まれており、ビューパッケージにはビュー、通知、アクションバービュー、ウィジェットなどが含まれています。アダプターは、データとビューの間にある中間層です。ただし、通常、getView()からビュービューを出力する必要があるため、アダプターをビューパッケージのサブパッケージ場所に配置できます。
Androidシステムのみに属するアプリケーションレベルのコントローラークラスは、マネージャーパッケージに配置する必要があります。 DateUtilsなどのさまざまなデータ処理クラスをUTILSパッケージに配置できます。バックグラウンドサーバーと対話するクラスは、ネットワークパッケージに配置する必要があります。
要するに、サーバーとの対話からユーザーとの対話までの全体的なアーキテクチャは、次のように設計できます。
com.futurice.project
リソースファイルの命名
fragment_contact_details.xml、view_primary_button.xml、Activity_main.xmlなど、type_foo_bar.xmlと同様のプレフィックス条約に従ってください。
レイアウトファイルを整理します
レイアウトXMLファイルを正規化する方法がわからない場合は、次の規則を参照できます。
<?xml version = "1.0" encoding = "utf-8"?> <linearlayout xmlns:android = "http://schemas.android.com/apk/res/android" xmlns:ツール= "http://schemas.android. Android:layout_height = "match_parent" android:layout_height = "match_parent" android = "vertical"> <textview android: "@+id/name" android:layout_width = "match_parent" android:layout = "lap_content" androign "androign Android:text = "@string/name" style = "@style/fancytext"/> <include layout = "@layout/reusable_part"/> </linearlayout>