プラグインなしの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でもうまく機能します。 これを行う方法については、記事の次の部分で説明します。



All Articles