0

我有一个 android 活动位于一个单独的 dex 文件中,我想从我的 android 应用程序启动它。启动意图后出现异常。

Didn't find class "com.example.testproject.SampleActivity" on path: /data/app/com.example.testproject.apk

我建了一个activity类,让Eclipse把它放到一个dex文件中

public class SampleActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_sample);
    setContentView(getIntent().getIntExtra("LAYOUT", -1));

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.sample, menu);
    return true;
}

}

我将该活动添加到我的主应用程序清单文件中

    <activity
        android:name="com.example.testproject.SampleActivity"
        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_sample.xml 布局文件添加到我的主应用程序项目中,这样我就可以通过 Intent 将它传递给其他活动

然后从主应用程序中,我建立了一个调用其他活动的意图,如下所示

            String p = Environment.getExternalStorageDirectory().getPath() + "/classes.dex";
            ClassLoader dexLoader = new DexClassLoader(p, getCacheDir().getAbsolutePath(), null, getClassLoader());

            try {
                Class<?> activityClass = dexLoader.loadClass("com.example.testproject.SampleActivity"); 
                Intent intent = new Intent(Intent.ACTION_MAIN);
                intent.setClass(getApplicationContext(), activityClass);
                intent.putExtra("LAYOUT", R.layout.activity_sample);
                startActivity(intent);
                finish();  

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

该类加载正常,但在调用 startActivity() 后,我得到了上面提到的异常。这似乎是意图上下文的问题,因为异常表明正在 /data/app/com.example.testproject.apk 中查找该类,而该类不在 apk 中(dex 文件位于 sd卡片)。

任何想法如何解决这个问题?

4

1 回答 1

1

这行不通。在 apk 的 AndroidManifest.xml 中指定的活动必须在该 apk 的 main classes.dex 中定义。

于 2013-05-10T17:42:06.620 回答