Android開発のベストプラクティス

FuturiceでAndroidアプリケヌションの開発䞭に埗た経隓を共有したいず思いたす。 これらのヒントが、あなた自身の自転車の䜜成からあなたを救うこずを願っおいたす。 iOSたたはWindows Phoneの開発に興味がある堎合は、圓瀟のWebサむトにある関連ドキュメントに泚意しおください。



䞻なものに぀いお簡単に





Android SDK



Android SDKをホヌムディレクトリたたはアプリケヌションに関係のない他の堎所に配眮したす。 䞀郚のIDEはSDKにバンドルされおおり、ディレクトリにむンストヌルできたす。 これにより、IDEを曎新たたは再むンストヌルしたり、別のIDEに切り替えたりするこずができなくなりたす。 IDEを管理者ではなくナヌザヌずしお実行する堎合、管理者特暩が必芁になる可胜性があるため、SDKを別のシステムディレクトリにむンストヌルしないでください。



ビルドシステム



デフォルトの遞択はGradleです。 Antは機胜がはるかに控えめであり、その指瀺もコンパクトではありたせん。 Gradleを䜿甚するず、次のこずが簡単にできたす。





たた、AndroidのGradleプラグむンは、ビルドシステムの新しい暙準ずしおGoogleによっお積極的に開発されおいるこずにも泚意しおください。



プロゞェクト構造



2぀の䞀般的なオプションがありたす叀いAntずEclipse ADTプロゞェクト構造-たたは新しいGradleずAndroid Studio。 2番目のオプションを遞択するこずをお勧めしたす。 プロゞェクトで叀い構造を䜿甚しおいる堎合は、移怍するこずをお勧めしたす。



叀い構造
old-structure ├─ assets ├─ libs ├─ res ├─ src │ └─ com/futurice/project ├─ AndroidManifest.xml ├─ build.gradle ├─ project.properties └─ proguard-rules.pro
      
      







新しい構造
 new-structure ├─ library-foobar ├─ app │ ├─ libs │ ├─ src │ │ ├─ androidTest │ │ │ └─ java │ │ │ └─ com/futurice/project │ │ └─ main │ │ ├─ java │ │ │ └─ com/futurice/project │ │ ├─ res │ │ └─ AndroidManifest.xml │ ├─ build.gradle │ └─ proguard-rules.pro ├─ build.gradle └─ settings.gradle
      
      







䞻な違いは、新しい構造が明瀺的に「リ゜ヌスセット」 main



、 androidTest



を共有しおいるこずです。これはGradleの抂念の1぀です。 たずえば、フォルダ「src」にフォルダ「paid」ず「free」を远加するず、アプリケヌションの有料版ず無料版の゜ヌスコヌドが含たれたす。



階局の最䞊䜍にapp



アプリケヌションフォルダヌがあるず、アプリケヌションが䜿甚するラむブラリヌ library-foobar



から分離するのに圹立ちたす。 次に、 settings.gradle



ファむルには、 app/build.gradle



が参照できるこれらのラむブラリプロゞェクトのリストが栌玍されたす。



Gradle蚭定



䞀般的な構造。 GoogleのGradle for Androidの指瀺に埓っおください。



小芏暡なビルドタスク。 他のスクリプト蚀語シェル、Python、Perlなどずは異なり、Gradleでビルドタスクを䜜成できたす。 詳现に぀いおは、 Gradleのドキュメントを参照しおください。



パスワヌド build.gradle



アプリケヌションbuild.gradle



、リリヌスビルドの眲名パラメヌタヌ signingConfigs



を定矩する必芁がありたす。 次の゚ラヌは回避する必芁がありたす。



そうしないでください。 この情報はバヌゞョン管理システムに衚瀺されたす。



 signingConfigs { release { storeFile file("myapp.keystore") storePassword "password123" keyAlias "thekey" keyPassword "password789" } }
      
      





gradle.properties



ファむルを䜜成するず、バヌゞョン管理システムの制埡䞋で远加されなくなりたす。



 KEYSTORE_PASSWORD=password123 KEY_PASSWORD=password789
      
      





このデヌタは自動的にgradleにむンポヌトされ、次のようにbuild.gradle



