[解決済み] Android Studio のプロジェクト構造 (v.s. Eclipse のプロジェクト構造)
質問
アンドロイド開発を学ぼうとしていますが、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
,
Flavors
と
Variants
(やっと自信を持って書けるようになりました :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
ここでは
java
と
res
フォルダに対応する
src
フォルダと
res
フォルダーを
エクリプスランド
. これは非常に歓迎される簡素化だと思います。
モジュールに関する注意事項。
モジュールは Eclipseの国 プロジェクトのようなものです。ここでは、1つのアプリケーションプロジェクト(上のリストのモジュール#3)と、アプリケーションプロジェクトが依存するいくつかのライブラリプロジェクト(グローバルプロジェクトフォルダ(上のリストの#1)下の別のモジュールとして)があるという考え方です。これらのライブラリプロジェクトを他のアプリケーションでどのように再利用できるのか、私はまだ見つけていません。
[ 余談です。 全体の再編成は、srcフォルダの簡素化などいくつかの利点がありますが、非常に多くの複雑さがあります。その複雑さとは、主に 非常に非常に この新しいプロジェクトのレイアウトに関する薄いドキュメントです。]
新しいビルド システム
フレーバーやビルドタイプなどの説明 - この騒ぎは何なのか?
フレーバーとbuildTypesのCheatSheet
ビルドタイプです。
debug
と
release
は
buildTypes
で、すべてのプロジェクトでデフォルトで使用できます。をビルド/コンパイルするためのものです。
同じコード
をビルド/コンパイルして、異なる APK を生成するためのものです。例えば
release
APK では、proguard (難読化のため) を実行し、(デバッグキーに対して) あなたのキーで署名し、最適化を実行し (proguard や他のツールを使って)、わずかに異なる
packageNames
を使用する (私たちは
com.company.product
に対して
release
と
com.company.product.debug
に対して
debug
) 等を使用します。また、デバッグフラグ(
BuildConfig.DEBUG
) を使って logcat へのロギングをオフにしています (アプリが遅くなるため)。
release
をビルドします。これにより、より高速な
debug
のビルドが高速化され、また最適化された
release
ビルドを使用します。
製品フレーバーです。
デフォルトのフレーバーはありません(正確には、デフォルトのフレーバーは空白/名前なしです)。
Flavors
とすることもできます。
フリー版
または
有償版
がある場合、それらは
異なるコード
. それらは同じ
Main
コードは同じですが、いくつかのソースコードファイルやリソースのバージョンが異なります(またはバージョンなし)。
BuildVariantです。
A
buildVariant
は、生成されたAPKが実際に対応するものです。以下のような名前になっています(順番に)。
Product Flavor
+
Build Type
=
Build Variant
.
例1:
もし
free
と
paid
の 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パッケージに属しています。
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] EclipseのAndroidプラグインで "Debug certificate expired "エラーが発生する。
-
[解決済み] Android Studioでパッケージ名を変更する
-
[解決済み] Android Studioの「assets」フォルダはどこに配置すればいいですか?
-
[解決済み] Android StudioのGradleとは?
-
[解決済み] Android Studioプロジェクトの.gitignoreには何を入れるべきですか?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] 深くネストされたスタックから離れるとき、Fragmentのバックスタックをクリーンアップする方法はこれで良いのでしょうか?
-
[解決済み] Gmailの3分割アニメーションシナリオの完全動作サンプル?
-
[解決済み] Google Play ストア内部テストのロールアウトが開始できない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] BottomSheetDialogFragmentの状態をexpandedに設定する。
-
[解決済み] プログラム的に電話をかけるには?
-
[解決済み] Androidでマイナスマージンを使用するのは悪いことですか?
-
[解決済み] wrap_contentでRelativeLayoutがフルスクリーンになってしまう
-
[解決済み] Android Studio - あいまいなメソッド呼び出し getClass()
-
[解決済み] ArrayList<MyCustomClass>をJSONArrayに変換する。
-
[解決済み] 非ActivityクラスでContextを取得する [重複].
-
[解決済み] EditTextをReadOnlyにする
-
[解決済み] アンドロイドのdatepickerダイアログで最大の日付を設定するには?
-
[解決済み] Androidでツールバーの戻るボタンの色を変えるには?