1. ホーム
  2. android

[解決済み] Android Studio のプロジェクト構造 (v.s. Eclipse のプロジェクト構造)

2022-09-27 05:05:25

質問

アンドロイド開発を学ぼうとしていますが、EclipseとAndroid Studioのプロジェクト構造の違いに最初は戸惑っています。このため、Eclipse 用に設計されたチュートリアルに従うことが困難です。なぜこのような違いが存在するのか、どなたか教えていただけないでしょうか。また、それらは存在すべきものでしょうか?

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

Eclipse。 appgencom.example.appR.java

Android Studioです。 appbuild ⇄ source ⇄debug ⇄com.example.appR.java

なぜこれらのパスが異なるのでしょうか。なぜ私の R.java は Android Studio の debug フォルダにあるのでしょうか?これは初期の段階でいくつかのエラーにつながりました。もし誰かがこれらの違いについて何か知っていれば、私は感謝します。

どのように解決するのですか。

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

Gradle Build Systemのせいなのかどうかは分かりませんが(というか、そうだろうと思う)、ここまでで理解できたことをお伝えします。

アップデート4です。 2014/09/11 追記 チートシート については BuildTypes , FlavorsVariants (やっと自信を持って書けるようになりました :D)

アップデート3です。 2014/09/11 比較ワークスペースとプロジェクトを正確に更新しました。

アップデート2です。 2014/04/17 ASプロジェクトの構成について、より詳細な情報を追加しました。

アップデート1: 2013/07/29 IntelliJのプロジェクト構造を追加しました。

IntelliJのプロジェクト構造(末尾)は、IntelliJにandroidプラグインを入れた場合のものです。しかし、Android Studioは、このようにプロジェクト構造が分かれています。

構造です。プロジェクトとモジュール

モジュール アンドロイドスタジオ は、まるで プロジェクト Eclipse

プロジェクト アンドロイドスタジオ は、まるで ワークスペース エクリプス (正確には、相互に依存するプロジェクトを持つワークスペース)

から ドキュメント (Android StudioはIntellij IDEAをベースにしています) :

IntelliJ IDEAで行うことはすべて、プロジェクトのコンテキストで行います。 プロジェクトのコンテキストで行います。プロジェクトは、完全なソフトウェアソリューションを表す組織単位です。 プロジェクトとは、完全なソフトウェアソリューションを表す組織的な単位です。

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

Androidの場合、1アプリにつき1プロジェクト、1ライブラリにつき1モジュール、1テストアプリにつき1モジュールということになります。

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

たとえば、quot;rebuild the project" というオプションがありますが、これは複数のアプリでは意味がなく、他の多くのプロジェクト設定は無意味で、複数のリポジトリがある場合、組み込みの VCS システムは素晴らしいものではありません。

構造 フォルダー構造

トップレベルのフォルダー

1. メインプロジェクト

これは全体の プロジェクトのコンテキスト ( Eclipseランドです。 ワークスペースのようなものですが、プロジェクトに関連するものに限定されます)。例 HelloWorldProject とした場合、あなたが与えたアプリケーションの名前は HelloWorld

2. .アイデア

Android Studio (AS) がプロジェクト固有のメタデータを格納する場所です。( Eclipseの土地です。 project.properties ファイル)

3. Project モジュール

実際のプロジェクトです。 HelloWorld アプリケーション名をHelloWorldとした場合

4. gradle

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

5. 外部ライブラリ

これは実際にはフォルダではなく、参照されるライブラリ( Eclipseの土地です。 Referenced Libraries)が表示されています。ここには、Targeted Platformなどが表示されます。

[ サイドノートです。 ここで、Eclipse Landの多くの人が参照されているライブラリを削除し、参照エラーを修正するためにFix Project Propertiesを使用していたことを覚えていますか?]

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

上記リストの3番です。以下のサブディレクトリがあります。

1. ビルド

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

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

2. リブ

で見た標準のlibsフォルダです。 eclipse land

3. src

ここでは javares フォルダに対応する src フォルダと res フォルダーを エクリプスランド . これは非常に歓迎される簡素化だと思います。

モジュールに関する注意事項。

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

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

新しいビルド システム

新しいビルドシステムに関するユーザーガイド

フレーバーやビルドタイプなどの説明 - この騒ぎは何なのか?

フレーバーとbuildTypesのCheatSheet

ビルドタイプです。 debugreleasebuildTypes で、すべてのプロジェクトでデフォルトで使用できます。をビルド/コンパイルするためのものです。 同じコード をビルド/コンパイルして、異なる APK を生成するためのものです。例えば release APK では、proguard (難読化のため) を実行し、(デバッグキーに対して) あなたのキーで署名し、最適化を実行し (proguard や他のツールを使って)、わずかに異なる packageNames を使用する (私たちは com.company.product に対して releasecom.company.product.debug に対して debug ) 等を使用します。また、デバッグフラグ( BuildConfig.DEBUG ) を使って logcat へのロギングをオフにしています (アプリが遅くなるため)。 release をビルドします。これにより、より高速な debug のビルドが高速化され、また最適化された release ビルドを使用します。

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

BuildVariantです。 A buildVariant は、生成されたAPKが実際に対応するものです。以下のような名前になっています(順番に)。 Product Flavor + Build Type = Build Variant .

例1: もし freepaid の 2 つのフレーバーがあります。あなたが得るであろうビルドバリアントは

フリー - デバッグ

フリー - リリース

有料 - デバッグ

有料版 - リリース

これで、4つの可能なAPKの構成ができました。いくつかの構成は特定のプロジェクトで意味をなさないかもしれませんが、それらは です。 利用可能です。

例2: (新しいプロジェクト/フレーバーなしの場合) 2つの buildVariants または APK が利用可能です。デフォルトのフレーバーは nameless/blank なので、以下のようになります。

デバッグ

リリース

これと比較すると Intellijのプロジェクト構造 と比べてみてください。

.アイデア(1) フォルダには、主にIntelliJ IDEAの内部情報を含む多くのサブフォルダが含まれています。

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

res (4) フォルダは様々なビジュアルリソースを含んでいます。

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

値フォルダ (6) は、様々なタイプのリソースを記述した.xmlファイルを保存するためのものです。現在、このフォルダには、Stringリソースの定義を含むstrings.xmlファイルが含まれています。色の追加」のセクションで説明したように、layoutフォルダには、たとえば色の記述子を格納することもできます。

drawable フォルダ (7) には画像が含まれています。

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