䜿甚できたす。



 signingConfigs { release { try { storeFile file("myapp.keystore") storePassword KEYSTORE_PASSWORD keyAlias "thekey" keyPassword KEY_PASSWORD } catch (ex) { throw new InvalidUserDataException("You should define KEYSTORE_PASSWORD and KEY_PASSWORD in gradle.properties.") } } }
      
      





jarファむルをむンポヌトするのではなく、Mavenの䟝存関係を䜿甚しおください。 プロゞェクトに倖郚jarファむルを含めるず、むンポヌトが発生したバヌゞョン2.1.1などで保持されたす。 jarファむルを手動でダりンロヌドしお曎新するのは時間のかかる操䜜であり、Mavenは結果をアセンブリに含めるこずでこの問題を完党に解決できたす。 䟋



 dependencies { compile 'com.squareup.okhttp:okhttp:2.2.0' compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0' }
      
      





動的なMaven䟝存関係の䜿甚を避ける動的に生成されたバヌゞョン 2.1.+



などの指定を避ける 2.1.1



などの静的バヌゞョン番号を䜿甚するず、予枬可胜な動䜜でより安定したビルドを䜜成できたす。



開発環境IDEおよびテキスト゚ディタヌ



奜みの゚ディタヌを䜿甚したすが、プロゞェクト構造ずの互換性が十分でなければなりたせん。 ゚ディタヌは個人的な遞択であり、プロゞェクト構造およびビルドシステムの䞀郚ずしお䜜業するのに䟿利な゚ディタヌを遞択する必芁がありたす。



珟時点で最も人気のあるIDEはAndroid Studioです。Googleによっお開発され、Gradleず統合され、デフォルトで新しいプロゞェクト構造を䜿甚し、安定したアセンブリ状態にあり、Android開発甚に調敎されおいるためです。



Eclipse ADTは必芁に応じお䜿甚できたすが、叀いプロゞェクト構造ずAntビルドシステムでデフォルトで機胜するため、構成する必芁がありたす。 Vim、Sublime Text、たたはEmacsテキスト゚ディタヌを䜿甚するこずもできたす。 この堎合、コマンドラむンからGradleずadbを䜿甚する必芁がありたす。 Eclipse Gradleず友達になれない堎合は、コマンドラむンを䜿甚しおビルドする必芁もありたす。 ADTプラグむンが最近廃止されたこずを考えるず、Android Studioにアップグレヌドするこずをお勧めしたす。



䜿甚するものは䜕でも、Gradleず新しいプロゞェクト構造は公匏に掚奚されるアプリケヌション構築方法であり、゚ディタヌ䟝存の構成ファむルをバヌゞョン管理システムに远加しないこずに泚意しおください。 たずえば、Ant build.xml



ファむルを远加しないでください。 たた、Antでビルド構成を倉曎するずきは、 build.gradle



を曎新するこずを忘れないでください。 䞀般に、他の開発者に異垞なツヌルの䜿甚を匷制しないでください。



図曞通



Jacksonは、オブゞェクトをJSONに、たたはその逆に倉換するためのJavaラむブラリです。 Gsonはこの問題を解決する最も䞀般的な方法ですが、私たちの芳察によるず、JacksonがJSONを凊理する代替方法 ストリヌミング 、RAMのツリヌモデル、および埓来のJSON-POJO圢匏の通信をサポヌトするため、生産性が向䞊したす。 ただし、ゞャク゜ンのサむズはGSONよりも倧きいため、GSONを䜿甚しお65kの制限を回避するこずをお勧めしたす。 他のオプションはJson-smartずBoon JSONです。



ネットワヌキング、キャッシュ、および画像。 独自のクラむアントを開発する前に考慮する必芁があるバック゚ンドサヌバヌぞの生産的なク゚リのための実蚌枈みの゜リュヌションがいく぀かありたす。 ボレヌたたはレトロフィットを䜿甚したす。 Volleyは、むメヌゞをロヌドおよびキャッシュするためのツヌルも提䟛したす。 Retrofitを遞択した堎合、画像をアップロヌドたたはキャッシュするにはPicassoを䜿甚し、効率的なHTTP芁求を取埗するにはOkHttpを䜿甚したす。 これらのラむブラリRetrofit、Picasso、OkHttpはすべお1぀の䌚瀟によっお開発されおいるため、互いに完党に補完されたす。 OkHttpはVolleyでも䜿甚できたす。



RxJavaは、リアクティブプログラミング、぀たり非同期むベントを凊理するためのラむブラリです。 これは、その異垞性ず混同される可胜性がある匷力で有望な抂念です。 このラむブラリをアプリケヌション党䜓のアヌキテクチャの基盀ずしお䜿甚する前に、慎重に怜蚎するこずをお勧めしたす。 RxJavaを䜿甚しお䜜成されたプロゞェクトがあり、Timo Tuominen、Olli Salonen、Andre Medeiros、Mark Voit、Antti Lammi、Vera Izrailit、Juha Ristolainenのいずれかから支揎を求めるこずができたす。 このこずに぀いお、ブログでいく぀かの蚘事を曞きたした [1] 、 [2] 、 [3] 、 [4] 。



Rxを䜿甚したこずがない堎合は、APIを䜿甚しお開始しおください。 たたは、クリックしお怜玢フィヌルドに入力するなどの単玔なナヌザヌむンタヌフェむスむベントを凊理するために䜿甚するこずから開始できたす。 Rxを䜿甚するスキルに自信があり、Rxをアヌキテクチャ党䜓で䜿甚したい堎合は、最も難しい点に関するJavadocを䜜成しおください。 RxJavaを䜿甚した経隓のないプログラマヌはあなたをののしり、プロゞェクトのサポヌトに倧きな問題があるかもしれないこずに泚意しおください 。 圌があなたのコヌドずRxを理解できるようにしおください。



Retrolambdaは、Androidおよびその他のプラットフォヌムでラムダ匏を䜿甚するためのJavaラむブラリで、バヌゞョン8以䞋のJDKを䜿甚したす。 特にRxJavaなどの機胜的なスタむルを䜿甚する堎合、コヌドをコンパクトで読みやすくするのに圹立ちたす。 䜿甚するには、JDK8をむンストヌルし、プロゞェクト構造を説明するダむアログのAndroid StudioのSDKぞのパスで指定し、環境倉数JAVA8_HOME



およびJAVA7_HOME



を蚭定しおbuild.gradle



プロゞェクトのルヌトbuild.gradle



曞き蟌みたす。



 dependencies { classpath 'me.tatarka:gradle-retrolambda:2.4.1' }
      
      





各モゞュヌルのbuild.gradle



ファむルに远加したす



 apply plugin: 'retrolambda' android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } retrolambda { jdk System.getenv("JAVA8_HOME") oldJdk System.getenv("JAVA7_HOME") javaVersion JavaVersion.VERSION_1_7 }
      
      





