Android:直接启动正在开发的活动/片段

Android:直接启动正在开发的活动/片段,android,Android,有时,您必须向现有应用程序添加新的活动/片段。此活动/片段可以嵌套,以便用户必须打开应用程序并在到达应用程序之前浏览UI的多个部分才能访问它 在开发这个新的活动/片段时,每次进行更改时,我都必须重新编译整个应用程序,启动它并导航到显示新活动/片段的位置。这很乏味,而且会减慢过程 有没有办法直接启动当前正在开发的活动/片段 增编: 许多人建议修改现有代码或清单,以便应用程序首先启动新的活动/片段: 不得不修改现有代码正是我想要避免的。我觉得这不太对。 因此,我想我可以为此编写一个浓缩咖啡测试,并直

有时,您必须向现有应用程序添加新的活动/片段。此活动/片段可以嵌套,以便用户必须打开应用程序并在到达应用程序之前浏览UI的多个部分才能访问它

在开发这个新的活动/片段时,每次进行更改时,我都必须重新编译整个应用程序,启动它并导航到显示新活动/片段的位置。这很乏味,而且会减慢过程

有没有办法直接启动当前正在开发的活动/片段

增编:

许多人建议修改现有代码或清单,以便应用程序首先启动新的活动/片段:

不得不修改现有代码正是我想要避免的。我觉得这不太对。
因此,我想我可以为此编写一个浓缩咖啡测试,并直接从中启动活动/片段。问题在于,浓缩咖啡仅在测试期间保留活动/片段,因此它在几分之一秒内可见,然后消失。

最好的方法可能是只编写插入指令的测试。这样,不仅可以启动所需的活动,还可以自动检查其行为。您可以通过了解有关自动化测试的更多信息


如果要启动手动测试活动,可以使用。如果将其设置为false,则可以完全控制活动何时启动以及何时完成。只需在您的
@Before
方法中使用
launchActivity()

手动启动它,这就是我能够想到的,多亏了@code学徒答案和另一个答案:

@RunWith(AndroidJUnit4.class)
公共类活动测试{
@统治
公共最终活动测试规则活动测试规则=
新的ActivityTestRule(VanillaActivity.class,false,false);
@试验
public void blockingTest()引发异常{
意图=新意图();
//如果适用,请在此处添加您自己的附加内容。
activityTestRule.launchActivity(意图);
CountDownLatch countdown=新的CountDownLatch(1);
倒计时;
}
}

您可以使用在命令行上启动特定活动。这一进程将是:

  • 更改代码并构建应用程序(构建而不是“运行”)
  • 将应用程序上载到设备
  • 直接启动特定活动:
    adb shell am start-n com.company.MyApp/.SpecificActivity

  • 更多信息:

    不要更改清单中的启动器。在应用程序初始化后的启动程序活动中启动该活动。如何启动应用程序?您是将其导出为apk还是直接从IDE运行/调试它?你可以在你的android清单中添加一个虚拟的启动意图接收器,这样当应用程序打开时,你的活动就可以直接开始了。这就是我的想法(见我的附录),但如何告诉浓缩咖啡保持我的活动/片段显示,而不是在测试完成后立即将其撕毁?@Marcoromo,您的测试都是自动化的,所以“消失的活动”不是问题。但是,如果您需要进行一些手动测试,查看我的编辑。我同意,但我认为编写自动化UI测试来验证布局设计并不理想:例如,您真的想编写UI测试来检查某个活动是否具有特定的背景颜色,或者其中的cardview是否具有特定的角半径?@MarcoRomano我觉得验证背景颜色的测试可以有用。它更多的是确保背景颜色不会意外更改,而不是测试代码是否实际生成正确的背景。请记住,失败的测试实际上比通过测试提供的信息更多。我曾尝试在@Before中使用
    ActivityTestRule.launchActivity(Intent-Intent)
    ,但该活动仍然仅在测试期间可见(即几秒钟)。
    @RunWith(AndroidJUnit4.class)
    public class VanillaActivityTest {
    
    @Rule
    public final ActivityTestRule<VanillaActivity> activityTestRule =
            new ActivityTestRule<>(VanillaActivity.class, false, false);
    
    @Test
    public void blockingTest() throws Exception {
        Intent intent = new Intent();
        // Add your own intent extras here if applicable.
        activityTestRule.launchActivity(intent);
        CountDownLatch countdown = new CountDownLatch(1);
        countdown.await();
    }
    
    }