我有一个Android活动位于一个单独的dex文件中,我想从我的Android应用程序启动。启动意图后我得到一个例外。
Didn't find class "com.example.testproject.SampleActivity" on path: /data/app/com.example.testproject.apk
我构建了一个活动类,让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()之后,我得到了上面提到的异常。这似乎与intent的上下文有问题,因为异常显示在/data/app/com.example.testproject.apk中查找的类,它不在apk中(dex文件在sd上)卡)。
有任何想法如何解决此问题?
答案 0 :(得分:1)
这不起作用。必须在apk的主要classes.dex中定义apk的AndroidManifest.xml中指定的活动。