首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android工具测试用例

Android工具测试用例
EN

Stack Overflow用户
提问于 2016-02-10 23:38:56
回答 1查看 252关注 0票数 0

我想从另一个apk测试一个活动,这个测试扩展了ActivityInstrumentationTestCase2 (http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase2.html),因为我需要获取活动和工具。

我尝试使用这样的DexClassLoader:

代码语言:javascript
复制
    public MainActivityTest() throws ClassNotFoundException{
    super((new DexClassLoader(
                "/data/app/my-application.apk", "/data/app/my-application",null, MainActivityTest.class.getClassLoader())).loadClass("my-application.MainActivity")))}

但是我得到了一个异常:optimizedDirectory not readable/writable: /data/data/valentin.myapplication2

有解决方案吗?

我需要这个活动,因为我在后面用到了这个:activity.getWindow().getDecorView()

仅供参考:

代码语言:javascript
复制
@Before
public void setUp() throws Exception {
    super.setUp();
    injectInstrumentation(InstrumentationRegistry.getInstrumentation());
    mActivity = getActivity();
}

@Test
public void testRecorder(){

   new ActivityListener(InstrumentationRegistry.getInstrumentation(),mActivity,12).start();
    while(true){
    }
}
EN

回答 1

Stack Overflow用户

发布于 2016-02-11 02:57:11

你永远不应该在你的代码中硬编码那样的路径。首先,/data/app是错误的路径--这是apk本身所在的位置,只有系统可以在那里写入。您可以使用getFilesDir()获取应用程序数据目录的路径,您可以对其进行写入。

使用DexClassLoader时,您必须提供一个可写的路径,因为系统会优化dex文件,并将优化后的版本写入您指定的位置。

代码语言:javascript
复制
public Class getActivityClass(Context ctx)
        throws PackageManager.NameNotFoundException, ClassNotFoundException {
    ApplicationInfo pi = ctx.getPackageManager()
    .getApplicationInfo("my.application", 0);
    String apkPath = pi.sourceDir;

    DexClassLoader loader = new DexClassLoader(apkPath,
            ctx.getFilesDir().getAbsolutePath(), null,
            this.getClass().getClassLoader());
    return loader.loadClass("my-application.MainActivity");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35319487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档