Activity 类 能否仅在 development/debug 期间启动?

Can Activity classes be made launchable only during development/debug?

我遇到的一个常见情况是,我希望在将自定义 View 作为大型应用程序的一部分进行开发时,在屏幕上对其进行可视化测试。我意识到存在单元测试,特别是使用 ActivityUnitTestCase,但据我了解,这些框架实际上并没有在屏幕上可见地附加组件。

目前,我倾向于这样做的方式是将组件放置在应用程序中实际使用它的地方。这通常意味着需要等待一段时间才能启动应用程序,或者在应用程序可见之前浏览应用程序的各个部分,这会变得很麻烦。

我发现的更好的方法是在应用程序中创建一个纯粹用于测试目的的 Activity(例如,简单地显示我正在开发的自定义 View),这是启动以显示我正在处理的自定义 View(或其他)。为此,我在清单中分配给 Activity 的唯一意图过滤器是 android.intent.action.MAIN,而 不是 android.intent.category.LAUNCHER。然后,我可以在 Android Studio 中简单地创建一个 Run/Debug 配置来直接启动那个 Activity。据我所知, 有效地允许我拥有 Activity 类,它只能由我从 IDE 发射。

我的问题是:

  1. 省略 android.intent.category.LAUNCHER 是否保证应用程序的用户无法以任何方式启动 Activity 也不知道它的存在? Activity 类 仅用于开发是否安全?

  2. 是否有任何类型的工作流或测试框架可以用来改进我的工作方式?

为什么不声明一些像

这样的值
public static boolean IS_DEBUG = true;

然后在你想显示的任何部分,只要把条件放在

if (IS_DEBUG) {
    your_develop_view.setVisibility(View.VISIBLE);
    //...
}
else {
    your_develop_view.setVisibility(View.GONE);
}

完成开发后。在发布之前,只需更改

IS_DEBUG = false;

I realise that unit testing exists, particularly using ActivityUnitTestCase, but as far as I understand these frameworks don't actually attach the components visibly on screen.

嗯,ActivityInstrumentationTestCase2 和新 ActivityTestRule 一样。我不记得玩过 ActivityUnitTestCase.

Does omitting android.intent.category.LAUNCHER guarantee that users of the application won't be able to launch that Activity by any means nor be aware of its existence?

没有。他们启动它并不容易,但它是导出的并且有一个 <intent-filter>,所以有人可以找到方法。

Is this a safe to have Activity classes for development only?

假设您使用的是 Android Studio,我会将它们放入您的 debug 源集中。 Here is a sample projectmain 中有生产启动器 activity,在 debug 中有诊断 activity。在 release 构建中,诊断 activity 甚至不发货。

不要定义自己的 IS_DEBUG,只需使用 BuildConfig.DEBUG