Android Studioのプロジェクト構造(v.s.Eclipseのプロジェクト構造)
私はアンドロイド開発を学ぼうとしていますが、EclipseとAndroid Studioのプロジェクト構造の違いに最初は戸惑っています。このため、Eclipse用にデザインされたチュートリアルに従うのが困難です。なぜこのような違いがあるのか、どなたか教えていただけませんか?また、このような違いは存在すべきなのでしょうか?
例えば、R.javaファイルを2つの異なるIDEで探すとすると、パスは次のようになります。
Eclipse: appgencom.example.app
Android Studio: appbuild
なぜこれらのパスが異なるのですか?なぜR.javaはAndroid Studioのdebugフォルダにあるのでしょうか?これは初期の段階でいくつかのエラーにつながりました。もし誰かがこれらの違いについて何か知っていれば、私はそれを感謝します。
108
4
その謎Android Studio's のプロジェクト構造とビルドシステム#。
Gradle Build Systemのせいなのかどうかは分かりませんが(というか、そうだろうと思う)、これまで理解できたことをお伝えします'します。 Update 4: 2014/09/11
BuildTypes
,Flavors
,Variants
の Cheat Sheet を追加しました(やっと書く自信がつきました:D)。 Update 3: 2014/09/11 比較ワークスペースとプロジェクトを正確に更新しました。 Update 2: 2014/04/17 ASプロジェクトの構造をより詳細に追加しました。 Update 1: 2013/07/29 IntelliJのプロジェクト構造を追加しました。 IntelliJ'sのプロジェクト構造(末尾に表示)は、IntelliJにandroidプラグインを入れた場合のものです。しかし、Android Studioでは、このようにプロジェクト構造が分割されています。Structure:プロジェクトとモジュール
Android Studioのモジュールは、Eclipseのプロジェクトのようなものです。 Android Studioにおけるプロジェクトは、Eclipseにおけるワークスペースのようなものです(正確には、相互に依存するプロジェクトを持つワークスペースです)。 ドキュメント]1より(Android StudioはIntellij IDEAをベースにしています): IntelliJ IDEAで行うことはすべて、プロジェクトのコンテキスト内で行うことになります。 プロジェクトのコンテキストで行います。プロジェクトとは、1つのソフトウェアソリューションを表す組織単位です。 プロジェクトは、完全なソフトウェアソリューションを表す組織単位です。 gt; プロジェクトは、完全なソフトウェアソリューションを表す組織単位です。 完成した製品は、一連の独立したモジュールに分解されるかもしれません。 しかし、それらを1つにまとめ、1つに結びつけるのがプロジェクトの定義です。 しかし、それらをまとめて、より大きな全体像に結びつけるのがプロジェクトの定義です。 Androidの場合、1アプリにつき1プロジェクト、1ライブラリにつき1モジュール、1テストアプリにつき1モジュールということになります。 同じプロジェクト内で複数のアプリを作ろうとすると、複数の問題が発生します。可能ですが、(私がやったように)やってみると、ほとんどすべてが1つのプロジェクトにつき1つのアプリで動作するように設計されていることがわかります。
例えば、quot;rebuild the project"というオプションがありますが、これは複数のアプリでは意味がありませんし、他の多くのプロジェクト設定は役に立ちませんし、内蔵のVCSシステムは複数のリポジトリがある場合には素晴らしいものではありません。
構造フォルダーの構造
Android Studioのプロジェクト構造]2。
トップレベルのフォルダー
1.メインプロジェクト
これは、プロジェクトコンテキスト (Eclipse Land: ワークスペースのようなものですが、プロジェクトに関連するものに限定されます) 全体となります。例:アプリケーション名が「HelloWorld」であれば、「HelloWorldProject」。
.idea
Android Studio (AS)がプロジェクト固有のメタデータを格納する場所です。 (Eclipse Land:
project.properties
ファイル)3.プロジェクトモジュール
例:アプリケーション名がHelloWorldの場合、
HelloWorld
となります。4.gradle##(グラドル)
gradleのビルドシステムのjarラッパーです。
5.外部ライブラリ
これは実際にはフォルダではなく、参照するライブラリ(Eclipse Land: Referenced Libraries)が表示される場所です。ここには、Targeted Platformなどが表示されます。 (Side note:) Eclipse Landでは、ここで参照されているライブラリを削除し、参照エラーを修正するためにFix Project Propertiesを行っていた人が多かったことを覚えていますか?
詳細##プロジェクトフォルダ
これは上記のリストの3番です。以下のサブディレクトリがあります。
1.ビルド
このディレクトリには、classes.dex、コンパイルされたクラスとリソースなど、
make
プロセスのすべての完全な出力があります。 Android StudioのGUIでは、いくつかのフォルダーしか表示されません。重要なのは、あなたのR.javaは、 build/source//r///R.java`** 以下のここにある、という点です。2. libs
これは、eclipse landで見る標準的なlibsフォルダです。
3. src
ここでは、Eclipse Land の
src
フォルダとres
フォルダに相当するjava
とres
フォルダのみが表示されます。これは非常に歓迎される簡素化です。Note on Modules:
モジュールは、Eclipse Land のプロジェクトのようなものです。ここでは、1つのアプリケーションプロジェクト(上記リストのモジュール#3)と、アプリケーションプロジェクトが依存する複数のライブラリプロジェクト(グローバルプロジェクトフォルダ(上記リストの#1)下にある別のモジュールとして)があると考えます。これらのライブラリプロジェクトがどのように他のアプリケーションで再利用できるのか、私はまだ知りません。 [余談: この再編成は、srcフォルダの簡素化などの利点もありますが、非常に多くの複雑さがあります。この複雑さは、主にこの新しいプロジェクトレイアウトに関する 非常に 薄いドキュメントのせいです] 。
新しいビルドシステム
新しいビルドシステムのユーザーガイド。
Explanation of flavors and buildTypes, etc - What is the hullabaloo about?
フレーバーと buildTypes のチートシート
BuildType:
debug
とrelease
は、すべてのプロジェクトでデフォルトで利用できるbuildTypes
です。これらは異なるAPKを生成するために、SAME CODEをビルド/コンパイルするためのものです。例えば、release
のAPKでは、proguardを実行し(難読化のため)、あなたの鍵で署名し(debugの鍵に対して)、最適化を行い(proguardや他のツールで)、少し異なるpackageNames
(release
ではcom.company.product
、debug
ではcom.company.product.debug
) などとしたいことでしょう。また、デバッグフラグ (BuildConfig.DEBUG
) を使用して、release
ビルドでは logcat へのロギング (アプリが遅くなるため) をオフにします。これにより、開発中のデバッグビルドが高速化されるだけでなく、Playストアにアップロードするリリースビルドも最適化されます。 Product Flavor: デフォルトのフレーバーはありません (正確には、デフォルトのフレーバーは空白/名前なしです)。フレーバーは、無料版と有料版があり、それぞれ異なるコードを持っています。メインコードは同じですが、いくつかのソースコードのファイルやリソースのバージョンが異なります(またはバージョンなし)。 BuildVariant:buildVariant
は、生成されたAPKが実際に対応するものです。順番に)Product Flavor
+Build Type
=Build Variant
のように命名されます。例1: 2つのフレーバーとして、
free
とpaid
がある場合。この場合、ビルドバリアントは次のようになります。フリー - デバッグ フリー - リリース 有料版 - デバッグ 有料版 - リリース 以上、4つのAPKの構成が可能です。いくつかの構成は特定のプロジェクトでは意味をなさないかもしれませんが、それらは 利用可能 です。 例2: (新規プロジェクト/フレーバーなし) デフォルトのフレーバーが名無し/空白なので、2つの
buildVariants
または APK が利用可能です。 デバッグ リリースIntellij's Project Structure]4と比較してみてください。
Intellijのプロジェクト構造スナップショット]5。 .idea (1)フォルダには、主にIntelliJ IDEAの内部情報が格納されたサブフォルダが多数存在します。 src (2) フォルダーには、アプリケーションの機能を実装する MyActivity.java (3) ファイルのソースコード が含まれています。このファイルは com.example パッケージに属しています。 res (4) フォルダーには、さまざまなビジュアルリソースが含まれています。 layout/main.xmlファイル(5)は、様々な種類のリソースで構成されるアプリケーションの外観を定義します。 valuesフォルダ(6)は、各種リソースを記述した.xmlファイルを格納するためのフォルダです。現在、このフォルダには、Stringリソースを定義したstrings.xmlファイルが格納されています。色の追加」の項で説明したように、layout フォルダには、例えば、色の記述子を格納することもできます。 drawable フォルダ(7)には、画像が格納されています。 Gen (8) フォルダーには、ビジュアルリソースとJavaソースコードをリンクするR.java (9) ** ファイルが含まれています。以下のセクションからわかるように、IntelliJ IDEAは静的リソースとR.javaの間の緊密な統合をサポートしています。リソースの追加や削除が行われると、それに応じてR.javaの対応するクラスやクラスフィールドが自動的に生成・削除されます。R.javaファイルはcom.exampleパッケージにも属しています。
Android Studio: appbuildsource
なぜこのようにパスが違うのですか?なぜR.javaはAndroid Studioのdebugフォルダにあるのでしょうか?このため、序盤でエラーが出てしまいました。もし、この違いについてご存知の方がいらっしゃいましたら、教えていただければ幸いです。
簡単に言うと、Android Studioはシステム上でデバッグ用のBuild Typeをビルドするよう設定されています。
Eclipse/ADTは、一度に1つのビルドをサポートするように設計されています(私が知る限りでは)。新しいビルドシステムの主要な目標の1つです(ユーザーガイドより)。
そのため、Eclipse/ADTでは1つの
R.java
ファイルを生成できましたが、Android Studioでは複数のR.java
ファイルをサポートします。生成されたR.java
はdebug
フォルダーに置かれます。これは、新しいビルドシステムがデフォルトでdebug
とrelease
ビルドタイプをサポートするためです。もし、ビルドバリアント(ASの左下にあるボタン)をreleaseに変更した場合、ASはR.java
をrelease
ディレクトリに生成します。これは単純なプロジェクトでは意味がないかもしれませんが、 Build Variants のサポートは、私が取り組んでいるプロジェクトを含む多くの開発者にとって、 ビルドプロセスの劇的な簡略化を意味します。
私たちのプロジェクトは、2つのビルドタイプ(デバッグとリリース)を持つ4つのフレーバーをサポートしており、合計8つの異なるAPKの組み合わせをサポートしています。そして、それらの組み合わせはそれぞれ微妙に異なる構成を持っているので、このビルドシステムは私たちにとって本当にうまくいったのです。私のアンドロイドスタジオは別のマシンにインストールされていますが、記憶が正しければ
R.java
ファイルはbuild/source//r//package/R.java
に存在しています。CIサーバーがAPKファイルをビルドするとき、これらのR.java
ファイルをそれぞれ使用して個別のパッケージを生成します。*Android M]3に対応したAndroid開発ツールは、Android Studioのみとなります ---。
Android Studio 3.0.1の場合、すべての機能を選択しました。
-Android O最新。 -Android Auto。 -Androidのもの。 -Androidウェア。 -Android TV。 -C ++サポート。 -コトリンのサポート。
バージョン3.0.1の構造は、他のすべての回答とまったく同じようには見えません。
最近の構造は、2018年に表示されたAndroid Studio 3.0.1 01/2018です。
初心者は、機能サブフォルダーで使用可能なものに似たものを見つけました。
。! Android Studio 3.0.1 01_2018を更新してください。
。! ToolTip:
。!