dexClassLoader 和 pathClassLoader 后者只能直接加载dex文件(apk安装之后再cache中存在dex文件) 前者可以加载未安装的apk jar包 以及dex文件.
//隐式调用
Intent intent = new Intent("com.example.orm");
PackageManager pm = getPackageManager();
List<ResolveInfo> resolveInfo = pm.queryIntentActivities(intent, 0);
ActivityInfo activityInfo = resolveInfo.get(0).activityInfo;
String outputStr = getApplicationInfo().dataDir;
// // 得到包名
String packageName = activityInfo.packageName;
// // 得到存放jar包的地址 或者apk地址
String dexPath = activityInfo.applicationInfo.sourceDir;
//
String dataPath = activityInfo.applicationInfo.dataDir;
Log.e("yang", "包名:"+outputStr + " " +dexPath);
//
String nativeLibraryDir = activityInfo.applicationInfo.nativeLibraryDir;
//
ClassLoader classLoader = getClassLoader();
DexClassLoader dexClassLoader = new DexClassLoader(dexPath, outputStr, nativeLibraryDir, classLoader);
try {
Class<?> cla = dexClassLoader.loadClass(packageName+".qq");
Constructor<?> con = cla.getConstructor();
Object o = con.newInstance();
// Object o = con.newInstance("构造函数中的参数值");
Method method = cla.getMethod("share");
method.invoke(o);
//构造函数里面有一个字符串类型的参数
Method method2 = cla.getMethod("shareParam",String.class);
method2.invoke(o,"sss");
} catch (Exception e) {
e.printStackTrace();
}