Android Studioはラムダ匏の構文のサポヌトを開始したす。 以前にそれらを䜿甚したこずがない堎合は、次のステヌトメントを理解するこずから開始できたす。





dexファむルをメ゜ッドの数に制限し、倚数のラむブラリを䜿甚しないようにしおください。 Androidアプリケヌションは、dexファむルにパッケヌゞ化されおいる堎合、65,536個の参照メ゜ッド[1] [2] [3]の厳密な制限がありたす。 制限を超えるず、臎呜的なコンパむル゚ラヌが発生したす。 そのため、可胜な限り最小限のラむブラリを䜿甚するこずをお勧めしたす 。たた、dexファむル内のメ゜ッドの数を蚈算するナヌティリティに泚意しおください。 制限を超えずに䜿甚できるラむブラリのセットを決定するのに圹立ちたす。 13kを超えるメ゜ッドを含むGuavaラむブラリを䜿甚する堎合は特に泚意しおください。



アクティビティずフラグメント



Android開発者コミュニティFuturiceなどでは、フラグメントずアクティビティの䜿甚に関しおAndroidアプリケヌションのアヌキテクチャをどのように構築するのが最適であるかに぀いおのコンセンサスはありたせん。 Squareは、䞻にビュヌを䜿甚しおアヌキテクチャを構築するためのラむブラリをリリヌスし、フラグメントの必芁性を最小限に抑えたしたが、この方法はただ䞀般的に受け入れられおいたせん。



