web-dev-qa-db-ja.com

Android St​​udioプロジェクト構造(v.s. Eclipseプロジェクト構造)

私はAndroid開発を学ぼうとしていますが、最初はEclipseとAndroid St​​udioの間の異なるプロジェクト構造に混乱しています。これにより、Eclipse向けに設計されたチュートリアルに従うことが難しくなります。これらの違いが存在する理由を誰にでも教えてもらえますか?それらは存在すべきですか?

たとえば、2つの異なるIDEでR.Javaファイルを見つけると、パスは次のようになります。

Eclipse: app\gen\com.example.app\R.Java

Android Studio: app\build\source\r\debug\com.example.app\R.Java

これらのパスが異なるのはなぜですか? R.JavaがAndroid St​​udioのデバッグフォルダーにあるのはなぜですか?これは早い段階でいくつかのエラーにつながります。誰かがこれらの違いについて洞察を持っているなら、私はそれらを感謝します。

108
Jesse

謎:Android Studioのプロジェクト構造とビルドシステム

これがGradle Build Systemによるものかどうかはわかりませんが(私はそう思います)、これまでに理解したことを説明します。

更新4: 2014/09/11追加チートシートBuildTypesFlavors、およびVariantsについて(最終的にこれを書く自信があります:D)
pdate 3: 2014/09/11比較ワークスペースとプロジェクトを正確に更新しました
更新2: 2014/04/17 ASプロジェクト構造に詳細を追加
更新1: 2013/07/29 IntelliJプロジェクト構造を追加

IntelliJのプロジェクト構造(最後に表示)は、Androidプラグインを使用したIntelliJ用です。ただし、Android Studioのプロジェクト構造は次のように分割されています。

構造:プロジェクトとモジュール

モジュール inAndroid Studioproject inEclipse

project inAndroid Studioworkspace inEclipse(to正確に、相互依存プロジェクトを含むワークスペース)

ドキュメント から(Android StudioはIntellij IDEAに基づいています):

IntelliJ IDEAで何をするにしても、プロジェクトのコンテキストでそれを行います。プロジェクトは、完全なソフトウェアソリューションを表す組織単位です。

完成した製品は、一連の個別の分離されたモジュールに分解される場合がありますが、それらをまとめてより大きな全体に結び付けるプロジェクト定義です。

Androidの場合、アプリごとに1つのプロジェクト、ライブラリごと、テストアプリごとに1つのモジュールを意味します。

同じプロジェクト内で複数のアプリをビルドしようとすると、複数の問題が発生します。それは可能ですが、(私がやったように)試してみると、ほとんどすべてがプロジェクトごとに1つのアプリで動作するように設計されていることがわかります。

たとえば、「プロジェクトを再構築」するオプションがありますが、これは複数のアプリでは意味がなく、他の多くのプロジェクト設定は役に立たず、組み込みのVCSシステムは複数のリポジトリがある場合はうまくありません。

構造:フォルダ構造

Android Studio Project Structure

最上位フォルダー

1.主なプロジェクト

これは完全になりますプロジェクトコンテキストEclipse Land:ワークスペースに似ていますが、プロジェクトに関連するものに限定されます)。例:指定したアプリケーションの名前がHelloWorldProjectの場合はHelloWorld

2. .idea

これは、プロジェクト固有のメタデータがAndroid Studio(AS)によって保存される場所です。 (Eclipse Land:project.propertiesファイル)

3.プロジェクトモジュール

これが実際のプロジェクトです。例:HelloWorld指定したアプリケーション名がHelloWorldの場合

4. gradle

これは、gradleビルドシステムのjarラッパー、つまり、このjarがASがWindows(私の場合はOS)にインストールされたgradleと通信する方法です。

5.外部ライブラリ

これは実際にはフォルダではなく、参照ライブラリ(Eclipse Land:参照ライブラリ)が表示される場所です。ターゲットプラットフォームの表示場所などは次のとおりです。

[サイドノート:これは、Eclipse Landの多くが参照ライブラリを削除し、プロジェクトプロパティを修正して参照エラーを修正した場所です。覚えていますか?]

プロジェクトフォルダの詳細

これは、上記のリストの番号3です。次のサブディレクトリがあります

1.ビルド

これには、makeプロセスのすべての完全な出力、つまり、classes.dex、コンパイルされたクラスおよびリソースなどが含まれます。

Android Studio GUIでは、いくつかのフォルダーのみが表示されます。重要な部分は、R.Javaがここにあるの下にあるbuild/source/<flavor>/r/<build type(optional)>/<package>/R.Java

2.ライブラリ

これは、Eclipse landにも表示される標準のlibsフォルダーです

3. src

ここでは、Eclipse LandJavaフォルダーとresフォルダーに対応するsrcフォルダーとresフォルダーのみが表示されます。これは私見の簡素化を歓迎します。

モジュールに関する注意:

モジュールはEclipse Landプロジェクトのようなものです。ここでは、1つのアプリケーションプロジェクト(上記のリストのモジュール#3)と、アプリケーションプロジェクトが依存する複数のライブラリプロジェクト(グローバルプロジェクトフォルダー(上記のリストの#1)の下の個別のモジュール)があるという考えです。これらのライブラリプロジェクトを他のアプリケーションで再利用する方法については、まだわかりません。

[サイドノート:再編成全体には、srcフォルダーの簡素化などの利点がありますが、非常に複雑です。複雑さの主な原因は、非常に非常にこの新しいプロジェクトレイアウトに関する薄いドキュメントです。]

新しいビルドシステム

新しいビルドシステムのユーザーガイド

フレーバーとbuildTypesなどの説明-hullabalooとは何ですか?

フレーバーとbuildTypesのCheatSheet

BuildType:debugおよびreleaseは、すべてのプロジェクトでデフォルトでbuildTypesを使用できます。 SAME CODEをビルド/コンパイルして、異なるAPKを生成するためのものです。たとえば、release APKでproguard(難読化用)を実行し、キー(デバッグキーに対して)で署名し、最適化(proguardまたは他のツールを介して)を実行し、少し異なるpackageNamesを使用します(releaseにはcom.company.productを使用します) debugcom.company.product.debugなど)。また、releaseビルドでのデバッグフラグ(BuildConfig.DEBUG)を使用して、logcatへのロギングをオフにします(アプリが遅くなるため)。これにより、開発中のdebugビルドが高速化されますが、Playストアに配置するための最適化されたreleaseビルドも作成されます。

