我有一个 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卡片)。
任何想法如何解决这个问题?