加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

动态加载其他已经安装的apk的dex文件, 并通过反射执行

发布时间:2020-05-24 21:22:24 所属栏目:Java 来源:互联网
导读:动态加载其他已经安装的apk的dex文件, 并通过反射执行

下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。

脚本之家小编现在分享给大家,也给大家做个参考。

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

以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读