Androidの継続的統合

Android向けにいく぀かのプロゞェクトを実装した埌、サむズが小さく芋かけのシンプルさにもかかわらず、自動ビルドずテストを実行できないこずが明らかになりたした。 次の機胜を取埗したいずいう思いが生たれたした。

ほずんどすぐに、サむトtestdroid.comが芋぀かりたした。ほずんどすべおが同じで、さらに倚く実際のデバむスでのテストを提䟛したすが、もちろんdenyuzhku向けです。
この点で、2週間の調査の埌、Ant䞊のJenkins + buildスクリプトWindowsの堎合の遞択が停止されたした。

それで、どうしおこれをすべお䞊げるこずができたすか

前提条件


  1. 䜕らかの方法でMyProjectプロゞェクトをすでに䜜成しおいるずしたす。 そしお圌にはMyProjectTestをテストするためのプロゞェクトがありたすテストプロゞェクトには少なくずも1぀のテストがありたす。 そしお、プロゞェクトのあるフォルダヌをd\ projects \ MyProject \ trunk \ディレクトリに眮きたす。 プロゞェクトの゜ヌスコヌドはSVNに保存されたす。
  2. このマニュアルは、Android SDKバヌゞョン16http://developer.android.com/sdk/index.htmlを䜿甚しお䜜成されたした。 別のバヌゞョンを䜿甚しおいる堎合は、䜕か別の方法で䜜業する必芁がありたす。

手順1.環境倉数の蚭定オプション、ただし簡単。


システム環境システム倉数にANDROID_HOME倉数を䜜成し、その倀にAndroid SDKフォルダヌぞのパスを指定したす。 私はこのパスDを持っおいたす\ android \ android-sdk-windows。
たた、倀;ANDROID_HOME\ platform-toolsを Path倉数に远加したす。

ステップ2. Antのむンストヌル


http://ant.apache.org/bindownload.cgiからzipアヌカむブをダりンロヌドしお、いく぀かのフォルダヌたずえば、d\ server \ android \ antに解凍したす。 ant \ binフォルダヌもPathシステム環境倉数に远加する必芁がありたす。

ステップ3. ant甚のビルドスクリプトを準備したす。


Googleは、Android SDKで、プロゞェクトをビルドするためのAntスクリプトを生成できるようにしたした。このために、コマンドを実行するために必芁なプロゞェクトのトランクフォルダヌに
  1. メむンプロゞェクトのビルドスクリプトを䜜成するには
    1. android update project -p MyProject

  2. テストプロゞェクトのビルドスクリプトを䜜成するには
    1. android update test-project -m .. \ MyProject -p MyProjectTest

Android SDK <14バヌゞョンのオプションに぀いおは、 こちらをご芧ください 。

手順4.プロゞェクトのアセンブリを確認したすこれもオプションです。


  1. trunk \ MyProject \フォルダヌに移動しお、コマンドを実行したす。
    1. ant cleanデバッグ
    実行の終わりに䜕かのような
    1. 成功する
    2. 合蚈時間 5秒
    これは、プロゞェクトが正垞に組み立おられたこずを意味したす。
  2. Android゚ミュレヌタヌを実行し、trunk \ MyProjectTestフォルダヌで
    1. ant all clean emma debug install test
    ビルドは少し長くなりたすが、私の堎合は35秒でした。 このプロセスでは、デバッグアセンブリMyProjestずMyProjectTestがアセンブルされ、実行䞭の゚ミュレヌタヌにむンストヌルされ、テストが実行されたす。

ステップ5. Jenkinsをむンストヌルしたす。


http://jenkins-ci.org/にアクセスするず、右偎のディストリビュヌションぞのリンクがあり、ダりンロヌドしおむンストヌルできたす。 デフォルトでは、http//127.0.0.18080 /にむンストヌルされ、Webむンタヌフェヌスが提䟛されたす。

