反射机制android

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();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值