プラグむンなしのNetBeans IDEでのAndroid開発。 パヌト2

Android甚のプログラミング甚にNetBeans IDEをセットアップする実隓を続けおいたす。 前回、NetBeansでプロゞェクトを䜜成し、ビルドシステムを構成し、アプリケヌションを自動的に起動するこずもできたした。 さらに、ビルドシステムが内郚からどのように構築されるかを少し芋たした。 蚘事の第2郚では、NetBeansでデバッグ、ラむブラリプロゞェクトの䜜成、プロゞェクトぞのラむブラリの远加、単䜓テストの操䜜を行う方法をさらに詳しく芋おいきたす。

デバッグ


興味深いこずに、NetBeansをデバッグするには2぀の方法がありたす。 最初の方法は、アリの魔術さえ必芁ずしたせん。 2番目のものは、セットアップが少し耇雑になりたすが、堎合によっおは䟿利になり、Eclipseのようになりたす。

メ゜ッド番号1

䜕かを始める前に、モニタヌず呌ばれるツヌルに぀いお考える必芁がありたす。 <Android-SDK>/toolsフォルダヌにありたす。 蚘事の最埌の郚分で曞いたように、これは既にPATHにあるはずなので、Windowsのコマンドラむンたたは怜玢バヌから盎接実行できたすが、もちろん誰もショヌトカットを䜜成する必芁はありたせん。 Eclipseで働いおいた人は、このツヌルのすべおのパネルをすぐに認識したす。 最も重芁なのは、logcatずDevicesです。

モニタヌが開いた埌、アプリケヌションがただ実行されおいない堎合は、アプリケヌションを起動し、デバッガヌに接続する必芁があるポヌトを確認する必芁がありたす。 ポヌトはアプリケヌションの反察偎に曞き蟌たれたす。 デフォルトでは、860x回線がありたす。 たた、アプリケヌションの1぀をクリックしおポヌト8700を割り圓おるこずもできたす。その埌、NetBeansでは、Attach Debuggerコマンドを䜿甚しおこのポヌトに接続する必芁がありたす。 Socket Attach、localhost、必芁なポヌトのパラメヌタヌを遞択したす...それだけです。冷静にデバッグを凊理できたす。

デバッガヌの接続

パネルのボタンには、最近入力した蚭定が蚘憶されるため、次回は䜕も入力する必芁もありたせん。

蚘憶された構成

それずは別に、ポヌトを調べるためだけにモニタヌが呌び出されるわけではないこずに泚意しおください。 たた、仮想マシンぞの接続の仲介者ずしおも機胜するため、仮想マシンが実行されおいない堎合、ポヌト8600にランダムに接続しおも、動䜜したせん。

このデバッグ方法には、い぀でも接続および切断できるずいう利点がありたす。 これは重芁です。接続されたデバッガヌでは、Dalvik VMの速床が著しく䜎䞋するためです。 これは重芁ではない堎合もありたすが、垞にではないため、デバッガヌなしでプログラムの特定の実行ポむントに到達する機胜は䞍芁な堎合がありたす。

特定のポむントでデバッガヌを接続するのに圹立぀別のツヌルがありたす。 もちろん、条件ごずにブレヌクポむントを䜜成できたすが、先ほど蚀ったように、接続されたデバッガヌでは、すべおがうたく機胜したせん。 したがっお、 Debug.waitForDebugger()の呌び出しをコヌドに挿入できたす。 プログラムがこのメ゜ッドに到達するずすぐに停止し、デバッガヌを接続した埌にのみ実行が継続されたす。

ただし、プログラムの開始時にデバッグを開始する必芁がある堎合がありたす。 前述のメ゜ッドに察しお同じ呌び出しを䜿甚するこずも、デバッグを開始するための2番目の方法ずしおNetBeansを構成するこずもできたす。

メ゜ッド番号2

2番目の方法は、Eclipseの堎合ず同じように動䜜したす。デバッグを開始するず、アプリケヌション自䜓が起動したす。 その埌、デバッガの接続を埅機し、その埌のみ実行を継続したす。 ここではNetBeansが圹立ちたす。 デバッグ CTRL+F5 しようずするず、NetBeansはAntファむルの生成を提案したす。これにより、プロゞェクトでの実行方法が通知されたす。 それが必芁です。 その埌、 ide-file-targets.xmlでide-file-targets.xml 、その内容を次のものに眮き換える必芁がありたす。

 <?xml version="1.0" encoding="UTF-8"?> <project basedir=".." name="KillerApp-IDE"> <import file="../build.xml"/> <target name="-load-props"> <property file="nbproject/debug.properties"/> </target> <target name="-check-props"> <fail unless="jpda.host"/> <fail unless="jpda.address"/> <fail unless="jpda.transport"/> </target> <target name="-init" depends="-load-props, -check-props"/> <target name="-launch-monitor"> <if> <condition> <not> <socket server="localhost" port="8700"/> </not> </condition> <then> <exec executable="${android.tools.dir}/monitor${bat}"/> <waitfor maxwait="20" maxwaitunit="second"> <socket server="localhost" port="8700"/> </waitfor> <sleep seconds="2"/> </then> </if> </target> <target name="-launch-debug" depends="-find-main-activity"> <exec executable="adb"> <arg line="shell am start -D"/> <arg line="${project.app.launcharg}"/> </exec> </target> <target name="debug-nb" depends="-init, -launch-monitor, -launch-debug"> <nbjpdaconnect address="${jpda.address}" host="${jpda.host}" name="${ant.project.name}" transport="${jpda.transport}" /> </target> </project> 

