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

通垞、開発者にはお気に入りのツヌルがあり、他のツヌルよりも䜿いやすいです。 しかし、プラットフォヌムは、開発者が自分が望むほど䟿利ではないツヌル、たたは単に䜕かに合わないツヌルを遞択するように匷制するこずがありたす。 Googleがこの特定の゚ディタヌ甚の公匏プラグむンであるADTを開発するこずを決定したため、埓来のAndroidアプリケヌションはEclipseを䜿甚しお䜜成されおいたした。 その結果、それを䜿甚しなかった開発者は、意地悪なこずに、それをマスタヌする必芁がありたした。

幞いなこずに、Googleは利甚可胜なIDEに関係なく機胜するビルドシステムも提䟛しおいたす。 これは、Androidアプリケヌションで動䜜するように任意の゚ディタヌを構成できるこずを意味したす。 個人的には、NetBeans IDEでJavaコヌドを䜜成するこずを奜み、このためにJavaコヌドを構成する方法に぀いお話したいず思いたす。 nbandroidなどのプラグむンがありたすが、愛奜家によっお時折開発されるため、NetBeansの柔軟性を掻甚し、゚ディタヌから盎接公匏のビルドシステムを䜿甚するこずは理にかなっおいたす。


新しいプロゞェクトを䜜成する


残念ながら、新しいプロゞェクトを䜜成するずきは、Eclipseでできる以䞊のこずを行う必芁がありたすが、これを行う必芁があるのは䞀床だけです。 プロゞェクトの䜜成は、3぀のステップで行われたす。

  1. コマンドラむンからのアセンブリ甚ファむルの䜜成。
  2. IDEでプロゞェクトを䜜成したす。
  3. 远加のコマンドを远加奜みに合わせお。

アセンブリ甚のファむルの䜜成

たず、コマンドラむンから新しいプロゞェクトを䜜成する必芁がありたす。 フォルダヌ<Android-SDK>/tools既にPATHあるずいう前提から進めたす。 プロゞェクトは次のコマンドで䜜成されたす。

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

念のため、APIレベルはプロゞェクトのコンパむルに䜿甚するものであるず説明したす。 ぀たり、プロゞェクト党䜓がAPIレベル10向けに蚭蚈されおいるが、レベルが15以䞊のデバむスでのみ䜿甚される機胜がある堎合は、正確に15を蚭定する必芁がありたす。 ずころで、 AndroidManifest.xmlでは、この15は衚瀺されず、最䜎限必芁なAPIレベルは10のみです。

プロゞェクトがAndroid 4.0.3これはレベル15甚に䜜成され、KillerAppず呌ばれるずしたす。 次に、次を入力する必芁がありたす。

android create project -n KillerApp -t android-15 -p KillerApp -k com.damageinc.killerapp -a MainActivity

このコマンドの埌、必芁なすべおのファむルがプロゞェクトフォルダヌに芋぀かりたした。構成ファむル、そしお最も重芁なのはビルドファむルです。 これでコマンドラむンでの䜜業が完了し、今埌は衚瀺されなくなりたす。 今ではIDEで思い起こさせるこずが残っおいたす。

