仅在debugging版本中包含Stetho
我知道我可以使用debugCompile
来debugCompile
debug build
的dependency
。 有没有一个很好的,简化的方法来做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'