製品フレーバー:デフォルトのフレーバーはありません(正確には、デフォルトのフレーバーは空白/名前なしです)。 Flavorsは、無料バージョンまたは有料バージョンの場合、差分コードです。それらは同じMainコードを共有しますが、いくつかのソースコードファイルまたはリソースの異なるバージョン(またはバージョンなし)を共有します。

BuildVariant:buildVariantは、生成されたAPKが実際に対応するものです。それらはそのように(順番に)Product Flavor + Build Type = Build Variantと命名されます。
例1: 2つのフレーバーとしてfreepaidがある場合。ビルドバリアントは次のとおりです。
無料-デバッグ
無料-リリース
有料-デバッグ
有料-リリース
つまり、4つのAPK構成が可能です。いくつかの構成は特定のプロジェクトでは意味をなさないかもしれませんが、それらはare使用可能です。

例2:(新しいプロジェクトの場合/フレーバーなし)デフォルトのフレーバーは名前なし/空白なので、2つのbuildVariantsまたはAPKを使用できます。
デバッグ
リリース

これを Intellijのプロジェクト構造 と比較すると、それが役立つ場合:

Intellij Project Structure Snapshot

。idea(1)フォルダーには、主に内部IntelliJ IDEA情報を含むいくつかのサブフォルダーが含まれています。

src(2)フォルダーには、アプリケーションの機能を実装するMyActivity.Java (3)ファイルのソースコードが含まれています。このファイルはcom.exampleパッケージに属します。

res(4)フォルダーにはさまざまな視覚リソースが含まれています。

layout/main.xmlファイル(5)は、さまざまなタイプのリソースで構成されるアプリケーションの外観を定義します。

valuesフォルダー(6)は、さまざまなタイプのリソースを記述する.xmlファイルを保存するためのものです。現在、フォルダーにはStringリソース定義を含むstrings.xmlファイルが含まれています。 [色の追加]セクションからわかるように、レイアウトフォルダーには、たとえば色の記述子を含めることもできます。

描画可能フォルダー(7)画像が含まれています。

gen(8)フォルダーには、ビジュアルリソースとJavaソースコードをリンクするR.Java(9)ファイルが含まれます。以下のセクションからわかるように、IntelliJ IDEAは静的リソースとR.Javaの緊密な統合をサポートします。リソースが追加または削除されるとすぐに、R.Javaの対応するクラスとクラスフィールドが自動的に生成または削除されます。 R.Javaファイルはcom.exampleパッケージにも属します。

203
Dheeraj Bhaskar

Android Studio:app\build\source\r\debug\com.example.app\R.Java

これらのパスが異なるのはなぜですか? R.JavaがAndroid St​​udioのデバッグフォルダーにあるのはなぜですか?これは早い段階でいくつかのエラーにつながります。誰かがこれらの違いについて洞察を持っているなら、私はそれらを感謝します。

簡単に言えば、Android St​​udioは、システム上でデバッグをビルドするように構成されています Build Type .

Eclipse/ADTは、一度に1つのビルドをサポートするように設計されています(私の知る限り)。新しいビルドシステムの主要な目標の1つ( ユーザーガイドから ):

Make it easy to create several variants of an application, 
either for multi-apk distribution or for different flavors of an application

したがって、Eclipse/ADTが1つのR.Javaファイルを生成できるのに対して、Android St​​udioは複数をサポートします。生成されたR.Javadebugname__フォルダーにあります。これは、新しいビルドシステムがデフォルトで、debugname__およびreleasename__ビルドタイプをサポートしているためです。ビルドバリアント(ボタン、ASの左下隅)を変更してASをリリースすると、releasename__ディレクトリにR.Javaが生成されます。

これは単純なプロジェクトには何の意味もありませんが、 Build Variants のサポートは、多くの人にとってビルドプロセスの大幅な簡素化を意味します私が取り組んでいるプロジェクトを含む開発者。

このプロジェクトでは、2つのビルドタイプ(デバッグとリリース)で4つのフレーバーをサポートし、合計8つの異なるAPKの組み合わせをサポートします。そして、これらの組み合わせはそれぞれわずかに異なる構成を持っているので、このビルドシステムは本当にうまくいきました。私のAndroidスタジオは別のマシンにインストールされていますが、メモリが正しく機能する場合、R.Javaファイルはbuild/source/<flavor>/r/<build type>/package/R.Javaに存在します。 CIサーバーがAPKファイルを構築するとき、これらの各R.Javaファイルを使用して個別のパッケージを生成します。

31
Joe

Google サポートの中止 EclipseのAndroid Developer Tools(ADT)の発表は終了しました。アプリ開発プロジェクトをできるだけ早くAndroid St​​udioに移行する必要があります。 Android St​​udioへの移行の詳細については、Android St​​udioへの移行を参照してください。

Android Studio のAndroid開発ツールに最適です Android M ---

0
OpenWebWar