dexclassloader 实现一种动态加载另一个apk中类的功能
场景:关于dexclassloader 实现一种动态加载另一个apk中类的功能解决办法
关于dexclassloader 实现一种动态加载另一个apk中类的功能
问题处于第一个类的Intent intent=new Intent("com.xikang.yjc.text",null);
final List<ResolveInfo> plugins=pm.queryIntentActivities(intent, 0);
plugins这个是空的 是我启动的这个"com.xikang.yjc.text"有问题吗? 这个是写调用apk的包名吗?
------解决方案--------------------
贴主,搞定了,咋不说下怎么做的???
关于dexclassloader 实现一种动态加载另一个apk中类的功能
- Java code
public class TActivity extends Activity { private TextView text; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); } private void init(){ text=(TextView)findViewById(R.id.text); Intent intent=new Intent("com.xikang.yjc.text",null); PackageManager pm=getPackageManager(); final List<ResolveInfo> plugins=pm.queryIntentActivities(intent, 0); System.out.println(plugins.size()); ResolveInfo rinfo=plugins.get(0); ActivityInfo ainfo=rinfo.activityInfo; String packageName=ainfo.packageName; String dexPath=ainfo.applicationInfo.sourceDir; String dexOutputDir=getApplicationInfo().dataDir; String libPath=ainfo.applicationInfo.nativeLibraryDir; DexClassLoader cl=new DexClassLoader(dexPath, dexOutputDir, libPath, this.getClass().getClassLoader()); try { Class<?> clazz=cl.loadClass(packageName+".AndroidTextActivity"); Object obj=clazz.newInstance(); Class[] param=new Class[2]; param[0]=Integer.TYPE; param[1]=Integer.TYPE; Method action=clazz.getMethod("tt", param); Integer i=(Integer)action.invoke(obj, 12,34); text.setText(i); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
- Java code
package com.xikang.yjc.text; import android.app.Activity; import android.os.Bundle; public class AndroidTextActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void tt(int a,int b){ System.out.println(a+b); } }
问题处于第一个类的Intent intent=new Intent("com.xikang.yjc.text",null);
final List<ResolveInfo> plugins=pm.queryIntentActivities(intent, 0);
plugins这个是空的 是我启动的这个"com.xikang.yjc.text"有问题吗? 这个是写调用apk的包名吗?
------解决方案--------------------
贴主,搞定了,咋不说下怎么做的???