Firebase PerformanceをAndroid Studioのgradleタスクapp:transformClassesWithFirebasePerformancePluginForDebug
は他のどのタスクよりも大幅に時間がかかっているため、gradleのビルド時間を劇的に遅くしています。
プロジェクトのFirebaseは、ビルド時間を40%増加させました。デバッグビルドを高速化するために、app/build.gradleファイルとルートbuild.gradleファイルのビルドパラメーターを使用して、デバッグのオン/オフを切り替える可能性を追加しました。
アプリ:
if(!project.hasProperty( "disable-performance-plugin")){プラグインを適用: 'com.google.firebase.firebase-perf'}
root/buildscript/dependencies:
if(!project.hasProperty( "disable-performance-plugin")){classpath( 'com.google.firebase:firebase-plugins:1.1.5'){除外グループ: 'com.google.guava'、モジュール: ' guava-jdk5 '}}
コマンドラインから実行する場合
./gradlew your-task -Pdisable-performance-plugin
Android Studioから作業する場合、フラグをコンパイラオプションに追加します。
既存の回答はすべて有効ですが、それらはすべて何かを見逃しています。
この問題に対処するには、2つの主要なオプションから選択できます。
firebasePerformanceInstrumentationEnabled
プロパティを使用しますこれは、ビルドプロセス中に無効にするための SDKによって提供される公式の方法 です。
これがすること:
transformClassesWithFirebasePerformancePluginFor*
_タスクの実行時間を〜5-10sに短縮します。<meta-data>
_タグとFirebasePerformance.getInstance().setPerformanceCollectionEnabled()
の呼び出しで制御できます。詳細は ドキュメント をご覧ください。これを行う方法:
必要な場合(通常、アプリを公開するときのみ)他のすべてで無効にするよりも、only enableプラグインするほうがはるかに簡単だと思います。ケース。
注:もちろん、手動ビルドでは忘れることがありますを有効にします。したがって、CIがない場合は、Gradleで他の自動スクリプトを追加するか、他の回答で使用されている反対のアプローチに固執する価値があるかもしれません。
ただし、一般に、必要な手順は2つだけです。
_gradle.properties
_ファイルに次の行を追加します。
_firebasePerformanceInstrumentationEnabled=false
_
CI構成または手動ビルドで次のコマンドを使用します。
./gradlew assembleRelease -PfirebasePerformanceInstrumentationEnabled = true
長所:
短所:
firebase-perf
_ Gradleプラグインを適用しないように、カスタムGradleプロジェクトプロパティを使用しますこれがすること:
<meta-data>
_タグとFirebasePerformance.getInstance().setPerformanceCollectionEnabled()
の呼び出しで制御できます。詳細は ドキュメント をご覧ください。これを行う方法:
このアプローチには同様のポイントと警告があり、2つのステップも含まれます。
アプリモジュールの_build.gradle
_ファイルを変更します。
_if (project.hasProperty('useFirebasePerf')) {
apply plugin: 'com.google.firebase.firebase-perf'
}
_
注: you 必要ないプロジェクトレベルに同じチェックを適用する_build.gradle
_:
_classpath "com.google.firebase:firebase-plugins:$firebase_plugins_version"
_
プラグイン自体が有効になっていない場合、Gradleはこの宣言を使用しません。
そして、 ドキュメントに記載されている としてfirebase-plugins v1.1.1以降を使用している場合、そこに_guava-jdk5
_依存関係を除外するために必要ないがあります。
CI構成または手動ビルドで次のコマンドを使用します。
./gradlew assembleRelease -PuseFirebasePerf
長所:
短所:
firebase-perf
_ SDKを除外Firebase Performance SDKのカスタムトレースやその他の機能を使用せず、自動監視のみに依存している場合(つまり、コード内のSDKに依存関係がない場合)、非本番用にこの依存関係を除外できますビルドします。
これを行う方法:
必要なのは、アプリモジュールの_build.gradle
_ファイルを更新することだけです。
最初のオプションを使用することを選択した場合、依存関係を次のように変更します。
_if (project.property('firebasePerformanceInstrumentationEnabled') == 'true') {
implementation "com.google.firebase:firebase-perf:${firebase_perf_version}"
}
_
2番目を選択した場合:
_if (project.hasProperty('useFirebasePerf')) {
implementation "com.google.firebase:firebase-perf:${firebase_perf_version}"
}
_
利点:
欠点:
私の記事 をチェックアウトすることもできます。このトピックについてさらに詳しく説明します。
このスレッドのコメントはすべて有効です。私はデバッグビルドのためにそれを無効にする非常に簡単な方法を提案したい:
if (getGradle().getStartParameter().getTaskRequests().toString().contains("Release")) {
apply plugin: 'com.google.firebase.firebase-perf'
}
transformClassesWithFirebasePerformancePluginForDebug
を無効にする別のオプションを与えるために、ここに私のレシピを示します。
メインbuild.gradleフォルダー内:
if (!project.gradle.startParameter.taskNames.any { taskName ->
taskName.toLowerCase().contains('assemble') && taskName.toLowerCase().contains('debug') }) {
classpath("com.google.firebase:firebase-plugins:$firebasePluginVersion") {
exclude group: 'com.google.guava', module: 'guava-jdk5'
}
}
Build.gradleアプリファイルで:
if (!project.gradle.startParameter.taskNames.any { taskName ->
taskName.toLowerCase().contains('assemble') && taskName.toLowerCase().contains('debug') }) {
apply plugin: 'com.google.firebase.firebase-perf'
}
私もこの問題に遭遇しました。もともとR.Zagórskiによって提供された回答のバリアントを使用していましたが、Gradleフォーラムの similar thread に基づいて、条件付きでプラグインをプロジェクトに適用することは正しい方法ではないようです行く:
プラグインは「プロジェクトの一部」のみに適用できません。適用されるかされないかのどちらかです。
プラグインを条件付きで適用することは、適切に実行できれば機能するように見えますが、正式にサポートされている機能ではありません。同じスレッドのさらに下に、別のポイントが作成されます。
ただし、プラグインを使用すると、より詳細なレベルで設定できます。
案の定、実際にはFirebaseプラグインによって公開されているプロパティがあり、インストルメンテーションのオン/オフを切り替えることができます(したがって、ビルド時間の増加を切り替えます)。ただし、構築プロセス中に正確に適切なタイミングで適用する必要があるため、このプロパティを使用するのは難しくなりますが、いったん取得したら、必要に応じて基本的にピボットできます。
次のコードスニペットは、デバッグビルドバリアントと非デバッグビルドバリアントに基づいてインストルメンテーションをピボットする方法です。 Kotlinで書かれていますが、Groovyに翻訳されると思います。
plugins {
...
id ("com.google.firebase.firebase-perf")
}
...
Android {
...
applicationVariants.all {
val variant = this
val isFirebaseEnabled = !variant.javaCompiler.name.contains("Debug", true)
gradle.taskGraph.whenReady {
if (this.hasTask(variant.javaCompiler))
{
project.FirebasePerformance.isInstrumentationEnabled = isFirebaseEnabled
}
}
}
...
}
これを適切に配置すると、transformClassesWithFirebasePerformancePluginFor*
タスクはすべてのビルドバリアントに対して常に実行されますが、インストルメンテーションが有効になっていないバリアントに対してはほぼ即座に完了します。
Firebase Performanceはperf-plugin
の新しいバージョンをリリースしました(v1.3.)。これにより、無効化 FirebaseパフォーマンスモニタリングGradleプラグインが有効になります特定のビルドバリアント用(buildTypesまたはproductFlavors)。
以下の例:
Android {
// ...
debug {
FirebasePerformance {
// Set this flag to 'false' to disable @AddTrace annotation processing and
// automatic HTTP/S network request monitoring
// for a specific build variant at compile time.
instrumentationEnabled false
}
}
}
リリースノートの参照:
https://firebase.google.com/support/release-notes/Android#update_-_july_10_2019
この回答のオプション2を簡略化しました https://stackoverflow.com/a/53270530/1635488
gradle.properties
でプロパティを定義します
useFirebasePerf = false
Perfプラグインを無効にする
if(useFirebasePerf.toBoolean()){プラグインを適用: 'com.google.firebase.firebase-perf'}
依存関係を削除
if(useFirebasePerf.toBoolean()){implementation 'com.google.firebase:firebase-perf:16.2.3'}
CIビルドに対してのみパフォーマンス監視を有効にします(リリースビルドに対してのみお勧めします)
gradlew assembleRelease -PuseFirebasePerf = true
Android Studioが時間をかけて閉じて時間を構築し始めますAndroidスタジオとイベントは時々コンピューターを起動して再起動します。再起動しますか?
Firebase perfプラグインの新しいバージョン(1.3.0
以上)Kotlin DSLを使用する場合は、次を追加する必要があります。
Android {
...
buildTypes {
...
all {
with((this as ExtensionAware).extensions["FirebasePerformance"] as FirebasePerfExtension) {
setInstrumentationEnabled(!isDebuggable)
}
}
...
}
}
Groovyバージョンの場合、 Firebase documentation を確認できます。