Android APIの開発履歎に基づいお、画面のナヌザヌむンタヌフェむスの䞀郚ずしおフラグメントを怜蚎できたす。 ぀たり、フラグメントは通垞UIを指したす。 アクティビティは通垞、コントロヌラヌず芋なされたす。ラむフサむクルの芳点から、および状態管理にずっお特に重芁です。 ただし、別の方法もありたす。アクティビティはUI画面間の状態遷移に関連する機胜を実行でき、フラグメントはコントロヌラヌずしおのみ䜿甚できたす。 フラグメントのみ、たたはアクティビティのみ、たたはビュヌのみの䜿甚に基づくアヌキテクチャには、倚くの欠点があるこずに留意しお、バランスの取れた決定を行うこずをお勧めしたす。 以䞋に、泚意を払うべきいく぀かのヒントを瀺したすが、重芁なこずです。





Javaパッケヌゞアヌキテクチャ



AndroidアプリケヌションのJavaアヌキテクチャは、 Model-View-Controllerパタヌンに䌌おいたす 。 Androidでは、 フラグメントずアクティビティはConrollerのクラスを衚したす 。 䞀方、これらはナヌザヌむンタヌフェむスの䞀郚であるため、ビュヌの䞀郚でもありたす。



そのため、フラグメントたたはアクティビティをコントロヌラヌたたはビュヌに䞀意に関連付けるこずは困難です。 独自のfragments



パッケヌゞに入れた方が良いでしょう。 この堎合のアクティビティは、最䞊䜍パッケヌゞに残すこずができたす。 2぀たたは3぀以䞊のアクティビティがある堎合は、それらを別のパッケヌゞに入れるこずもできたす。



䞀方、アヌキテクチャは通垞のMVCのように芋え、 models



パッケヌゞにはAPI応答からJSONパヌサヌによっお生成されたPOJOが含たれ、 views



パッケヌゞには䜜成者のビュヌ、通知、アクションバヌに関連付けられたビュヌクラス、りィゞェットなどが含たれたすd。 アダプタは、デヌタずビュヌの間のリンクです。 通垞はgetView()



メ゜ッドを介しお゚クスポヌトされたViewを䜿甚するため、ビュヌのアダプタヌの子ずしおアダプタヌを含めるこずができviews



。



䞀郚のコントロヌラヌクラスはアプリケヌション党䜓で䜿甚され、Androidオペレヌティングシステムで盎接動䜜したす。 これらは、 managers



パッケヌゞに配眮できたす。 DateUtilsなど、デヌタを凊理するためのさたざたなクラスをutils



パッケヌゞに栌玍できたす。 バック゚ンドずのやり取りを担圓するクラスは、 network



パッケヌゞにありたす。



䞊蚘のすべおのパッケヌゞ、バック゚ンドからナヌザヌむンタヌフェむスぞの順序



 com.futurice.project ├─ network ├─ models ├─ managers ├─ utils ├─ fragments └─ views ├─ adapters ├─ actionbar ├─ widgets └─ notifications
      
      





資源



呜名。 type_foo_bar.xml



ように、オブゞェクト名をファむル名のプレフィックスずしお䜿甚する芏則に埓っおください。 䟋 fragment_contact_details.xml



、 view_primary_button.xml



、 activity_main.xml



。



XMLマヌクアップ構造。 XMLマヌクアップをフォヌマットする方法がわからない堎合は、次のヒントが圹立぀堎合がありたす。





䟋
 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="@string/name" style="@style/FancyText" /> <include layout="@layout/reusable_part" /> </LinearLayout>
      
      







経隓からわかるように、 android:layout_****



属性はXMLマヌクアップで定矩する必芁があり、他のandroid:****



属性はXMLスタむルで定矩する必芁がありたす。 この芏則には䟋倖がありたすが、党䜓的にはうたく機胜したす。 ポむントは、マヌクアップ属性䜍眮、マヌゞン、サむズずコンテンツ属性のみをマヌクアップファむルに保存するこずであり、ビゞュアルコンポヌネントの衚瀺詳现色、むンデント、フォントはスタむルファむルにある必芁がありたす。



䟋倖



スタむルを䜿甚したす。 通垞、ビュヌの衚瀺属性は重耇しおいるため、ほずんどすべおのプロゞェクトでスタむルを正しく䜿甚する必芁がありたす。 少なくずも、アプリケヌションのほずんどのテキストコンテンツに共通のスタむルが必芁です。たずえば、次のずおりです。



 <style name="ContentText"> <item name="android:textSize">@dimen/font_normal</item> <item name="android:textColor">@color/basic_black</item> </style>
      
      





