私はAndroid開発を学ぼうとしていますが、最初はEclipseとAndroid Studioの間の異なるプロジェクト構造に混乱しています。これにより、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 Studioのデバッグフォルダーにあるのはなぜですか?これは早い段階でいくつかのエラーにつながります。誰かがこれらの違いについて洞察を持っているなら、私はそれらを感謝します。
これがGradle Build Systemによるものかどうかはわかりませんが(私はそう思います)、これまでに理解したことを説明します。
更新4: 2014/09/11追加チートシートBuildTypes
、Flavors
、およびVariants
について(最終的にこれを書く自信があります:D)
pdate 3: 2014/09/11比較ワークスペースとプロジェクトを正確に更新しました
更新2: 2014/04/17 ASプロジェクト構造に詳細を追加
更新1: 2013/07/29 IntelliJプロジェクト構造を追加
IntelliJのプロジェクト構造(最後に表示)は、Androidプラグインを使用したIntelliJ用です。ただし、Android Studioのプロジェクト構造は次のように分割されています。
モジュール inAndroid Studioはproject inEclipse
project inAndroid Studioはworkspace inEclipse(to正確に、相互依存プロジェクトを含むワークスペース)
ドキュメント から(Android StudioはIntellij IDEAに基づいています):
IntelliJ IDEAで何をするにしても、プロジェクトのコンテキストでそれを行います。プロジェクトは、完全なソフトウェアソリューションを表す組織単位です。
完成した製品は、一連の個別の分離されたモジュールに分解される場合がありますが、それらをまとめてより大きな全体に結び付けるプロジェクト定義です。
Androidの場合、アプリごとに1つのプロジェクト、ライブラリごと、テストアプリごとに1つのモジュールを意味します。
同じプロジェクト内で複数のアプリをビルドしようとすると、複数の問題が発生します。それは可能ですが、(私がやったように)試してみると、ほとんどすべてがプロジェクトごとに1つのアプリで動作するように設計されていることがわかります。
たとえば、「プロジェクトを再構築」するオプションがありますが、これは複数のアプリでは意味がなく、他の多くのプロジェクト設定は役に立たず、組み込みのVCSシステムは複数のリポジトリがある場合はうまくありません。
これは完全になりますプロジェクトコンテキスト(Eclipse Land:ワークスペースに似ていますが、プロジェクトに関連するものに限定されます)。例:指定したアプリケーションの名前がHelloWorldProject
の場合はHelloWorld
これは、プロジェクト固有のメタデータがAndroid Studio(AS)によって保存される場所です。 (Eclipse Land:project.properties
ファイル)
これが実際のプロジェクトです。例:HelloWorld
指定したアプリケーション名がHelloWorldの場合
これは、gradleビルドシステムのjarラッパー、つまり、このjarがASがWindows(私の場合はOS)にインストールされたgradleと通信する方法です。
これは実際にはフォルダではなく、参照ライブラリ(Eclipse Land:参照ライブラリ)が表示される場所です。ターゲットプラットフォームの表示場所などは次のとおりです。
[サイドノート:これは、Eclipse Landの多くが参照ライブラリを削除し、プロジェクトプロパティを修正して参照エラーを修正した場所です。覚えていますか?]
これは、上記のリストの番号3です。次のサブディレクトリがあります
これには、make
プロセスのすべての完全な出力、つまり、classes.dex、コンパイルされたクラスおよびリソースなどが含まれます。
Android Studio GUIでは、いくつかのフォルダーのみが表示されます。重要な部分は、R.Javaがここにあるの下にあるbuild/source/<flavor>/r/<build type(optional)>/<package>/R.Java
これは、Eclipse landにも表示される標準のlibsフォルダーです
ここでは、Eclipse LandのJava
フォルダーとres
フォルダーに対応するsrc
フォルダーとres
フォルダーのみが表示されます。これは私見の簡素化を歓迎します。
モジュールはEclipse Landプロジェクトのようなものです。ここでは、1つのアプリケーションプロジェクト(上記のリストのモジュール#3)と、アプリケーションプロジェクトが依存する複数のライブラリプロジェクト(グローバルプロジェクトフォルダー(上記のリストの#1)の下の個別のモジュール)があるという考えです。これらのライブラリプロジェクトを他のアプリケーションで再利用する方法については、まだわかりません。
[サイドノート:再編成全体には、srcフォルダーの簡素化などの利点がありますが、非常に複雑です。複雑さの主な原因は、非常に非常にこの新しいプロジェクトレイアウトに関する薄いドキュメントです。]
BuildType:debug
およびrelease
は、すべてのプロジェクトでデフォルトでbuildTypes
を使用できます。 SAME CODEをビルド/コンパイルして、異なるAPKを生成するためのものです。たとえば、release
APKでproguard(難読化用)を実行し、キー(デバッグキーに対して)で署名し、最適化(proguardまたは他のツールを介して)を実行し、少し異なるpackageNames
を使用します(release
にはcom.company.product
を使用します) debug
のcom.company.product.debug
など)。また、release
ビルドでのデバッグフラグ(BuildConfig.DEBUG
)を使用して、logcatへのロギングをオフにします(アプリが遅くなるため)。これにより、開発中のdebug
ビルドが高速化されますが、Playストアに配置するための最適化されたrelease
ビルドも作成されます。
製品フレーバー:デフォルトのフレーバーはありません(正確には、デフォルトのフレーバーは空白/名前なしです)。 Flavors
は、無料バージョンまたは有料バージョンの場合、差分コードです。それらは同じMain
コードを共有しますが、いくつかのソースコードファイルまたはリソースの異なるバージョン(またはバージョンなし)を共有します。
BuildVariant:buildVariant
は、生成されたAPKが実際に対応するものです。それらはそのように(順番に)Product Flavor
+ Build Type
= Build Variant
と命名されます。
例1: 2つのフレーバーとしてfree
とpaid
がある場合。ビルドバリアントは次のとおりです。
無料-デバッグ
無料-リリース
有料-デバッグ
有料-リリース
つまり、4つのAPK構成が可能です。いくつかの構成は特定のプロジェクトでは意味をなさないかもしれませんが、それらはare使用可能です。
例2:(新しいプロジェクトの場合/フレーバーなし)デフォルトのフレーバーは名前なし/空白なので、2つのbuildVariants
またはAPKを使用できます。
デバッグ
リリース
。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パッケージにも属します。
Android Studio:app\build\source\r\debug\com.example.app\R.Java
これらのパスが異なるのはなぜですか? R.JavaがAndroid Studioのデバッグフォルダーにあるのはなぜですか?これは早い段階でいくつかのエラーにつながります。誰かがこれらの違いについて洞察を持っているなら、私はそれらを感謝します。
簡単に言えば、Android Studioは、システム上でデバッグをビルドするように構成されています 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 Studioは複数をサポートします。生成されたR.Java
はdebug
name__フォルダーにあります。これは、新しいビルドシステムがデフォルトで、debug
name__およびrelease
name__ビルドタイプをサポートしているためです。ビルドバリアント(ボタン、ASの左下隅)を変更してASをリリースすると、release
name__ディレクトリにR.Java
が生成されます。
これは単純なプロジェクトには何の意味もありませんが、 Build Variants のサポートは、多くの人にとってビルドプロセスの大幅な簡素化を意味します私が取り組んでいるプロジェクトを含む開発者。
このプロジェクトでは、2つのビルドタイプ(デバッグとリリース)で4つのフレーバーをサポートし、合計8つの異なるAPKの組み合わせをサポートします。そして、これらの組み合わせはそれぞれわずかに異なる構成を持っているので、このビルドシステムは本当にうまくいきました。私のAndroidスタジオは別のマシンにインストールされていますが、メモリが正しく機能する場合、R.Java
ファイルはbuild/source/<flavor>/r/<build type>/package/R.Java
に存在します。 CIサーバーがAPKファイルを構築するとき、これらの各R.Java
ファイルを使用して個別のパッケージを生成します。
Google サポートの中止 EclipseのAndroid Developer Tools(ADT)の発表は終了しました。アプリ開発プロジェクトをできるだけ早くAndroid Studioに移行する必要があります。 Android Studioへの移行の詳細については、Android Studioへの移行を参照してください。
Android Studio のAndroid開発ツールに最適です Android M ---