动态加载其他已经安装的apk的dex文件, 并通过反射执行
发布时间:2020-12-14 23:17:23 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 private void useDexClassLoader(){ //创建一个意图,用来找到指定的apk Intent intent = new Intent("com.suchangli.android.plugin",null); //获得
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 private void useDexClassLoader(){ //创建一个意图,用来找到指定的apk Intent intent = new Intent("com.suchangli.android.plugin",null); //获得包管理器 PackageManager pm = getPackageManager(); List<ResolveInfo> resolveinfoes = pm.queryIntentActivities(intent,0); //获得指定的activity的信息 ActivityInfo actInfo = resolveinfoes.get(0).activityInfo; //获得包名 String pacageName = actInfo.packageName; //获得apk的目录或者jar的目录 String apkPath = actInfo.applicationInfo.sourceDir; //dex解压后的目录,注意,这个用宿主程序的目录,android中只允许程序读取写自己 //目录下的文件 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(); } } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、
- java – 为什么一个程序为我编译,但不是为另一个人?
- java – 为什么我的ANTLR构建Ant任务因“无法确定生成的类”
- java – IntelliJ:搜索Checked异常,在方法签名中声明,但从
- EasyExcel写入百万级数据到多sheet---非注解方式
- 关于spring中aop的注解实现方法实例详解
- Java Servlet上传图片到指定文件夹并显示图片
- lombok替代get和set方法
- java – 启动外部JAR文件需要什么,比如Minecraft启动程序?
- java – MVP和GWT小部件之间的通信