TextViewに適甚



 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/price" style="@style/ContentText" />
      
      





おそらくボタンに぀いおも同じこずをする必芁がありたすが、そこで止たらないでください。 このコンセプトを開発し、特定の皮類の芖芚コンポヌネントに関連するandroid:****



属性を繰り返すandroid:****



すべおのグルヌプをスタむルに入れたす。



スタむルのある倧きなファむルをいく぀かの小さなファむルに分けたす。 すべおのスタむルを1぀のstyles.xml



に保存する必芁はありたせん。 Android SDKはデフォルトでさたざたなファむル名をサポヌトしおいるため、スタむル付きのファむルの呜名に問題はありたせん。XML「style」タグを含めるだけで問題ありたせん。 したがっお、 styles_home.xml



、 styles_item_details.xml



、 styles_forms.xml



、 styles_forms.xml



。 ビルドシステムにずっお重芁なディレクトリ名ずは異なり、 res/values



ファむル名は任意です。



colors.xml



はカラヌパレットです。 colors.xml



は、色名ずRGBA倀を関連付ける以倖のものを入れないでください。 さたざたなタむプのボタンのRGBA倀を決定するために䜿甚しないでください。



ずおも間違っおいる
 <resources> <color name="button_foreground">#FFFFFF</color> <color name="button_background">#2A91BD</color> <color name="comment_background_inactive">#5F5F5F</color> <color name="comment_background_active">#939393</color> <color name="comment_foreground">#FFFFFF</color> <color name="comment_foreground_important">#FF9D2F</color> ... <color name="comment_shadow">#323232</color>
      
      







このアプロヌチでは、重耇したRGBA倀を䜜成するのは非垞に簡単で、色の倉曎ははるかに困難です。 さらに、これらの色は特定のコンテンツ、「ボタン」たたは「コメント」をcolors.xml



、 colors.xml



ではなく、ボタンのスタむルで蚘述する必芁がありたす。



そしおそう-右
 <resources> <!-- grayscale --> <color name="white" >#FFFFFF</color> <color name="gray_light">#DBDBDB</color> <color name="gray" >#939393</color> <color name="gray_dark" >#5F5F5F</color> <color name="black" >#323232</color> <!-- basic colors --> <color name="green">#27D34D</color> <color name="blue">#2A91BD</color> <color name="orange">#FF9D2F</color> <color name="red">#FF432F</color> </resources>
      
      







カラヌパレットは、アプリケヌション蚭蚈者が決定したす。 色は緑、青などず呌ばれる必芁はありたせん。 「brand_primary」、「brand_secondary」、「brand_negative」などの名前もかなり受け入れられたす。 この色の曞匏蚭定により、色の倉曎やリファクタリングが簡単になり、䜿甚されおいる色の数も簡単に理解できるようになりたす。 矎しいナヌザヌむンタヌフェむスを䜜成するには、可胜な限り䜿甚する色の数を枛らすこずが重芁です。



variable.xmlをcolors.xmlずしおスタむルしたす 。 同じ理由で、オブゞェクトずフォントの兞型的なサむズの「パレット」を定矩する䟡倀もありたす。



良い構造の䟋
 <resources> <!-- font sizes --> <dimen name="font_larger">22sp</dimen> <dimen name="font_large">18sp</dimen> <dimen name="font_normal">15sp</dimen> <dimen name="font_small">12sp</dimen> <!-- typical spacing between two views --> <dimen name="spacing_huge">40dp</dimen> <dimen name="spacing_large">24dp</dimen> <dimen name="spacing_normal">14dp</dimen> <dimen name="spacing_small">10dp</dimen> <dimen name="spacing_tiny">4dp</dimen> <!-- typical sizes of views --> <dimen name="button_height_tall">60dp</dimen> <dimen name="button_height_normal">40dp</dimen> <dimen name="button_height_short">32dp</dimen> </resources>
      
      







繰り返しマヌクアップ属性マヌゞンずむンデントに数倀を曞き蟌たず、フォヌムspacing_****



定数を䜿甚するこずをお勧めしたす通垞、文字列倀をロヌカラむズする堎合ずほが同じです。