このファむルは、 debug.propertiesファむルからプロパティをロヌドするこずから開始したす。このファむルは、次の内容の同じフォルダヌにdebug.propertiesする必芁がありたす。

 jpda.host=localhost jpda.address=8700 jpda.transport=dt_socket 

これで、このファむルの機胜を理解できたす。 ここでの䞻なタスクはdebug-nb 。これはdebug-nb開始時にNetBeansが開始し、 -init 、 -launch-monitorおよび-launch-debugに䟝存したす。 -initには特に興味深いもの-initたせん。タスクはdebug.propertiesファむルから倉数をロヌドしおチェックするだけです。 しかし、 -launch-monitor既により䟿利です。結局、monitorがただ実行されおいなければ、このタスクを実行する必芁があり、このタスクはタスクを匕き継ぐだけです。 Antには、プログラムが特定のポヌトたたは非socketリッスンしおいるかどうかを確認できる優れた機胜がありsocket 。 この症状により、モニタヌが機胜しおいるかどうかを刀断できたす。 そうでない堎合は、実行しお埅機する必芁がありたすタスクのwait-for 。 開始埌も、モニタヌが接続の受け入れを開始するたで2秒間埅぀䟡倀がありたす機噚の特定の構成によっおは、倀をわずかに調敎する必芁がある堎合がありたす。

その埌、アプリケヌション自䜓を実行できたす。 前の蚘事で、コマンドラむンを䜿甚しおantからこれを既に実行したした。 これを行うには、コマンドadb shell am start -a android.intent.action.MAIN -n < >/<>たす。 今回は、コマンドをさらに詳しく分析したす。 adb shellは、Android内のコマンドラむンを盎接操䜜できるコマンドです。 amは、かなり印象的な機胜を備えたアクティビティマネヌゞャヌです。 それらに぀いおは公匏ドキュメントで読むこずができたす 。 必芁なアクティビティを開始するにはstartコマンドのみが必芁です。これは、 -nスむッチの埌に瀺され、 -aスむッチは、おそらく明らかになったように、意図を蚭定したす。

custom_rules.xmlファむルには、実行に必芁なパラメヌタヌ-find-main-activityを提䟛するタスクが既に含たれおいたす。 今回は、前回ず同じ方法でアプリケヌションを起動する必芁がありたすが、 -Dスむッチを䜿甚しお、アプリケヌションの起動埌すぐに動䜜を継続せず、最初にデバッガヌを埅機したす。

したがっお、これらのすべおの䞍正行為が完了した埌、 debug-nbを開始する準備が敎いたす。モニタヌが実行され、アプリケヌションが実行され、デバッガヌが埅機しおいたす。 nbjpdaconnectゞョブを䜿甚しお接続するためにのみ残りたす。 名前が瀺すように、このタスクはNetBeansに固有のものです。

私自身が2番目の方法を䜿甚する頻床は1番目の方法よりもはるかに少なくなっおいたす。これは、先ほど述べたように、Dalvikデバッガヌを接続するず、VMの動䜜が遅くなり、アプリケヌションのデバッグ領域に到達する時間が長くなるためです。 ただし、アプリケヌションの起動時に問題が発生する堎合は、このメ゜ッドが必芁です。

ラむブラリの远加ずラむブラリプロゞェクトの䜜成


ラむブラリは、プリコンパむルされたjarファむルにするこずも、プロゞェクトに含める前にコンパむルする必芁がある別のAndroidプロゞェクトにするこずもできたす。 それぞれ異なる方法で接続されおいたす。

プリコンパむルされたファむルの堎合、手順はほずんどありたせん。

  1. メむンプロゞェクトフォルダヌのlibsフォルダヌにファむルをドロップする必芁がありたす。
  2. [Java゜ヌスクラスパス]タブのプロゞェクトプロパティで、ファむルぞのパスを远加する必芁がありたす。 実際、これを行う必芁はありたせんが、IDEはこのラむブラリのコヌドを教えおくれないため、IDEを䜿甚する利点は無効になりたす。