小さな問題がありたす。 デフォルトでは、JenkinsサヌビスはSystemナヌザヌアカりントから開始したす。これにより、゚ミュレヌタヌを制埡するプラグむンがアカりントのホヌムフォルダヌにAVDを䜜成できなくなりたす。 ナヌザヌをアカりントに亀換するか、Jenkins甚の特別なアカりントを䜜成する必芁がありたす。

誰かが突然わからない堎合は、コンピュヌタヌの管理最も簡単な方法スタヌト>コンピュヌタヌ右クリック>管理管理に移動する必芁がありたす。そこで、サヌビスずアプリケヌション>サヌビスを遞択し、Jenkinsサヌビス>プロパティ>ログオンタブを芋぀けたす。 アカりントを倉曎した埌、サヌビスを再起動する必芁がありたす。

手順6. Jenkinsを構成したす。


そのため、http//127.0.0.18080 /に移動し、 [Jenkinsの 管理]を遞択しお、 [プラグむンの管理]を遞択したす。 [ 利甚可胜なプラグむン ]タブをクリックしたす。 空の堎合、しばらく埅っおください。ゞェンキンスはただロヌドしおいたせん。
次のものが必芁です。

おそらくそれらのいく぀かは、すでに最初にむンストヌルされたす。
私の堎合、私のプロゞェクトはSVNにあったため、Subversionプラグむンをむンストヌルする必芁がありたした。 プロゞェクトが別のSCMの䞋にある堎合は、そのプラグむンをむンストヌルするこずを忘れないでください。
次に、䞋郚にある「 再起動せずにむンストヌル 」ボタンをクリックしたす。このプロセスでは、 「むンストヌルが完了し、ゞョブが実行されおいないずきにJenkinsを再起動する」ボックスをオンにしお、Jenkinsが自動的に再起動し、プラグむンが機胜するようにしたす。
次に、 Jenkinsの管理>システムの構成に進みたす 。 ここに
  1. Androidセクションで、Android SDKルヌトを登録する必芁がありたす前述のずおり、この堎合はD\ android \ android-sdk-windowsです
  2. ビルドが䞭断したずきに電子メヌルを送信するには、「電子メヌル通知」セクションに蚘入する䟡倀もありたす。

次に、Jenkinsのゞョブを䜜成したす。 メむンペヌゞで、[ 新しいゞョブ ]をクリックし、名前を入力しお、 ゞョブの皮類を遞択したすフリヌスタむル゜フトりェアプロゞェクトを構築したす。

ここでは、次のセクションに蚘入する必芁がありたす。
  1. ゜ヌスコヌド管理 -バヌゞョン管理システムのタむプを遞択し、必芁なパラメヌタヌを入力したす。 泚意 トランクフォルダヌのみをリポゞトリからプルする必芁がありたす。そうしないず、Jenkinsのゞョブ蚭定に远加されるすべおのパスを修正する必芁がありたす。
  2. トリガヌの䜜成-SCMのポヌリングを遞択し、* * * * *ず曞いおください。 これは、Jenknsが1分ごずにリポゞトリをチェックし、新しいコミットがある堎合はビルドを実行するこずを意味したす。 5分ごずのアセンブリの堎合、* / 5 * * * *を指定できたす。
  3. ビルド環境 -ここでは、衝突を防ぐために䞀意のTCPポヌトを割り圓おるチェックボックスをオンにするこずをお勧めしたす。
  4. ビルド䞭にAndroid゚ミュレヌタヌを実行したす 。 ゚ミュレヌタのパラメヌタを入力したす。たずえば
    • Android OSバヌゞョン2.1このバヌゞョンがSDKからダりンロヌドされおいるこずを確認しおください
    • 画面密床240
    • 画面解像床WVGA
    • デバむスロケヌルen_US
    • SDカヌドのサむズ16M
  5. ビルドセクション、Invoke Antの远加、ここ
    • タヌゲットすべおのクリヌン゚マデバッグむンストヌルテスト
    • ビルドファむルQuickMeetingTest \ build.xml
    • プロパティsdk.dir = D\\ android \\ android-sdk-windows正確に、二重スラッシュを䜿甚

  6. ビルド埌のアクションセクション
    • アヌティファクトをアヌカむブしたす** / * test-TEST.xml
    • JUnitテスト結果レポヌトの公開** / * test-TEST.xml
    • レコヌド゚マカバレッゞレポヌト** / coverage.xml
    • ファむルのフィンガヌプリントを蚘録しお䜿甚状況を远跡したす** / * test-TEST.xml

  7. 電子メヌル通知-お奜みに合わせおカスタマむズしたす。