IDEでプロゞェクトを䜜成する

  1. NetBeansで新しいプロゞェクトを䜜成する画面には、 Java Free-Form Projectアむテムが必芁です。このアむテムを䜿甚しお、IDEでアセンブリファむルを取埗する堎所を説明したす。

    1.新しいプロゞェクト

  2. 次に、プロゞェクトフォルダを遞択する必芁がありたす。 NetBeans自䜓がビルドファむルを怜玢し、プロゞェクトの名前を刀断するため、フォルダヌを遞択した埌、次の画面に安党に移動できたす。

    2.名前ず堎所

  3. そしお、プロゞェクトをアセンブルするずきにIDEが起動するものを認識できるように、ビルドタスクを正しく登録する必芁がありたす。 debugによりシステム䞊にビルドしたす。 少し奇劙に芋えたすが、この名前の理由は非垞に単玔です。このタスクは、デバッグ甚のアセンブリを䜜成し、察応する蚌明曞で眲名したす。 したがっお、 リリヌスタスクがありたすが、私たちはただそれを達成しおいたす。 このケヌスでプロゞェクトを開始するずは、アセンブリずむンストヌルを意味したす。぀たり、アセンブリ埌にむンストヌルタスクを実行するこずを意味したす。 暙準システムにはないlaunchタスクもありたすが、私たちは自分でそれを行いたす。 クリヌニングは、予想通り、 きれいで、別のテストプロゞェクトを通じおAndroidでテストする必芁があるため、そのフィヌルドの内容を安党に消去できたす。

    3.アクションのビルドず実行

  4. 次の画面では、 R.javaファむルがこのフォルダヌにあるため、 genフォルダヌを゜ヌスフォルダヌに远加する必芁がありたす。

    4.゜ヌスパッケヌゞフォルダ

  5. 次に、コヌドヒントをセットアップしたす。 たず、゜ヌスフォルダヌフォルダヌの分離をオフにするこずが重芁です。そうしないず、IDEはRファむルが別のフォルダヌにあるため、プログラムのコヌドで蚀及すべきではないず刀断したす。 たた、ラむブラリのリストに正しいAndroidプラットフォヌムを远加する必芁がありたす。この堎合は<Android-SDK>/platforms/android-15/android.jarです。

    5. Java゜ヌスのクラスパス

  6. 最埌に、最埌のステップであるbin/classesフォルダヌを远加しお、コンパむルされたコヌドを探す堎所をIDEが認識できるようにしたす。 原則ずしお、この手順は䞍芁であり、安党に気にするこずはできたせん。 ただし、完党を期すために、NetBeansで、どのファむルが最近倉曎され、ただコンパむルされおいないかを瀺すようにしたす。

    6.プロゞェクトの出力


远加のコマンドを远加する

実際、最埌のステップの埌は、これ以䞊䜕もできたせん。 プロゞェクトが䜜成され、すでに正垞に進行しおいたす。 しかし、あなたはさらに進んで、倚くのアメニティを䜜るこずができたす。 プロゞェクトフォルダヌにcustom_rules.xmlファむルを配眮し、 custom_rules.xmlたす
必芁なアリのタスク
 <project name="CustomRules"> <target name="release-and-save" depends="release"> <xpath input="AndroidManifest.xml" expression="/manifest/@android:versionName" output="manifest.versionName" default="test"/> <xpath input="AndroidManifest.xml" expression="/manifest/@android:versionCode" output="manifest.versionCode" default="test"/> <copy file="${out.final.file}" tofile="releases/${ant.project.name}-release${manifest.versionCode}-${manifest.versionName}.apk" overwrite="true"/> <copy file="${obfuscate.absolute.dir}/mapping.txt" tofile="releases/mapping-release${manifest.versionCode}.txt" overwrite="true"/> </target> <target name="rebuild-resources" depends="-set-debug-mode, -build-setup, -code-gen" /> <target name="-find-main-activity"> <xpath input="AndroidManifest.xml" expression="/manifest/@package" output="project.app.package" default="test"/> <xpath input="AndroidManifest.xml" expression="/manifest/application/activity[intent-filter/category/@android:name = 'android.intent.category.LAUNCHER'][1]/@android:name" output="project.app.mainactivity" default="test"/> <if> <condition> <matches pattern="\..+|[^\.].*\..*[^\.]" string="${project.app.mainactivity}"/> </condition> <then> <property name="project.app.mainactivity.qualified" value="${project.app.mainactivity}"/> </then> <else> <property name="project.app.mainactivity.qualified" value=".${project.app.mainactivity}"/> </else> </if> <property name="project.app.launcharg" value="-a android.intent.action.MAIN -n ${project.app.package}/${project.app.mainactivity.qualified}"/> </target> <target name="launch" depends="-find-main-activity"> <exec executable="adb"> <arg line="shell am start"/> <arg line="${project.app.launcharg}"/> </exec> </target> </project> 

これらの3぀のタスクにより、非垞に䟿利なこずができたす。 rebuild-resources䜿甚するず、 Rファむルを生成できたすEclipseでは、倚くの堎合、どこかで消えたり、時間どおりに曎新されたせん。 launchはアプリケヌションを起動する機䌚を提䟛し、 release-and-saveは最終バヌゞョンをビルドするずきにProGuardメ゜ッドマップずずもに適切な名前で別のフォルダヌに保存されるようにしたす。 たた、このような行を远加しお、ビルド埌に通知が再生されるようにしたす。

 <target name="-post-build"> <sound> <success source="C:\Windows\Media\Windows Notify.wav"/> </sound> </target> 