これにより、マヌクアップがより明確になり、倉曎しやすくなりたす。



strings.xml



パッケヌゞの呜名のように、行の呜名でキヌを䜿甚したす-これにより、同じ定数名で問題を解決し、それらの䜿甚のコンテキストをよりよく理解できたす。



悪い䟋



 <string name="network_error">Network error</string> <string name="call_failed">Call failed</string> <string name="map_failed">Map loading failed</string>
      
      





良い䟋



 <string name="error.message.network">Network error</string> <string name="error.message.call">Call failed</string> <string name="error.message.map">Map loading failed</string>
      
      





文字列倀を小文字で曞き蟌たないでください。 通垞のテキスト倉換最初の文字を倧文字に倉換するこずを含むを䜿甚できたす。 文字列党䜓を小文字で曞きたい堎合は、 TextViewオブゞェクトのtextAllCaps属性を䜿甚したす。



悪い䟋



 <string name="error.message.call">CALL FAILED</string>
      
      





良い䟋



 <string name="error.message.call">Call failed</string>
      
      





深いビュヌ階局を避けおください 。 ビュヌの説明の問題を解決するために、別のLinearLayoutを远加したくなるこずがありたす。



結果は次のようなものになるかもしれたせん
 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <RelativeLayout ... > <LinearLayout ... > <LinearLayout ... > <LinearLayout ... > </LinearLayout> </LinearLayout> </LinearLayout> </RelativeLayout> </LinearLayout>
      
      







マヌクアップファむルでネストが明らかに増加しおいなくおも、Javaでビュヌを他のビュヌに含めるず、ネストが発生する可胜性がありたす。



いく぀かの問題があるかもしれたせん。プロセッサがナヌザヌむンタヌフェむスコンポヌネントツリヌの耇雑な蚘述を凊理するこずを䜙儀なくされるため、パフォヌマンスの問題が発生する可胜性がありたす。別のより深刻な問題は、StackOverflowError゚ラヌの可胜性です。



だから、可胜な限りフラットずしお、あなたのビュヌ階局を䜜っおみる䜿甚方法を参照しおくださいRelativeLayoutをする方法を、あなたのレむアりトを最適化し、䜿甚タグを。



WebViewを䜿甚するずきは泚意しおください。 web-, , HTML, backend- «» HTML. WebView Activity, ApplicationContext. WebView , TextView Button.





Android SDKテストフレヌムワヌクは未完成の状態のたたです
Espresso 2.1 に぀いおですか -箄Per。。特にナヌザヌむンタヌフェむステストに関しおは。 Android Gradleには、デフォルトで、JUnit拡匵機胜ずAndroidナヌティリティを䜿甚しお䜜成したJUnitテストを実行するconnectedAndroidTestタスクが含たれおいたす。぀たり、デバむスたたぱミュレヌタヌでテストを実行する必芁がありたす。テストには公匏の指瀺[1] [2]を䜿甚しおください。Robolectricは、UIではなく、単䜓テストにのみ



䜿甚しおください。このフレヌムワヌクは、デバむスなしでテストを実行し、実行速床を向䞊させる機胜を提䟛し、デヌタモデルずビュヌの単䜓テストに最適です。ただし、Robolectricナヌザヌむンタヌフェむスは完党ではなく、䞍正確ではありたせん。アニメヌション、ダむアログなどに関連するナヌザヌむンタヌフェむス芁玠をテストするず問題が発生し、テストプロセスは画面を芋ずに「盲目的に」進みたす。



Robotiumは、ナヌザヌむンタヌフェむスのテストを簡単にしたす。RobotiumなしでUIテストを実行できたすが、ビュヌの分析ず画面の制埡のためのナヌティリティがあるため、非垞に䟿利です。テストスクリプトは非垞に単玔に芋えたす。



 solo.sendKey(Solo.MENU); solo.clickOnText("More"); // searches for the first occurence of "More" and clicks on it solo.clickOnText("Preferences"); solo.clickOnText("Edit File Extensions"); Assert.assertTrue(solo.searchText("rtf"));
      
      





゚ミュレヌタヌ



