【问题标题】:Unable to resolve activity for: Intent when instrumentation-testing android activities无法解析活动:仪器测试 android 活动时的意图
【发布时间】:2012-01-13 17:48:54
【问题描述】:

我在尝试在 android 上运行仪器测试时遇到错误。我编写了一个名为 AudioPlayerActivity 的 Activity,它位于包 com.mycompany.mobile.android.gui 中,现在我正在尝试测试它的 GUI项目,我正在运行以下错误:

java.lang.RuntimeException:无法解析以下活动:Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.mycompany.mobile.android.gui/.AudioPlayerActivity }

我已阅读this question,并遵循那里的建议,但无济于事。我也搜索了错误,但没有找到任何帮助。

这是我的测试项目的 AndroidManifest.xml 的样子:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mycompany.mobile.android.gui"
    android:versionCode="1"
    android:versionName="1.0" >

    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.mycompany.mobile.android.gui" />
    <application>
        <uses-library android:name="android.test.runner" />
    </application>

    <uses-sdk android:targetSdkVersion="7" />
    <supports-screens android:anyDensity="true" />
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>

这是我的仪器测试。

包 com.mycompany.mobile.android.gui;

import android.test.ActivityInstrumentationTestCase2;

import com.mycompany.mobile.android.gui.AudioPlayerActivity;

public class TestMusicPlayerActivityTest extends ActivityInstrumentationTestCase2<AudioPlayerActivity> {
    public TestMusicPlayerActivityTest() {
            super("com.mycompany.mobile.android.gui", AudioPlayerActivity.class);
    }

    public TestMusicPlayerActivityTest(String name) {
        super("com.mycompany.mobile.android.gui", AudioPlayerActivity.class);
    }

    public TestMusicPlayerActivityTest(String pkg, Class<AudioPlayerActivity> activityClass) {
        super("com.mycompany.mobile.android.gui", AudioPlayerActivity.class);
    }

    public void testSomething() {
        System.out.println("Nothing works :(");
        System.out.println(getActivity());
    }   
}

我们通过 maven 运行整个过程,但这不应该是问题的一部分。

如您所见,被测试的 Activity 也位于同一个包中。我不会像大多数遇到此问题的人那样使用活动而不是包名称来调用超级构造函数。

为了您的兴趣,这是描述测试活动的 AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mycompany.mobile.android.gui"
    android:versionCode="1"
    android:versionName="1.0" >

    <!-- omitted Uses permission + Uses SDK -->
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:debuggable="true"
        android:theme="@style/NoTitleBar"
    >
    <!-- omitted other activities -->
        <activity 
            android:name="com.mycompany.mobile.android.gui.AudioPlayerActivity"
            android:screenOrientation="portrait" ></activity>
    </application>
</manifest>

我还将活动添加到 AndroidManifest.xml,但这并没有改变任何东西。我还尝试为所需的活动添加 MAIN/LAUNCHER 意图过滤器,但这并没有改变测试的结果。我尝试过用额外的东西开始活动,没有额外的东西,这也没有改变结果。

【问题讨论】:

    标签: java android instrumentation


    【解决方案1】:
    <?xml version="1.0" encoding="utf-8"?>
    
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.mycompany.mobile.android.gui"
    ... ...
    

    您的 Android 项目和 Android 测试项目是否使用相同的包名称?这可能是个问题,但我不确定它是否会导致您的 java.lang.RuntimeException。

    根据官方开发指南here,您的测试项目的包名必须与您测试的项目不同:

    Android 包名称是 .apk 文件的唯一系统名称,由包清单中元素的“android:package”属性设置。 您的测试包的 Android 包名必须与被测应用的 Android 包名不同。 默认情况下,Android 工具通过在包名后附加“.test”来创建测试包名正在测试的应用程序。

    尝试为您的测试项目使用包名称 com.mycompany.mobile.android.gui.test。

    【讨论】:

    • 这个现在无效了。
    【解决方案2】:

    您正在将其作为 Android 项目运行,请尝试将其作为 Android 测试项目运行

    adb shell am instrument -e package -w /android.test.InstrumentationTestRunner

    【讨论】:

    • 我很伤心,我正在通过 maven 运行它。我已经粘贴了 pom.xml here。删除 testSourceDirectory 和 sourceDirectory 文件夹并没有改变结果。
    猜你喜欢
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    相关资源
    最近更新 更多