もちろん、この特定のサりンドオプションはWindowsにのみ適しおいたす;他のOSでは、別のファむルを遞択する必芁がありたす。 今では、 これらのタスクをNetBeansのコンテキストメニュヌに远加したす 。 [ビルドず実行]タブのプロゞェクトプロパティで、最埌にlaunchタスクを䜿甚しお[プロゞェクトの実行]アむテムを既に確定したした。 コンテキストメニュヌのナヌザヌ芁玠に、実行したばかりの残りのタスクを远加したした。

ビルドしお実行

プロゞェクトのコンテキストメニュヌには、必芁なコマンドが倚数ありたす。 ゚ミュレヌタヌを起動するか、スマヌトフォンを接続し、Runを実行しお、すべおがどのように収集しお起動するかを確認できたす。 最埌の仕䞊げを行い、最終バヌゞョンをビルドするずきに難読化を有効にしお、 project.propertiesファむルの行のコメントを倖したす 。

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

たた、 ant.propertiesには、最終アセンブリに眲名するための行をant.properties䟡倀がありたす 。

key.store = < >
key.alias = < >

これでプロゞェクトの準備が敎いたした。

Androidでのビルドシステムの仕組み


実際、Androidにはすでに2぀のビルドシステムがありたす。1぀はantに基づいおおり、もう1぀はGradleに基づいおいたす。 この特定のケヌスでは、antシステムを䜿甚したす。 Gradleを備えたシステムは、Eclipse- Android Studioに代わる新しい゚ディタヌず䞊行しお開発されおいたす。 このビルドシステムは、別の蚘事に圹立぀ず思いたす。

antに戻るず、次のファむルがプロゞェクトフォルダヌにありたす。


ここで最も重芁なファむルは、もちろんbuild.xmlです。 実際、これはメむンシステムの小さな尟にすぎず、プロパティ拡匵子を持぀ファむルからプロパティをロヌドし、SDK自䜓にあるメむンシステムを呌び出すだけです。

local.propertiesは、SDKを含むフォルダヌの堎所ずいう1぀のプロパティのみが含たれたす。 このファむルは 、個々のマシンに固有の蚭定が含たれおいるため、バヌゞョン管理システムの䟋倖のリストに含める必芁がありたす。 たずえば、Windowsでは、このファむルには次の行が含たれたす。

sdk.dir=C:\\Android-SDK

実際、このファむルの倉数の内容を䜿甚しおANDROID_HOME環境ANDROID_HOMEを䜜成し、ファむルをゎミ箱に安党に送信できたす。 ずりわけ、この埌NetBeansを再起動するこずを忘れないでください。

すでにant.properties満たしant.propertiesいるため、キヌストアの堎所などの補助倉数がそこに保存されたす。 project.propertiesファむルもありたす。 プロゞェクトの䜜成で説明した手順の埌、プロゞェクトの察象ずなるAndroid APIのレベル、およびProGuard構成ファむルの怜玢堎所に関する行のみがありたす。 プロゞェクトにラむブラリを远加するず、それらに関する行が衚瀺されたす。

最埌に、 proguard-project.txtファむルには、その名前が瀺すずおり、ProGuardの指瀺が含たれおいたす。 最初は空ですが、SDKフォルダヌには事前に蚘録された構成があるため、ProGuardがアむドル状態になるわけではありたせんProGuardに぀いおコメントを倖した行を芚えおいたすか たずえば、私は個人的に、ずりわけ、行を远加するのが奜きです

-renamesourcefileattribute MyProject
-keepattributes SourceFile,LineNumberTable

さらに、プロゞェクト内のどのコヌド行がドロップたたは䟋倖を匕き起こすかに぀いおの正確なデヌタがあるため、゚ラヌレポヌトの収集に圹立ちたす。

たた、 build.xmlはcustom_rules.xmlファむルをロヌドしたす存圚する堎合。必芁なすべおのタスクを远加したす。 もう䞀床タスクを芋おみる䟡倀がありたす。

 <target name="rebuild-resources" depends="-set-debug-mode, -build-setup, -code-gen" /> 

これらの行は、SDKビルドシステムから単玔に取埗されたす。 残念ながら、それらは別のタスクで取り出されないので、自分でやらなければなりたせんでした。 他の2぀のタスクを芋るずさらに興味深いです。

 <target name="release-and-save" depends="release"> <xpath input="AndroidManifest.xml" expression="/manifest/@android:versionName" output="manifest.versionName" default="test"/> <xpath input="AndroidManifest.xml" expression="/manifest/@android:versionCode" output="manifest.versionCode" default="test"/> <copy file="${out.final.file}" tofile="releases/${ant.project.name}-release${manifest.versionCode}-${manifest.versionName}.apk" overwrite="true"/> <copy file="${obfuscate.absolute.dir}/mapping.txt" tofile="releases/mapping-release${manifest.versionCode}.txt" overwrite="true"/> </target> 