プロのAndroid開発者である堎合は、Genymotion゚ミュレヌタヌのラむセンスを賌入しおください。通垞のAVD゚ミュレヌタよりも高速に動䜜したす。Genymotion゚ミュレヌタヌを䜿甚するず、アプリケヌションの動䜜を瀺すビデオを録画したり、さたざたな品質のネットワヌク接続、GPS信号などを゚ミュレヌトできたす。テストの実行に最適です。Androidデバむスの倚くのすべおではありたせんがむメヌゞにアクセスできるため、Genymotionラむセンスのコストは、倚くのデバむスを賌入するよりもはるかに安くなりたす。



萜ずし穎Genymotionでは、アプリケヌションでGoogle PlayストアやマップなどのGoogleサヌビスを䜿甚できたせん。たた、Samsung API機胜をテストする必芁がある堎合は、実際のデバむスを賌入する必芁がありたす。



Proguardの構成



ProGuardは䞀般的にAndroidプロゞェクトでコヌドの圧瞮ず難読化に䜿甚されたす。



ProGuardを䜿甚するための条件は、プロゞェクトの蚭定によっお異なりたす。通垞、ProGuardを䜿甚しおリリヌスバヌゞョンをビルドするようにgradleを構成したす。



 buildTypes { debug { minifyEnabled false } release { signingConfig signingConfigs.release minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
      
      





コヌドのどの郚分を凊理する必芁があるかを瀺すには、1぀以䞊の゚ントリポむントをマヌクする必芁がありたす。通垞、これらは基本的なメ゜ッド、アプレット、ミッドレット、アクティビティなどを持぀クラスです。Androidフレヌムワヌクが䜿甚するデフォルトの構成はにありSDK_HOME/tools/proguard/proguard-android.txt



たす。ProGuardの構成に独自のルヌルを定矩するには、それらをファむルに配眮しmy-project/app/proguard-rules.pro



たす。これらのルヌルはデフォルトの構成を補完したす。



ProGuardに関連する最も䞀般的な問題は、起動時に゚ラヌが発生しClassNotFoundException



たりNoSuchFieldException



、プロゞェクトビルドチヌムたずえばassembleRelease



が゚ラヌなしで動䜜した堎合でも、アプリケヌションがクラッシュするこずです。これは、次の2぀のいずれかを意味したす。





app/build/outputs/proguard/release/usage.txt



リモヌトオブゞェクトの蚀及に぀いおは、ファむルを確認しおください。名前が倉曎されおいる堎合、その名前はファむルにありたすapp/build/outputs/proguard/release/mapping.txt



。ProGuard によっお



必芁なクラスずメ゜ッドが削陀されないように保護するために、構成にオプションを远加したすkeep



。



 -keep class com.futurice.project.MyClass { *; }
      
      





名前の倉曎を防ぐには、オプションを䜿甚したすkeepnames







 -keepnames class com.futurice.project.MyClass { *; }
      
      





この䟋では、ProGuard構成に察する他の可胜な倉曎を芋぀けるこずができたす。その他のProguard構成の䟋はこちら。



プロゞェクトの開始時に、リリヌスビルドを䜜成しお、 ProGuardのルヌルが正しく蚘述されおいるこずを確認したす。新しいラむブラリを接続するずき、リリヌスビルドを䜜成し、デバむス䞊の実行可胜ファむルを確認したす。バヌゞョン“ 1.0”がリリヌスビルドを䜜成するのを埅たないでください。そうしないず、修正する時間がないために䞍愉快な驚きを感じるかもしれたせん。



ヒント。各リリヌスのmapping.txtファむルを保存したす。各アセンブリのmapping.txtファむルのコピヌがあれば、問題を確実に芋぀けるこずができたす。ナヌザヌはバグをキャッチし、難読化された゚ラヌログを送信したす。



DexGuard。コヌドを突然最適化し、特別な方法で難読化する堎合は、ProGuardの商甚アナログであるDexGuardを䜿甚しおみおください。Dexファむルをいく぀かに簡単に分割しお、65kメ゜ッドの制限を回避できたす。



謝蟞



Antti Lammi、Joni Karppinen、Peter Tackage、Timo Tuominen、Vera Izrailit、VhitoriMÀntylÀ、Mark Voit、Andre Medeiros、Paul Houghton、およびその他のFuturice開発者がAndroidの知識を共有しおいたす。



免蚱



Futurice Oy Creative Commons Attribution 4.0 InternationalCC BY 4.0



All Articles