java.lang.NoClassDefFoundError从单独的应用程序调用活动

时间:2013-08-27 19:41:13

标签: android android-intent noclassdeffounderror

我们在尝试在TestDriver(Centaur-TD)中定义一个intent以在Centaur中启动dataRead_Activity类时遇到此异常。这两个应用程序位于不同的项目中。

删除了这行代码:

Intent aa = new Intent(TestDriver.this, dataRead_Activity.class);

然后,插入这一个:

startActivity(new Intent("cfts.testtools.Centaur.dataRead_Activity"));

logcat信息更改为:

I/ActivityManager(  163): START {act=cfts.testtools.Centaur.dataRead_Activity u=0} from pid 660
W/System.err(  660): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=cfts.testtools.Centaur.dataRead_Activity }
W/System.err(  660):    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1545)
W/System.err(  660):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1416)
W/System.err(  660):    at android.app.Activity.startActivityForResult(Activity.java:3351)
W/System.err(  660):    at android.app.Activity.startActivityForResult(Activity.java:3312)
W/System.err(  660):    at android.app.Activity.startActivity(Activity.java:3522)
W/System.err(  660):    at android.app.Activity.startActivity(Activity.java:3490)
W/System.err(  660):    at cfts.testtools.abtcs_centaur_td.TestDriver$1.onClick(TestDriver.java:304)
W/System.err(  660):    at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
D/dalvikvm(  660): GC_CONCURRENT freed 247K, 9% free 7473K/8199K, paused 19ms+6ms, total 225ms
D/dalvikvm(  660): WAIT_FOR_CONCURRENT_GC blocked 30ms
W/System.err(  660):    at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err(  660):    at android.os.Looper.loop(Looper.java:137)
W/System.err(  660):    at android.app.ActivityThread.main(ActivityThread.java:4745)
W/System.err(  660):    at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err(  660):    at java.lang.reflect.Method.invoke(Method.java:511)
W/System.err(  660):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
W/System.err(  660):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
W/System.err(  660):    at dalvik.system.NativeStart.main(Native Method)

Centaur-TD的清单是:

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

    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" android:debuggable="true">
        <activity
            android:name="cfts.testtools.abtcs_centaur_td.TestDriver"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name="cfts.testtools.centaur.Centaur$dataRead_Activity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="cfts.testtools.centaur.Centaur$dataRead_Activity" />
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

Centaur的宣言是:

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

    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:debuggable="true">
        <activity
            android:name="cfts.testtools.centaur.Centaur"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name="cfts.testtools.centaur.Centaur$dataRead_Activity"
            android:label="@string/app_name"
            android:exported="true">
            <intent-filter>
                <action android:name="cfts.testtools.centaur.Centaur$dataRead_Activity" />
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

1 个答案:

答案 0 :(得分:2)

步骤1:使用自定义操作向第二个活动添加<intent-filter>

<intent-filter>
  <action android:name="com.testapp.ws.XYZ"/>
  <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

步骤2:使用适当的Intent开始该活动:

startActivity(new Intent("com.testapp.ws.XYZ"));

有关详细说明,请参阅此处 - https://stackoverflow.com/a/10961409/826657