Gradleは私とまた新しいAndroid開発者にとって少し混乱します。誰もがAndroid Studioのグレードとは何か、そしてその目的は何かを説明できますか? GradleがAndroid Studioに含まれているのはなぜですか?
Gradleはビルドシステムです。
Android Studio以前は、開発目的でEclipseを使用していましたが、おそらく、EclipseなしでAndroid APKを構築する方法を知らなかったのです。
これはコマンドラインで実行できますが、SDKで各ツール(dx、aapt)が何をするのかを学ぶ必要があります。 Eclipseは、私たちに独自のビルドシステムを提供することによって、これらの低レベルだが重要で基本的な詳細から私たち全員を救った。
さて、res
フォルダがあなたのsrc
フォルダと同じディレクトリにあるのはなぜだろうと思いましたか?
これが、ビルドシステムが全体像を描く場所です。ビルドシステムは自動的にすべてのソースファイル(.Java
または.xml
)を受け取り、それから適切なツールを適用し(例えばJava
クラスファイルを受け取り、それらをdex
ファイルに変換します)、それらすべてを1つの圧縮ファイル、私たちの最愛のAPKにまとめます。
このビルドシステムはいくつかの規約を使用します。その一例は、ソースファイル(Eclipseでは\src
フォルダ)またはリソースファイル(Eclipseでは\res
フォルダ)を含むディレクトリを指定することです。
さて、これらすべてのタスクを自動化するためには、スクリプトが必要です。あなたは自分のビルドシステムをLinuxのシェルスクリプトやWindowsのバッチファイル構文を使って書くことができます。とった?
Gradleは他のビルドシステムで、他のビルドシステムから最高の機能を引き継ぎ、それらを1つに統合します。それは彼らの欠点から改善されています。これはJVMベースのビルドシステムです。つまり、Android Studioで使用する独自のスクリプトをJavaで作成できるということです。
Gradleについての素晴らしいことは、それがプラグインベースのシステムだということです。つまり、あなたがあなた自身のプログラミング言語を持っていて、ソースからあるパッケージ(Java用のJARのような出力)を構築する作業を自動化したいのなら、完全なプラグインをJavaまたはGroovy(またはKotlin、 を参照)で書くことができます。ここで )、そしてそれを世界の他の国々に配布する。
Googleは、市場で最も先進的なビルドシステムの1つを見て、Groovyや他の新しい言語を習得することなく、ほとんど習得することなく自分でスクリプトを書くことができることを認識しました。そこで彼らはGradle用のAndroidプラグインを書きました。
あなたはあなたのプロジェクトでbuild.gradle
ファイルを見たはずです。それがあなたのタスクを自動化するスクリプトを書くことができるところです。これらのファイルで見たコードはGroovyコードです。 System.out.println("Hello Gradle!");
と書いた場合は、コンソールに表示されます。
簡単な例は、実際の構築プロセスが起こる前に、あるディレクトリから別のディレクトリにいくつかのファイルをコピーしなければならないということです。 Gradleビルドスクリプトでこれを実行できます。
これはGoogleがAndroidに使用したい新しいビルドツールです。 antよりも拡張性があり、便利であるために使用されています。開発者エクスペリエンスを向上させるためのものです。
あなたは、 Google I/O で、Android開発者チームからのXavier Ducrohetによる話をここで見ることができます。
XavierとTor NorbyeによるAndroid Studioに関する別の講演もあります。 ここでGoogle I/O中 。
これはGradle
とは何か、そしてAndroid Studioでそれを使用する方法についての詳細な説明です。
Gradleファイルを調べる
Gradleビルドファイル
GradleビルドファイルはDomain Specific Language or DSL
を使用してカスタムビルドロジックを定義し、Gradle用のAndroidプラグインのAndroid固有の要素と対話します。
Android Studioプロジェクトは1つ以上のモジュールで構成されています。これらのモジュールは、独立してビルド、テスト、およびデバッグできるコンポーネントです。各モジュールには独自のビルドファイルがあるため、すべてのAndroid Studioプロジェクトには2種類のGradleビルドファイルが含まれています。
トップレベルビルドファイル:ここで、プロジェクトを構成するすべてのモジュールに共通の設定オプションを見つけることができます。
モジュールレベルのビルドファイル:各モジュールには、モジュール固有のビルド設定を含む独自のGradleビルドファイルがあります。プロジェクトの最上位のビルドファイルではなく、モジュールレベルのビルドファイルの編集にほとんどの時間を費やすことになります。
これらのbuild.gradle
ファイルを見るには、([プロジェクト]タブを選択して)Android Studioの[プロジェクト]パネルを開き、[Gradle Scripts]フォルダを展開します。 Gradle Scriptsフォルダの最初の2つの項目は、プロジェクトレベルとモジュールレベルのGradleビルドファイルです。
トップレベルGradleビルドファイル
すべてのAndroid Studioプロジェクトには、単一の最上位Gradleビルドファイルが含まれています。このbuild.gradle
ファイルはGradle Scriptsフォルダーに表示される最初の項目で、明確にProjectとマークされています。
ほとんどの場合、このファイルに変更を加える必要はありませんが、その内容とプロジェクト内でのその役割について理解しておくと便利です。
モジュールレベルのGradleビルドファイル
プロジェクトレベルのGradleビルドファイルに加えて、各モジュールには独自のGradleビルドファイルがあります。以下は、基本的なモジュールレベルのGradleビルドファイルの注釈付きバージョンです。
その他のGradleファイル
Build.gradleファイルに加えて、Gradle Scriptsフォルダには他のGradleファイルがいくつか含まれています。ほとんどの場合、これらのファイルは手動で編集する必要はありません。プロジェクトに関連する変更を加えると自動的に更新されます。ただし、これらのファイルがプロジェクト内で果たす役割を理解しておくことをお勧めします。
gradle-wrapper.properties(Gradleバージョン)
このファイルにより、Gradleがマシンにインストールされていなくても、他の人々があなたのコードを構築することができます。このファイルはGradleの正しいバージョンがインストールされているかどうかをチェックし、必要ならば必要なバージョンをダウンロードします。
settings.gradle
このファイルはプロジェクトを構成するすべてのモジュールを参照します。
gradle.properties(プロジェクトプロパティ)
このファイルにはプロジェクト全体の設定情報が含まれています。デフォルトでは空ですが、このファイルに追加することでプロジェクトにさまざまなプロパティを適用できます。
local.properties(SDKの場所)
このファイルは、Android Gradleプラグインに、Android SDKのインストール場所を知らせる場所を指示します。
注:local.properties
には、Android SDKのローカルインストールに固有の情報が含まれています。つまり、このファイルをソース管理下に置かないでください。
これからgradleの明確な理解を得ました。
Gradleは、プログラムのソースコードをビルドするビルドツールの一種です。そのため、これはAndroid Studioの重要な部分であり、アプリケーションの開発を始める前にインストールする必要があります。
最初のプロジェクトを作成するときにAndroid Studioが自動的に実行するため、別にインストールする必要はありません。
Gradleについて知る必要があるすべてがここにあります。 Gradleプラグインユーザーガイド
新しいビルドシステムの目標
新しいビルドシステムの目的は次のとおりです。
- コードとリソースを再利用しやすくする
- マルチapk配布またはさまざまな種類のアプリケーション用に、アプリケーションの複数のバリエーションを簡単に作成できます。
- ビルドプロセスの設定、拡張、カスタマイズを簡単にする
- 良いIDEの統合
なぜGradleなのか
Gradleは高度なビルドシステムであると同時に、プラグインを通してカスタムビルドロジックを作成することを可能にする高度なビルドツールキットです。
ここに私達がGradleを選択させたその特徴のいくつかがあります:
- ビルドロジックを記述および操作するためのドメイン固有言語(DSL)
- ビルドファイルはGroovyベースであり、DSLを介して宣言型要素を混在させたり、DSL要素を操作してカスタムロジックを提供するためのコードを使用したりできます。
- Mavenおよび/またはIvyによる組み込みの依存関係管理。
- とても柔軟です。ベストプラクティスを使用することは許可されていますが、独自の方法を強制するものではありません。
- プラグインは、ビルドファイルが使用する独自のDSLと独自のAPIを公開できます。
- IDE統合を可能にする優れたツールAPI
定義::Gradleは構造化された構築メカニズムとして記述することができ、そこで開発者はツールを管理して柔軟に管理できます特定の構成の特定のデバイス用のsmaller in size
、targeting specific requirements
であるビルドを作成するためのプロジェクトのリソース
基本構成
minimumSdk
maximumSdk
targettedSdk
versionCode
versionName
LIBRARIES ::私たちはAndroidライブラリやその他のサードパーティのライブラリを追加することができます。面倒な作業を早くします。ライブラリが既存のプロジェクトに適合しない場合、開発者には、ライブラリを追加できるようにプロジェクトに変更を加えるための適切な解決策を見つけることができるログが表示されます。たった一行の依存関係
建物の種類を生成する
ビルドタイプとビルドフレーバーを組み合わせてさまざまなビルドバリアントを取得する
==================== ====================
| BuildTypes | | ProductFlavours |
-------------------- ====================== --------------------
| Debug,Production | || || | Paid,Free,Demo,Mock|
==================== || || ====================
|| ||
VV VV
=================================================================
| DebugPaid, DebugFree, DebugDemo, DebugMock |
| ProductionPaid, ProductionFree, ProductionDemo, ProductionMock |
=================================================================
サイズの縮小
Gradleは、未使用のリソースや未使用のものを統合ライブラリから削除することで、生成されるビルドのサイズを減らすのに役立ちます
権限の管理
要件に基づいて特定のシナリオで特定の権限を追加することで、特定のビルドに対して特定の権限を指定できます
特定のデバイス用のビルド
特定の密度と特定のapiレベルを含む特定のデバイス用に生成ビルドを管理できます。これは、複数の種類のデバイスにわたる要件に従って、App Storeでの製品展開に役立ちます
GOOD REFERENCE
Gradleは ビルドシステムです 。 ビルドシステムは、プログラムのコンパイルプロセスを自動化するように設計されたソフトウェアツールです。ビルドシステムにはさまざまな形態があり、さまざまなソフトウェアビルドタスクに使用されます。その主な目的は実行可能ファイルを効率的に作成することですが。
もう1つの関連用語は、ビルドビルドの自動化です。これは、ソフトウェアビルドの作成とそれに関連するプロセスを自動化するプロセスです。
他の言語用の類似したビルドシステムはほとんどありません(完全なリスト を参照してください )。
議論の余地があるというリスクで、私はこれの背後にあると思うのはなぜAndroid Studio/Gradleの経験がそれほど悪いのかという問題です。
典型的なClojureの経験:
典型的なAndroid Studio/Gradleの経験:
これがGradleのせいではないと私は思います。しかし、「Eclipseプロジェクトからのインポート」はかなり不安定です。 Gradleが主張する洗練されたものとビルドシステムの長所のために、Android StudioはEclipseからビルド依存関係やビルドプロセスをうまくインポートできないようです。
完全なディペンデンシーグラフをインポートできなかった場合は、わかりません。 Android Studioには、問題を解決する方法に関して役立つヘルプやヒントはありません。 Eclipseフォルダーのどこを手動で確認できるかはわかりません。どのライブラリが欠けているように見えるかはわかりません。または、Mavenなどを検索してください。
2016年には、Leiningen/Clojars、nodeのnpm、Pythonのpip、Debian apkg(そして他の言語やシステムのための多くの類似したパッケージマネージャは間違いなく)のようなものがすべてうまく動作します。
Androidを除く。 Android Studioは今でも私が未だ依存していない地獄を経験しているように見える唯一の場所です。
私はこれがグーグルのせいだと言う傾向があります。堅牢な変換プロセスを実行せずに、EclipseからAndroid Studio/Gradleへの移行を断念したとき、彼らはAndroidエコシステム(および数千の既存のAndroidプロジェクト/オンラインチュートリアル)を破った。 Eclipseでプロジェクトを実行している人々は、それらをASに適応させていません(おそらくそれは彼らにとって苦痛だからです)。そして、ASでそれらのプロジェクトを使おうとしている人々は同じ問題にぶつかっています。
とにかく、Gradleがこの超強力なビルドシステムであるなら、なぜ私はまだsdkマネージャで他の多くの依存関係を管理しているのですか? ndkを必要とするプロジェクトがGradleファイルでこれを指定して、必要に応じて自動的にインストールされビルドされないようにすることができないのはなぜですか。なぜNDKは特別なのですか?ターゲットプラットフォームでも同様ですか?自分のプロジェクトをそれらと照らし合わせてチェックし、これをすべて裏側でソートしてもらうのではなく、明示的にIDEにインストールするのはなぜですか。
答えを書くために2つのチュートリアルを参照します one 、 two
Gradle は汎用の宣言型ビルドツールです。これは一般的な目的です。ビルドスクリプトで実装したいと思うものはほとんど何でもビルドできるからです。ビルドファイルの中にたくさんのコードを見たくないので宣言的です。そのため、Gradleは規約の考え方と単純で宣言的なビルドを提供しますが、それによってツールを適応させ、開発者を拡張することもできます。また、デフォルトの動作やさまざまなフックをカスタマイズしてサードパーティの機能を追加する簡単な方法も提供します。
Gradleは両方のツールの良い部分を組み合わせて追加の機能を提供し、Groovyをドメイン固有言語(DSL)として使用します。ビルドライフサイクルや使いやすさなどのMaven機能を備えたAntツールの強力さと柔軟性を備えています。
なぜGradleなのかなぜ今なのか?
ビルドツールの応答は、非標準の拡張メカニズムを通じてスクリプト機能を追加することです。スクリプトコードとXMLを混在させるか、ビルドロジックから外部スクリプトを呼び出すことになります。時間の経過とともにカスタムコードを追加する必要があると想像するのは簡単です。その結果、あなたは必然的に偶然の複雑さを持ち込むことになり、保守性が窓から出てしまいます。
プロジェクトのリリース版をビルドするときに、ファイルを特定の場所にコピーしたいとしましょう。バージョンを特定するには、プロジェクトを説明するメタデータ内の文字列を確認します。それが特定の番号付け方式(たとえば、1.0-RELEASE)と一致する場合は、ファイルをA点からB点にコピーします。外部から見ると、これは簡単な作業のように思えるかもしれません。 XMLに頼らなければならない場合、この単純な論理を表現する多くの伝統的なツールの構築言語はかなり困難になります。
Javaビルドツールの進化
JavaビルドロジックはXMLで記述する必要があります。 XMLは階層データの記述には適していますが、プログラムフローや条件付きロジックの表現には不十分です。構築スクリプトが複雑になるにつれて、構築コードを維持することは悪夢になります。
Ant では、JARターゲットをコンパイルターゲットに依存させます。 Antはあなたのプロジェクトをどのように構成するかについては何のガイダンスも与えていません。それは最大限の柔軟性を可能にしますが、Antはそれぞれのビルドスクリプトをユニークで理解しにくくします。プロジェクトに必要な外部ライブラリは、中央の場所からそれらを引き出すための自動化されたメカニズムがないため、通常バージョン管理にチェックインされます。
2004年7月にリリースされたMaven 1 は、そのプロセスを緩和しようとしました。標準化されたプロジェクトとディレクトリ構造、および依存関係管理を提供しました。残念ながら、カスタムロジックは実装が困難です
Gradle はその世代のビルドツールにぴったりと収まり、最新のビルドツールの多くの要件を満たしています(図1)。それは表現力豊かなDSL、設定アプローチ上の規約、そして強力な依存関係管理を提供します。 XMLを放棄し、動的な言語Groovyを導入してビルドロジックを定義するという正しい動きをします。説得力があるようですね。
Gradleは他のビルドツールの最高の機能を兼ね備えています。
Gradleの魅力的な機能セット
AntやMavenではなくGradleを使ってJavaプロジェクトを構築する理由
Android用のデフォルトのビルドツール(およびJVM上の新しい一連のビルドツール)は、複雑な多言語ビルドのスクリプト作成を容易にするように設計されています。ただし、AntまたはMavenを使用している場合は、変更する必要がありますか?
ビルドスクリプト内でGradleの強力な機能をロック解除するための鍵は、下の画像に示すように、そのドメインモデルを見つけて適用することです。
Gradleはあなたのエンタープライズビルドに固有のすべての要件を知ることができません。フックをライフサイクルフェーズにさらすことで、Gradleはビルドスクリプトの実行動作を監視および設定することができます。
GradleはGroovyで実装されたDSLを公開することによってそのモデルの語彙を確立します。この場合、複雑な問題領域を扱うときに、共通の言語を使用してロジックを表現できるようにすることで、ソフトウェアを構築するという作業は強力なツールになります。
もう1つの例は、ビルドツールによって解決される非常に一般的な問題である、外部ライブラリへの依存関係を表現する方法です。 Gradleには、ビルドスクリプト用に2つの設定ブロックが用意されています。これらを使用して、依存関係とそれらを取得するリポジトリを定義できます。標準のDSL要素があなたのニーズに合わない場合は、Gradleの拡張メカニズムを通してあなた自身の語彙を紹介することさえできます。
他のビルドツールとの統合
下の図に示すように、Gradleは前身のAnt、Maven、およびIvyとうまく連携しています。
プロジェクトのビルドからデプロイまでの自動化
画像内:展開パイプラインの段階。
コードをコンパイルする
ランニングユニットと統合テスト
静的コード分析の実行とテストカバレッジの生成
ディストリビューションを作成する
ターゲット環境のプロビジョニング
成果物のデプロイ
煙と自動機能テストの実行
Gradle
は高度なビルドシステムであると同時に、プラグインを通してカスタムビルドロジックを作成することを可能にする高度なビルドツールキットです。
利点:
マニフェストエントリ
DSLを通じて、以下のマニフェストエントリを設定することが可能です。
ビルドバリアント
デフォルトでは、Androidプラグインは、デバッグ版とリリース版の両方のアプリケーションをビルドするようにプロジェクトを自動的に設定します。
依存関係
JARファイルなど、モジュールが依存しているローカルファイルシステムにバイナリアーカイブがある場合は、そのモジュールのビルドファイルでこれらの依存関係を宣言できます。
最初にリポジトリをリストに追加し、次にMavenまたはIvyがそれらの成果物を宣言するように依存関係を宣言する必要があります。
GradleはGroovy JVM言語に対するもので、AntはJavaに対するものです。基本的に、それはGroovyのビルドツールです。 Antとは異なり、これは完全なGroovy言語に基づいています。たとえば、GradleスクリプトでGroovyスクリプトコードを記述して、特定のドメイン言語に頼らずに何かを実行できます。
IntelliJの特定の統合についてはわかりませんが、特定の「ビルド」言語プリミティブを作成してGroovy言語の一部になるようにGroovyを「拡張」することができると想像してください。 IntelliJ/GoogleはGradleを使って非常に高水準のビルド言語を構築することができましたが、それでも拡張可能なオープンスタンダードを基にした言語です。
Gradleは、Androidプロジェクトだけでなく、さまざまな環境に統合できる自動ビルドツールキットです。
ここであなたがgradleでできることがいくつかあります。
GradleにはAndroidスタジオプロジェクトのデフォルト設定があるため、新規プロジェクトに必要な最小限の設定
依存宣言。ローカルサーバーまたはリモートサーバーでホストされている依存関係jarファイルまたはライブラリファイルを宣言できます。
GradleはあなたのプロジェクトのソースからテストディレクトリとテストAPKを自動的に生成します。
GradleビルドファイルにkeyPassword
やkeyAlias
などの必要な情報をすべて追加すれば、Gradleを使用して署名付きAPKを生成できます。
Gradleは異なるパッケージで複数のAPKを生成し、単一のモジュールから設定を構築することができます。
Android Studioでは、Gradleは依存関係を管理し、カスタムビルドロジックを提供することでAndroidパッケージ(apkファイル)をビルドするために使用されるカスタムビルドツールです。
APKファイル(Androidアプリケーションパッケージ)は特別にフォーマットされたZipファイルです。
Apkファイルは署名され、ADB(Android Debug Bridge)を使用してデバイスにプッシュされ、そこで実行されます。
Gradleは依存関係を管理し、カスタムビルドロジックを定義することを可能にするAndroid用の高度なビルドツールキットです。機能は似ています
ビルドプロセスをカスタマイズ、構成、および拡張します。
同じプロジェクトを使用して、さまざまな機能を持つアプリ用に複数のAPKを作成します。
コードとリソースを再利用してください。
Gradleはカスタムのビルドツールで、APKのビルドに使用されるか、アプリケーションパッケージキットとして知られています。
@ Brian Gardnerによる:
Gradleは、プログラミングプロジェクトのための広範なビルドツールおよび依存関係マネージャです。 Groovyをベースにしたドメイン固有の言語です。 Gradleは、Java、Android、Scalaを含む多くの種類のプロジェクトに対して、慣例的なビルドサポートも提供します。
Gradleの特徴:
Gradleは、複数のソース、プロジェクト、ライブラリなどから数万行のコードを含む複雑なAndroidプロジェクトの構築を自動化することを可能にします。それがあれば、大量の設定仕様に基づいて複数の最適化APKを条件付きで生成できます。興味があるなら、他の答えはGradleのこの面のより多くの詳細を提供します。
ただし、Androidの開発に慣れていない場合は、Gradleが99%のケースでプロジェクトの構築を停止します。それはAndroidのビルドプロセスを効果的に難読化し、基本的にそれを経験の浅い開発者に利用できないようにする不可解で複雑なシステムです。すなわち、初心者レベルのAndroidアプリを構築するためには疑う余地のない初心者が交渉しなかった多くのことを研究し理解する必要がありますといった:
これらすべてのことは、Android開発者が知っていることにとって興味深く有用なものですが、それらは簡単ではなく、参入に対する大きな障害となっています。 OPがこの質問をするきっかけになったのは、シンプルなアプリを構築しようとしてGradleに絶えず邪魔されようとしたためにあまりにも長い時間を費やした後に必然的に新人開発者に打撃を与える欲求不満感だ。この問題は、これらすべてのテクノロジで利用可能な膨大な量の高度に技術的なドキュメントによって、ひどく悪化しています。大量の開発ニーズにもGradleはやり過ぎです。
代わりの方法は、Android SDKで利用可能なツールを自動化することによってプロジェクトを構築するシェルスクリプトを書くことです。このアプローチの長所はたくさんあります。初心者にとっては、おそらくビルドプロセスとAndroidエコシステムを研究し理解するための最善の方法であり、それによってアプリケーションのビルド方法を完全に制御することができます。しかし、このアプローチは、経験の浅いノブがAndroidを試してみるよりも、非常に償いの取れないハイテクヘッドに適しています。
存在しないことで目立つのは(そういったことがあるかどうか私に知らせてください)、それを曖昧にしないと同時に構築プロセスを単純化する(したがってNetBeansやそうではない)縮小された機能セットを持つエントリーレベルの軽量IDEです。 Eclipse)それはおそらくまだGradleを使うことができました(Antの悪いところ)。いくつかの一般的な構成に準拠したAPKを簡単に生成でき、そのようにした場合は、完全なAndroid Studioプロジェクトに発展できるプロジェクト構造を使用できます。
簡単に言うと、GradleはAndroid Studioが提供する2つの重要なプロセスを実装するためのツールです。
Gradle = Groovy + Cradle Hans Dockterフォーラムのコメント
それがちょうど "ビルド"またはAndroid Studioで何かと呼ばれていた可能性がある場合、混乱は少し不必要です。
私たちは開発コミュニティで自分たちのことを困難にするのが好きです。