展会信息港展会大全

如何利用反射加载系统中安装的其他app
来源:互联网   发布日期:2016-01-14 11:34:00   浏览:1414次  

导读:private void useDexClassLoader(){ //获得想要的app Intent intent = new Intent(com.wanted.app, null); PackageManager pm = getPackageManager(); ListResolveInfo resolveinfoes = pm.queryIntentActivities(intent, 0); ActivityInfo actInfo = resolv...

private void useDexClassLoader(){

//获得想要的app

Intent intent = new Intent("com.wanted.app", null);

PackageManager pm = getPackageManager();

List<ResolveInfo> resolveinfoes =pm.queryIntentActivities(intent, 0);

ActivityInfo actInfo = resolveinfoes.get(0).activityInfo;

//获得包名

String pacageName = actInfo.packageName;

//获得apk的目录或者jar的目录

String apkPath = actInfo.applicationInfo.sourceDir;

String dexOutputDir = getApplicationInfo().dataDir;

//native代码的目录

String libPath = actInfo.applicationInfo.nativeLibraryDir;

//创建类加载器,把dex加载到虚拟机中

DexClassLoader calssLoader = new DexClassLoader(apkPath, dexOutputDir, libPath,

this.getClass().getClassLoader());

//利用反射调用插件包内的类的方法

try {

Class<?> clazz = calssLoader.loadClass(pacageName+".Plugin1");

Object obj = clazz.newInstance();

Class[] param = new Class[2];

param[0] = Integer.TYPE;

param[1] = Integer.TYPE;

Method method = clazz.getMethod("function1", param);

Integer ret = (Integer)method.invoke(obj, 1,12);

Log.i("Host", "return result is " + ret);

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (InstantiationException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (NoSuchMethodException e) {

e.printStackTrace();

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

}

赞助本站

人工智能实验室

相关热词: android开发 android教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港