画面録音、ネットワークアクティビティロギング、バグレポートの生成、その他多くの便利な機能をサポートするAndroidアプリ向けのスマートで信頼性が高く、高度にカスタマイズ可能なデバッグメニューライブラリ。
このリポジトリをクローンし、ビルドバリアントを選択し、アプリの構成を実行します。このように見えるはずです:
このデモアプリケーションには、ビーグルのセットアップ方法と、紹介されているさまざまな機能を実装する方法に関する指示も含まれています。プロジェクトでライブラリを使用することに興味がある場合は、必ず試してみてください。自分で構築したくない場合は、プレイストアからダウンロードすることもできます。
アプリのチュートリアルでは、このReadmeのすべてをカバーしていますが、さらに詳しく説明しています。図書館で何が達成できるかについてのアイデアを得る別の方法は、ビーグルで解決できるさまざまな問題を提示するこの記事です。
下のテキストの壁があなたの好みには長すぎる場合は、素敵な構成に必要なすべてのコードを含むこの要点をチェックしてください。それ以外の場合は、段階的にそれをしましょう:
以下がプロジェクトレベルのbuild.gradleファイルの一部であることを確認してください。
allprojects {
repositories {
…
mavenCentral()
}
}
デバッグメニューの実際のUIは、依存関係の接尾辞によって指定されている複数の方法で表示できます。次のバージョンが存在します:
DebugMenuView
の表示はあなたの責任です(推奨されません:Shake to open、 Beagle.show()
、 Beagle.hide()
、関連するVisibilityListener
、および挿入図処理ロジックは箱から出していません)。したがって、たとえば、引き出しUIを好む場合は、アプリレベルのbuild.gradleファイルに次のようなものを追加する必要があります(最新バージョンのコードスニペットの下のウィジェットを確認してください):
dependencies {
…
def beagleVersion = " 2.9.8 "
debugImplementation " io.github.pandulapeter.beagle:ui-drawer: $b eagleVersion "
releaseImplementation " io.github.pandulapeter.beagle:noop: $b eagleVersion "
}
最新バージョンは次のとおりです。
注:引き出しUIの場合、 Activity
のonBackPressed()
メソッドを上書きした場合、デフォルトのバックナビゲーション処理が常に期待どおりに機能するとは限らないことに気付くかもしれません。これを修正するには、すべてのActivity
のonBackPressed()
で、 Beagle.hide()
他のチェックを行うか、スーパー実装を呼び出す前にfalseを返すことを確認する必要があります。
できればApplication
のonCreate()
メソッドでは、1つのコードのみです。
Beagle .initialize( this )
オプションで、次のパラメーターをこの関数に追加できます。
Application
/ Activity
で使用されているものが適切でない場合に備えて、 themeResourceId
プロパティを使用してデバッグメニューのカスタムテーマを指定できます。注: .NoActionBar
マテリアルテーマを拡張することをお勧めします。デフォルトでは、デバイスを振ってビーグルをフェッチできます。
この後、多くのモジュールを提供する必要がありますが、この構成はいつでも(任意のスレッドから)変更でき、UIは自動的に更新されます。これを行う最も簡単な方法は、次のように電話することです。
Beagle .set(module1, module2, …)
この時点で、2つのオプションに注意する必要があります。
ビルトインモジュールで何が可能かについてのいくつかのアイデア、またはモジュール構成のプレビューとそのコードを生成するために使用できるインタラクティブツールについては、ショーケースアプリをご覧ください。いくつかの可能性のより視覚的なガイドは、この記事です。
ほとんどのプロジェクトで機能するはずの最小限の例です。
Beagle .set(
HeaderModule (
title = getString( R .string.app_name),
subtitle = BuildConfig . APPLICATION_ID ,
text = " ${ BuildConfig . BUILD_TYPE } v ${ BuildConfig . VERSION_NAME } ( ${ BuildConfig . VERSION_CODE } ) "
),
AppInfoButtonModule (),
DeveloperOptionsButtonModule (),
PaddingModule (),
TextModule ( " General " , TextModule . Type . SECTION_HEADER ),
KeylineOverlaySwitchModule (),
AnimationDurationSwitchModule (),
ScreenCaptureToolboxModule (),
DividerModule (),
TextModule ( " Logs " , TextModule . Type . SECTION_HEADER ),
NetworkLogListModule (), // Might require additional setup, see below
LogListModule (), // Might require additional setup, see below
LifecycleLogListModule (),
DividerModule (),
TextModule ( " Other " , TextModule . Type . SECTION_HEADER ),
DeviceInfoModule (),
BugReportButtonModule ()
)
一時モジュールを追加する必要がある場合、 Beagle.add()
は、提供されたライフサイクルが終了したら、指定されたモジュールを自動的に削除するオプションのlifecycleOwner
パラメーターがあります。モジュールID-Sを使用して手動でBeagle.remove()
を呼び出すこともオプションです。
Beagle.log()
を呼び出すことは、loglistmoduleにアイテムを追加する最も簡単な方法ですが、純粋なコトリンモジュールからこの機能にアクセスするために特別な回避策が必要です。別の頻繁なユースケースは、木材との統合です。
Beagle.log()
が純粋なKotlin / Javaモジュールから提供するのと同じ機能にアクセスするには、最初に問題のモジュールに以下を追加する必要があります。
dependencies {
…
api " io.github.pandulapeter.beagle:log: $b eagleVersion "
// Alternative for Android modules:
// debugApi "io.github.pandulapeter.beagle:log:$beagleVersion"
// releaseApi "io.github.pandulapeter.beagle:log-noop:$beagleVersion"
}
これらのライブラリは、 Application
クラスで初期化されたときにメインライブラリに接続する必要があるBeagleLogger
オブジェクトを提供します。
Beagle .initialize(
…
behavior = Behavior (
…
logBehavior = Behavior . LogBehavior (
loggers = listOf ( BeagleLogger ),
…
)
)
)
ログメッセージを追加するには、次のことを呼び出すことができます。
BeagleLogger .log(…)
メッセージリストは、通常のBeagle.log()
関数(タグでフィルタリングされない限り)を使用してログに記録されたものとマージされ、logListModuleを使用して表示できます。 BeagleLogger.clearLogEntries()
Beagle.clearLogEntries()
を使用することもできます。
木材でログインしたイベントをデバッグメニューに自動的に追加するには、特別なツリーを植えることが最も簡単なソリューションです。
Timber .plant(
object : Timber . Tree () {
override fun log ( priority : Int , tag : String? , message : String , t : Throwable ? ) =
Beagle .log( " [ $tag ] $message " , " Timber " , t?.stackTraceToString())
}
)
これらのログのみを表示する特別なLogListModuleを作成するには、モジュールのラベルコンストラクターパラメーターを「木材」に設定するだけです。
ネットワークインターセプターをメインライブラリとバンドルすることは、主に、上記のロガーソリューションと同様に、Android SDKを使用しない純粋なKotlin依存関係を提供するために行われました。現時点では、BeagleはOkhttpネットワークライブラリにフックしてNetworkLogListModuleのコンテンツを提供できますが、 Beagle.logNetworkEvent()
手動で呼び出すことは常にオプションです。
ネットワークロジックが実装されているモジュールに以下を追加します。
dependencies {
…
api " io.github.pandulapeter.beagle:log-okhttp: $b eagleVersion "
// Alternative for Android modules:
// debugApi "io.github.pandulapeter.beagle:log-okhttp:$beagleVersion"
// releaseApi "io.github.pandulapeter.beagle:log-okhttp-noop:$beagleVersion"
}
これにより、最初にメインライブラリに接続する必要があるBeagleOkHttpLogger
オブジェクトが導入されます。
Beagle .initialize(
…
behavior = Behavior (
…
networkLogBehavior = Behavior . NetworkLogBehavior (
networkLoggers = listOf ( BeagleOkHttpLogger ),
…
)
)
)
最後のステップは、 Interceptor
のセットアップです(厄介なキャストは、NOOPの実装が同じパブリックAPIを持っている間に何もしないことを確認するためにあります):
val client = OkHttpClient . Builder ()
…
. apply { ( BeagleOkHttpLogger .logger as ? Interceptor ? )?. let { addInterceptor(it) } }
.build()
ライブラリは、猛攻撃の例外を傍受し、ダイアログにスタックトレースを表示できます。ユーザーは、自動的に開かれるバグレポート画面を使用してクラッシュレポートを共有できます。この機能は、メインモジュール(ビーグルが初期化されている場合)に追加する必要がある別の依存関係によって達成されます。
dependencies {
…
debugImplementation " io.github.pandulapeter.beagle:log-crash: $b eagleVersion "
releaseImplementation " io.github.pandulapeter.beagle:log-crash-noop: $b eagleVersion "
}
依存関係が追加された後、新しく導入されたBeagleCrashLogger
オブジェクトをメインライブラリに接続する必要があります。
Beagle .initialize(
…
behavior = Behavior (
…
bugReportingBehavior = Behavior . BugReportingBehavior (
crashLoggers = listOf ( BeagleCrashLogger ),
…
)
)
)
この機能を他のクラッシュレポートソリューションと同時に使用することは信頼できません。
また、 log-crash
依存関係を導入することにより、ビーグルのバグレポートアクティビティは別のプロセスで実行されることに注意してください(たとえば、Multi-Processアプリの特別な初期化呼び出しが必要です)。
すべてのパブリックアーティファクトのnoop
実装は、生産リリースにビーグル関連のロジックを含めないデフォルトの方法です。これはほとんどのプロジェクトで十分なはずですが、デバッグメニューに個別のラッパーモジュールを作成することで改善できます。これは、リリースビルドに空の実装があるインターフェイスの背後にあるビーグルへのすべての呼び出しを隠すことを意味します。このアプローチには、独自の利点と欠点があります。
noop
アーティファクトを使用していないことを確認してくださいApplication
クラスのinitialize()
関数を呼び出してください。そのクラスがマニフェストに適切に登録されていることを確認してくださいFragmentActivity
に拡張されることを確認してください(たとえば、 AppCompatActivity
良い選択です)。 Android StudioのEmpty Compose Activity
テンプレートを使用している場合は、デフォルトの親クラスを変更する必要があります。デフォルトでは、Beagleは現在のActivity
のテーマを使用しています。ただし、重要なテーマが機能する必要があるため、さまざまなテーマ属性が見つからないことによって引き起こされるクラッシュがある場合は、デバッグメニューのテーマを、初期化中に提供されたテーマのテーマのプロパティをthemeResourceId
テーマでオーバーライドします。
ビーグルは、すべてのActivity
のレイアウトの上にFragment
を追加することで機能します。これは不要であるか不可能な場合があります。ライブラリには、除外されたActivity
パッケージ名のリストが付属していますが、初期化中に提供された動作インスタンスのshouldAddDebugMenu
lambdaプロパティを使用して、必要に応じて追加のフィルタリングを提供できます。
初期化中に提供される外観インスタンスのthemeResourceId
プロパティの.NoActionBar
マテリアルテーマを設定します。
すべてのパブリック機能はKDOCで文書化されています。 Beaglecontractファイルは、組み込みのすべての機能について学習するための良いスタートです。個々のモジュールについては、関連するクラスヘッダーを参照してください。
フードの下にあるものに興味がある場合は、このドキュメントがソースコードをナビゲートする際に役立ちます。
すべてのバージョンの変更については、リリースページをご覧ください。
ライブラリはセマンティックバージョンの使用を使用しています: Major.minor.patchパッチ変更にはバグの修正のみが含まれ、マイナーな変更が新しい機能を追加し、主要な変更によりAPIに壊れた修正が導入されます。
既知の問題のリストと図書館の計画された機能強化については、問題ページをご覧ください。
バグが見つかった場合、または質問 /機能のリクエストがある場合は、新しい問題を開くことをheしないでください!
私の作品が便利で少量の寄付を検討していると感じた場合、ショーケースアプリのセクションにはオプションがあります。前もって感謝します!
Copyright 2022 Pandula Péter
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.