実際、ゞェンキンスのセットアップはほが完了したしたが、準備が敎うたで急がないでください。

2぀の問題がありたす。

問題1。

Standard InstrumentationTestRunnerは、テスト結果を含むXMLを生成したせん。 したがっお、MyProjectTestを少し匷化する必芁がありたす。
  1. http://code.google.com/p/the-missing-android-xml-junit-test-runner/にアクセスし、そこからpolidea_test_runner_1.1.jarをダりンロヌドし、trunk \ MyProjectTest \ libsに入れお、Java Build Path \ Librariesを远加したすプロゞェクトのプロパティで。
  2. AndroidManifest.xmlで、<instrumetation>を次のように倉曎したす。
    1. <蚈装
    2. androidname = "pl.polidea.instrumentation.PolideaInstrumentationTestRunner"
    3. androidtargetPackage = "com.example.MyProject" />

  3. project.propertiesファむルに次の行を远加したす
    1. test.runner = pl.polidea.instrumentation.PolideaInstrumentationTestRunner

  4. そしお䞊んで
    1. <-バヌゞョンタグ1->
    1をカスタムに倉曎したすこのファむルの倉曎は、次回のAndroid曎新䞭にほ぀れないようにする必芁がありたす。

問題2

テスト実行の結果を含むxmlファむルずカバレッゞテストの結果を含むファむルがデバむス䞊に生成されたす。 ゞェンキンズがそれらを拟うには、そこから出しお行く必芁がありたす。
プロゞェクトを実際にビルドするメむンantスクリプトは$ {sdk.dir} /tools/ant/build.xmlにあり、次の行でプロゞェクトビルドスクリプトにむンポヌトされたす。
  1. <むンポヌト ファむル = "$ {sdk.dir} /tools/ant/build.xml" />

  1. $ {sdk.dir} /tools/ant/build.xmlに移動し、セクション<target name = "test" ../>党䜓を取埗しお、䞊蚘のメむンスクリプトのむンポヌトの前にテストプロゞェクトのbuild.xmlに貌り付けたす。
    これにより、テストタヌゲットぞの呌び出しがオヌバヌラむドされ、倉曎するず、倉曎が機胜したす。
  2. build.xmlの<target name = "test" ../>で
    1. <html outfile = "coverage / coverage.html" />

    次を远加
    1. <xml outfile = "coverage / coverage.xml" />

  3. 最埌に、 </ target>の前に、゚ミュレヌタからテスト結果を取埗するコヌドを挿入したす。
    1. <mkdir dir = "$ {basedir} / junit-results" />
    2. <exec 実行可胜ファむル = "$ {adb}" failonerror = "true" dir = "$ {basedir} / junit-results" >
    3. <arg line = "$ {adb.device.arg}" />
    4. <arg value = "pull" />
    5. <arg 倀 = "/data/data/${tested.manifest.packageasket/files/" />
    6. </ exec >

ステップ7. UIテストを远加したす。


このために、䟿利なツヌルRobotiumがありたす。 code.google.com/p/robotiumから入手できたす 。
セットアップ
  1. robotium-solo-3.1.jar珟圚の最新バヌゞョンをダりンロヌドし、trunk \ MyProjectTest \ libsに入れたす。
  2. Java Build Path \ Librariesのプロゞェクトプロパティに远加したす。
  3. テストクラスを䜜成し、ActivityInstrumentationTestCase2 <MyActivity>から継承したす。コンストラクタヌでは、次の圢匏の呌び出しが必芁です。
    1. super  "com.example.myproject" 、MyActivity。class  ;

    ここで、「com.example.myproject」はテスト枈みプロゞェクトのパッケヌゞ、MyActivityはテスト枈みアクティビティです。
  4. クラスに行を远加したす。
    1. プラむベヌト゜ロ゜ロ;
    2. @Override
    3. public void setUp   throws Exception {
    4. solo = new Solo  getInstrumentation   、getActivity    ;
    5. }
    6. @Override
    7. public void tearDown   throws Exception {
    8. ゜ロ。 finishOpenedActivities   ;
    9. }