ラむブラリプロゞェクトの堎合、すべおが少し耇雑です。 コマンドで远加できたすこれが公匏の方法ですか、蚭定ファむルの行で远加できたす。 公匏の方法が奜きな人には、次のコマンドが必芁です。

android update project -p < > -l < >


たずえば、v7 appcompatサポヌトラむブラリを远加しおみたしょう。これは、3.0より前のバヌゞョンのAndroidでアクションバヌを衚瀺したい人向けにGoogleが䜜成したものです。 远加のリ゜ヌスがあるため、プリコンパむルされたjarファむルずしおではなく、ラむブラリプロゞェクトずしお配垃されたす。 メむンプロゞェクトず同じフォルダにあるずしたしょう。

android update project -p KillerApp -l ../AndroidCompatibilityPackage-v7-appcompat


それだけです すでにプロゞェクトをコンパむルできたす。 project.propertiesファむルを芋るず、 この構成ファむルに次の行がありたす。

android.library.reference.1=../AndroidCompatibilityPackage-v7-appcompat


実際、そのチヌムが行ったこずはそれだけです。 たったく同じ方法で、コマンドなしで新しいラむブラリを远加できたす。䞻なこずは、ラむブラリ番号を1぀増やすこずを忘れないこずです android.library.reference.2 、 android.library.reference.3など。

もちろん、プリコンパむル枈みファむルず同様に、プロゞェクトで蚀及されおいるラむブラリプロゞェクトの゜ヌスフォルダヌず、䜿甚するラむブラリ䜿甚する堎合を忘れずに远加する必芁がありたす。 ぀たり、ラむブラリプロゞェクトのlibsフォルダヌにsrc 、 genおよびjarファむルフォルダヌを远加する必芁がありたす。

独自のプロゞェクトを䜜成する堎合はどうなりたすか ラむブラリプロゞェクトの䜜成は、通垞のプロゞェクトの䜜成ずたったく同じですが、䟋倖が少し異なりたす。

android create lib-project -n < > -t android-< API> -p < > -k < >


䞻な違いは、 project代わりにlib-projectが導入されおいるこずです。 さらに、ラむブラリを盎接起動する必芁がないため、メむンアクティビティの名前を指定する必芁はありたせん。 さらに、プロゞェクトの䜜成は通垞のプロゞェクトず同様に継続されたす。

テスト甚のプロゞェクトの䜜成


ご存知のように、残念ながらAndroidでは、ナニットテストをプロゞェクトに盎接埋め蟌むこずはできたせん。このアクションのために別のプロゞェクトを䜜成する必芁がありたす。 ラむブラリプロゞェクトの䜜成ず同様に、すべおの手順は通垞のプロゞェクトの䜜成ず非垞に䌌おいたすが、もう少し埮劙です。 次のコマンドが必芁です。

android create test-project -p < > -n < > -m < >


通垞、テスト甚のプロゞェクトはメむンプロゞェクトのサブフォルダヌに䜜成されるため、メむンプロゞェクトのフォルダヌからこのようなプロゞェクトを䜜成したす。

android create test-project -p tests -n KillerAppTest -m ..


さらに、通垞のプロゞェクトの堎合ず同じ方法で、NetBeansで新しいプロゞェクトを䜜成し続けるこずができたす。 ただし、今回は、3番目のステップで、Antゞョブを異なるメニュヌ項目に割り圓おるずきにtest項目を残すこずができたす。 ただし、 Run Projectからは、ここで起動するものがないdebug install 、 launchを削陀しおdebug installのみを残す䟡倀がありたす。

テストプロゞェクトチヌム

通垞のプロゞェクトでは、その埌、アプリケヌションの起動に関連するファむルを远加したしたが、今回は必芁ありたせん。 しかし、できるこずは、テストのデバッグず遞択的な実行に圹立぀ファむルを远加するこずです。

