debugCompile
を使用して、debug build
のdependency
のみをプルできることを知っています。必要なcode initialization
を実行するための適切で効率的な方法はありますか?依存関係がないと、他のバリアントはコンパイルに失敗します。
いくつかのオプションがあります。
オプション1:すべてのビルドにStethoを含め(compile
の代わりにdebugCompile
を使用)、デバッグビルド用にApplication
クラスでのみ初期化します。
これは非常に簡単です。 Application
クラスで、BuildConfig.DEBUG
そのようです:
if (BuildConfig.DEBUG) {
Stetho.initialize(
Stetho.newInitializerBuilder(this)
.enableDumpapp(Stetho.defaultDumperPluginsProvider(this))
.enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this))
.build()
);
}
オプション2:デバッグビルドにはStethoのみを含め、デバッグビルドとリリースビルドには異なるApplication
クラスを作成します。
Gradleのおかげで、アプリケーションはビルドバリアントごとに異なるソースセットを持つことができます。デフォルトでは、リリースおよびデバッグビルドタイプがあるため、3つの異なるソースセットを使用できます。
アプリケーションコードは現在、すべてmain
ソースセットにあります。アプリケーションのdebug
フォルダーの隣にmain
という名前の新しいフォルダーを作成し、デバッグビルド用に追加するすべてのものについてmain
フォルダーの構造をミラーリングできます。
この場合、Stethoをまったく参照しないApplication
ソースセットにmain
クラスが必要です。
次に、通常のようにStethoを初期化するApplication
ソースセットにdebug
クラスが必要です。
Stethoサンプル でこのセットアップの例を見ることができます。具体的には、 ここがメインApplicationクラス 、および ここがデバッグApplicationクラス です。また、使用するアプリケーションクラスを選択する各ソースセットにマニフェストを設定することに注意してください。
@Tanisの回答を確認してください。
また、次のようなものを使用できます。
デバッグバージョンでのみライブラリを追加します。
dependencies {
debugCompile 'com.facebook.stetho:stetho:1.1.1
}
アプリケーションで次のことができます。
public class ExampleApplication extends Application {
@Override public void onCreate() {
super.onCreate();
StethoUtils.install(this);
}
}
次に、デバッグ/リリースバージョンで異なるStethoUtils
クラスを作成できます。
src/debug/Java/
public class StethoUtils{
public static void install(Application application){
Stetho.initialize(
Stetho.newInitializerBuilder(application)
.enableDumpapp(Stetho.defaultDumperPluginsProvider(application))
.enableWebKitInspector(Stetho.defaultInspectorModulesProvider(application))
.build());
}
}
src/release/Java/
public class StethoUtils{
public static void install(Application application){
// do nothing
}
}
Javaリフレクションを使用するのは完璧なアイデアかもしれません:
private void initStetho() {
if (BuildConfig.DEBUG) {
try {
Class<?> stethoClazz = Class.forName("com.facebook.stetho.Stetho");
Method method = stethoClazz.getMethod("initializeWithDefaults",Context.class);
method.invoke(null, this);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
次に、コンパイルstethoをデバッグできます。
debugCompile 'com.facebook.stetho:stetho:1.5.0'