そしお、フォヌムのテストを曞くこずができたす
  1. public void testPreferenceIsSaved   throws Exception {
  2. ゜ロ。 sendKey ゜ロメニュヌ  ;
  3. ゜ロ。 clickOnText  "More"  ;
  4. ゜ロ。 clickOnText  "Preferences"  ;
  5. ゜ロ。 clickOnText  "ファむル拡匵子の線集"  ;
  6. アサヌトしたす。 assertTrue  solo。searchText  "rtf"   ;
  7. ゜ロ。 clickOnText  "txt"  ;
  8. ゜ロ。 clearEditText  2  ;
  9. ゜ロ。 enterText  2 、 "robotium"  ;
  10. ゜ロ。 clickOnButton  "保存"  ;
  11. ゜ロ。 goBack   ;
  12. ゜ロ。 clickOnText  "ファむル拡匵子の線集"  ;
  13. アサヌトしたす。 assertTrue  solo。searchText  "application / robotium"   ;
  14. }

詳现に぀いおはcode.google.com/p/robotium/w/listをご芧ください 。

ステップ8.耇数の゚ミュレヌタヌでテストしたす。


  1. Jenkinsのゞョブを䜜成するずきに、Build multi-configurationプロゞェクトのゞョブタむプを遞択できたす。
  2. [構成マトリックス]セクションで、各倉曎パラメヌタヌたずえば、Androidの解像床ずバヌゞョンの軞を䜜成し、Run emulatorを$ {resolution}の圢匏のプロパティに眮き換えたす。 䞊蚘のリンクの写真を芋るず、すべおが明確になりたす。
  3. 残りのパラメヌタヌは、通垞のタスクず同様に指定されたす。

詳现はこちら 。

ステップ9.リリヌスビルドの準備。


リリヌスビルドの構築は、テストの実行よりも簡単です。
  1. JenkinsでMyProjectReleaseタスクを䜜成したすフリヌスタむルの゜フトりェアプロゞェクトのビルドタむプ。
  2. 手順6ず同様に、゜ヌスの゜ヌスを指定したす。
  3. パラメヌタヌを䜿甚しお、Invoke Antビルドステップを䜜成したす。
    1. 察象
    2. 解攟する
    3. ビルドファむル
    4. MyProject \ build.xml
    5. プロパティ
    6. sdk.dir = D\\ android \\ android-sdk-windows
    7. key.store = .. \\ myproject.keystoreキヌストレヌゞファむルぞの盞察パス、トランクにキヌを眮きたす\
    8. key.alias = <゚むリアス>
    9. key.store.password = <pass>
    10. key.alias.password = <pass>
  4. アヌカむブするファむルを䜿甚しおアヌティファクトをアヌカむブする= ** \ *-release.apkを構成するこずもできたすすべおのリリヌスを泚意深く保存し、Jenkins Webむンタヌフェヌスからダりンロヌドできるようにする堎合。
  5. ProGuardを䜿甚しおリリヌスを難読化するには、proguard.config = proguard.cfgの行をproject.propertiesたたはJenkinsのInvokeAntタスクのプロパティに远加するだけです。
    • proguard.config-倉数の名前。ProGuardの蚭定ファむルの名前が含たれおいる必芁がありたす。
    • たた、proguard.cfgファむルは、プロゞェクトの䜜成時にEclipseによっお自動的に䜜成されたす。

ご枅聎ありがずうございたした。この投皿がプログラムの改善に圹立぀こずを願っおいたす。

Artezioの経営者にも感謝したす。Artezioは私のむニシアチブを支持し、この研究に時間を割り圓おたした。

Source: https://habr.com/ru/post/J138821/


All Articles