最初に、NetBeansで远加のゞョブ甚のファむルを生成する必芁がありたす。 個々のファむルの実行、個々のファむルのデバッグずデバッグに関心がありたす。 これらのアクションはすべお、 CTRL+F6 、 CTRL+F5およびCTRL+SHIFT+F5抌すこずで生成できたす。 その埌、2番目の方法でデバッグを通垞のプロゞェクトに远加する堎合、 ide-file-targets.xmlのみがわずかに異なるため、 nbprojectフォルダヌにファむルを再床アップロヌドする必芁がありたす。 ファむルの先頭は通垞のプロゞェクトをデバッグする堎合ず同じなので、ファむル党䜓をコピヌしたせん。 興味がある人はBitBucketでそれを芋るこずができたす。 しかし、その埌、他のタスクがありたす

 <target depends="-setup" name="run-selected-file-in-src"> <fail unless="run.class">Must set property 'run.class'</fail> <echo level="info">Running tests in ${run.class}...</echo> <run-tests-helper> <extra-instrument-args> <arg value="-e"/> <arg value="class"/> <arg value="${run.class}"/> </extra-instrument-args> </run-tests-helper> </target> <macrodef name="launch-debug-and-connect"> <element name="debugged-class" optional="yes"/> <sequential> <parallel> <run-tests-helper> <extra-instrument-args> <debugged-class/> <arg value="-e"/> <arg value="debug"/> <arg value="true"/> </extra-instrument-args> </run-tests-helper> <sequential> <sleep seconds="5"/> <nbjpdaconnect address="${jpda.address}" host="${jpda.host}" name="${ant.project.name}" transport="${jpda.transport}" /> </sequential> </parallel> </sequential> </macrodef> <target depends="-setup, -init, -launch-monitor" name="debug-selected-file-in-src"> <fail unless="debug.class">Must set property 'debug.class'</fail> <echo level="info">Debugging tests in ${debug.class}...</echo> <launch-debug-and-connect> <debugged-class> <arg value="-e"/> <arg value="class"/> <arg value="${debug.class}"/> </debugged-class> </launch-debug-and-connect> </target> <target depends="-setup, -init, -launch-monitor" name="debug-nb"> <launch-debug-and-connect/> </target> 

個々のテストを実行するにはrun-selected-file-in-srcタスクが必芁です。 run-tests-helperマクロを䜿甚したす。このマクロは、远加のパラメヌタヌを䜿甚しおAndroidビルドシステムで定矩されおいたす。 実際、このマクロが行うこずは、プログラムをテストするためのパラメヌタヌを䜿甚しおadb shell am instrumentコマンドを実行するこずadb shell am instrument はい、これもアクティビティマネヌゞャヌです。 匕数-e class < >をコマンド起動に远加しお、デバむスがすべおのテストを無差別に実行するのではなく、特定のファむルに焊点を合わせるようにしたす。

その埌、デバッグを実行する必芁があるタスクがありたした。 そのためには、たずテストを開始し、デバッガヌを埅機するように指瀺しおから接続する必芁がありたす。 しかし、ちょっずした問題がありたす。テストはロックから始たり、別のタスクを実行する必芁がありたす。 異なるタスクを䞀緒に実行するparallelタスクは、私たちを救いたす。 結果はマクロずしおフレヌム化されるため、テストが呌び出されるパラメヌタヌを制埡できたす。 したがっお、デバッグタスクは、必芁に応じお、远加のパラメヌタヌを䜿甚しお単玔に呌び出したす。

たずめ


これで、実行したこずを芁玄できたす。 党䜓ずしお、非垞に倚くの可胜性が埗られたした。


プロゞェクトは、コマンドラむンからの1぀のコマンドず、各プロゞェクトに共通するいく぀かの远加ファむルによっお䜜成されるため、人件費の点ではすべおが非垞に単玔です。 EclipseたたはAndroid Studioにすでにあるものず比范しお䞍足しおいるもの


XMLファむルの線集はそれほど重芁ではありたせんが、もちろん、WYSIWYG゚ディタヌがなければ、むンタヌフェヌスを線集するのは非垞に悲しいこずです。 したがっお、私は個人的にプロゞェクトをEclipseにむンポヌトし、必芁に応じおそこでむンタヌフェむスを線集したす。

たた、このようなツヌルの適甚可胜性に぀いおも少し蚀いたいず思いたす。 前の蚘事ぞのコメントで、同様の質問が生じたので、もう䞀床思い出したす。これは実隓です。 IDEに䟝存しないantを介した公匏のビルドシステムがある堎合、Androidで動䜜するように蚭蚈されおいないツヌルをセットアップするために抵抗するこずはできず、それを䜿甚しようずするこずは困難でした。

さらに、実際には、このシステムを䜿甚するためにNetBeansを䜿甚する必芁はありたせん。 プロゞェクトを蚭定した埌、コマンドラむンたずえば、 ant debug install launch を入力するだけで、プロゞェクトをビルドおよび実行できたす。 たた、 自䜜のスクリプトアセンブリずは異なり、完党なアセンブリになりたす。ADTを備えたEclipseずたったく同じです。AIDL、BuildConfig、RenderScript、zipalign、ProGuardなどのすべおのむンタヌフェむスを生成したす。 NetBeansでのプログラミングにそれを䜿甚するこずに関しおは、もちろんこれはすでにアマチュアです。 しかし、いずれにせよ、私は個人的にこの実隓の実斜に非垞に興味があり、他の人がそれに぀いお読むこずに興味を持っおいるこずを願っおいたす。

いく぀かのリンク


  1. BitBucket䞊のすべおのファむル
  2. プラグむンなしのNetBeans IDEでのAndroid開発。 パヌト1

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


All Articles