XPathを䜿甚しお、ここでバヌゞョンパラメヌタを取埗し、それらを䜿甚しおファむル名を生成したす。 通垞のアリにはXPathのサポヌトはありたせんが、どこから来たのですか Googleは、Android SDKに独自のツヌルを远加しお、アプリケヌションの操䜜をより䟿利にしたした。 それらのツヌルの倚くは、SDKから特定のファむルを実行するこずになりたすが、 xpathなど、アセンブリファむルの䜜成を容易にするものもありたす。 たずえば、もう1぀の䟿利なツヌルはif 。これは、プログラミング蚀語の察応する構成が行うこずずたったく同じこずを行いたす。条件に応じおタスクを実行したす。

2番目のタスクもxpath䜿甚したすが、今回はタスクがもう少し耇雑です

 <target name="-find-main-activity"> <xpath input="AndroidManifest.xml" expression="/manifest/@package" output="project.app.package" default="test"/> <xpath input="AndroidManifest.xml" expression="/manifest/application/activity[intent-filter/category/@android:name = 'android.intent.category.LAUNCHER'][1]/@android:name" output="project.app.mainactivity" default="test"/> <if> <condition> <matches pattern="\..+|[^\.].*\..*[^\.]" string="${project.app.mainactivity}"/> </condition> <then> <property name="project.app.mainactivity.qualified" value="${project.app.mainactivity}"/> </then> <else> <property name="project.app.mainactivity.qualified" value=".${project.app.mainactivity}"/> </else> </if> <property name="project.app.launcharg" value="-a android.intent.action.MAIN -n ${project.app.package}/${project.app.mainactivity.qualified}"/> </target> <target name="launch" depends="-find-main-activity"> <exec executable="adb"> <arg line="shell am start"/> <arg line="${project.app.launcharg}"/> </exec> </target> 

むンテントフィルタヌでカテゎリandroid.intent.category.LAUNCHERを定矩するアクティビティを芋぀ける必芁がありたす。これが、メニュヌに衚瀺されるアクティビティをAndroidが定矩する方法です。 いく぀かある可胜性がありたすがこれはたれですが、タスクはそれらの最初を取りたす。

別の障害がありたす。 アクティビティは、 AndroidManifest.xmlフルネヌムの゚ントリによっお宣蚀されるか、アクティビティがメむンパッケヌゞにある堎合は、前にドットが付いたクラスの名前によっおのみ宣蚀されたす。 少なくずもそれはドキュメントが蚀っおいるこずです。 唯䞀の問題は、Eclipseやその他のツヌルを䜿甚するず、ポむントを省略しお、メむンパッケヌゞにあるアクティビティの名前を簡単に蚘述できるこずです。 Androidはそのような配慮に苊しんでいたすが、アプリケヌションを起動するチヌムはもういたせん。 十分でない堎合は、ポむントを远加する必芁がありたす。 ここで、先ほど述べたifタスクず正芏衚珟が圹立ちたす。

たた、音を再珟する非垞に簡単な䜜業でした。 SDKのビルドファむルからひっくり返る6぀のフックのいずれかを䜿甚したした。


フックは、プログラムのビルド段階を反映したす。ラむブラリのコンパむル、コヌドの生成RenderScript、aidl、R、BuildConfig、プロゞェクトのコンパむル、APKのパッキング、眲名、 zipalignです。 したがっお、これらすべおのアクションが始たる前に-pre-buildが呌び出され、プロゞェクト自䜓をコンパむル-pre-compile盎前に-pre-compileが呌び出され、コンパむルずパッケヌゞングの間で-post-buildパッケヌゞ化の埌、眲名前に-post-buildは最埌に呌び出されたす。 -pre-cleanが呌び出されたずき、名前から明らかだず思いたす。

結論の代わりに


今日は、最も重芁なこず、぀たりプロゞェクトの䜜成に泚目したした。 実際、この埌、プロゞェクトは非垞に機胜しおいるので、座っおコヌドを曞くこずができたす。 ただし、プロゞェクトにラむブラリを远加し、デバッグし、テストを䜜成する必芁がありたす。 これらのアクションはすべお、NetBeansでもうたく機胜したす。 これを行う方法に぀いおは、蚘事の次の郚分で説明したす。

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


All Articles