仅在debugging版本中包含Stetho

我知道我可以使用debugCompiledebugCompile debug builddependency 。 有没有一个很好的,简化的方法来做code initialization ,这也是必需的? 没有依赖性,其他变体将无法编译。

你有几个select。

选项1:包括所有版本的debugCompile (使用compile而不是debugCompile ),并且只在你的Application类中初始化它以用于debugging版本。

这很容易做到。 在你的Application类中,像这样检查BuildConfig.DEBUG

 if (BuildConfig.DEBUG) { Stetho.initialize( Stetho.newInitializerBuilder(this) .enableDumpapp(Stetho.defaultDumperPluginsProvider(this)) .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this)) .build() ); } 

选项2:只包含用于debugging版本的Stetho,并为debugging版本和发行版本创build不同的Application类。

感谢Gradle,应用程序可以为不同的构build变体提供不同的源代码集。 默认情况下,你有发布和debugging版本types,所以你可以有三个不同的源集:

  • debugging您只需要在debugging版本中的代码
  • 您只需要在发布版本中发布代码
  • 主要用于所有版本的代码

您的应用程序代码可能全部位于main源代码集中。 您可以简单地在应用程序的main文件夹旁边创build一个名为debug的新文件夹,并对您要为debugging版本添加的所有内容进行镜像。

在这种情况下,您需要在您的main源集中没有引用Stetho的Application类。

然后,您需要debug源代码集中的Application类,像通常那样初始化Stetho。

您可以在Stetho示例中看到此设置的示例 。 具体来说, 这里是主要的应用程序类 , 这里是debugging应用程序类 。 还要注意,他们在每个源集合中设置了select使用哪个应用程序类的清单。

检查@Tanis的答案。

你也可以使用这样的东西:

仅在debugging版本上添加库。

 dependencies { debugCompile 'com.facebook.stetho:stetho:1.1.1 } 

在你的应用程序中,你可以做:

 public class ExampleApplication extends Application { @Override public void onCreate() { super.onCreate(); StethoUtils.install(this); } } 

然后,您可以在debugging/发行版本中创build不同的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 } } 

使用javareflection可能是一个完美的想法:

 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(); } } } 

那么我们可以debugging编译stetho:

 debugCompile 'com.facebook.stetho:stetho:1.5.0'