You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android UiAutomator2中获取Application Context?

解决Instrumentation Context无法获取ApplicationContext的问题

嘿,这个坑我之前踩过!咱们先搞清楚核心问题,再一步步解决:

首先你要知道:InstrumentationRegistry.getInstrumentation().getContext()返回的是测试包自身的上下文,而不是你要测试的目标应用的上下文。这就是为什么你觉得找不到合适方法的原因——不是没有,是你拿错了Context实例!

下面给你几个实用的解决思路:

1. 直接获取目标应用的Context(最推荐)

如果你需要的是被测应用的ApplicationContext,别用getContext(),改用Instrumentation的getTargetContext()方法,它专门返回被测应用的上下文,之后就能正常调用getApplicationContext()了:

Context targetAppContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
ApplicationContext appContext = (ApplicationContext) targetAppContext.getApplicationContext();

2. 从测试包Context获取目标应用的ApplicationContext

如果你手里只有测试包的Context,也可以通过包名创建目标应用的上下文实例:

Context testContext = InstrumentationRegistry.getInstrumentation().getContext();
try {
    // 替换成你的被测应用包名
    Context targetContext = testContext.createPackageContext(
        "com.your.target.app.package",
        Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY
    );
    ApplicationContext appContext = (ApplicationContext) targetContext.getApplicationContext();
} catch (PackageManager.NameNotFoundException e) {
    // 处理包名找不到的异常
    e.printStackTrace();
}

3. 用AndroidX Test的简化API(更便捷)

如果你在使用AndroidX Test框架(比如Espresso、JUnit测试),可以直接用ApplicationProvider来获取ApplicationContext,省去Instrumentation的繁琐步骤:

ApplicationContext appContext = ApplicationProvider.getApplicationContext();

补充说明

所有Context理论上都有getApplicationContext()方法,你之前觉得找不到,大概率是因为拿到的是测试包的Context,不是你需要的目标应用上下文。先确认自己要操作的是哪个上下文,再选对应的方法就好啦~

内容的提问来源于stack exchange,提问作者AnswerDroid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:00:55