DexClassLoader加载自己写的第三方jar包,例如金山毒霸需要加载ksremote.jar。

现在将DexClassLoader加载jar包成果分享一下。
   1.新建Android工程,封装功能java类。
   2.选中需要导出的文件夹,右键选中“Export”->"Java(Jar file)"导出jar文件。
   3.使用dx工具将jar包转换为android 字节码。
      命令:dx  --dex --Output=xx.jar    hello.jar
   4.将dx工具处理的xx.jar拷贝到工程raw目录下。
   5.在工程主Activity的onCreate函数中读取raw下的文件,并存储在当前应用目录。
      我的例子代码:
       InputStream inputStream = getResources().openRawResource(
        R.raw.mtnbinder);
    dexInternalStoragePath = new File(
        getDir(APP_JAR, Context.MODE_PRIVATE), DEX_NAME);
    if (!dexInternalStoragePath.exists()) {
      try {
        dexInternalStoragePath.createNewFile();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
    
      FileOutputStream fileOutputStream = new FileOutputStream(
          dexInternalStoragePath);
      CopyFile.copyFile(inputStream, fileOutputStream);
        6.使用DexClassLoader调用jar包。
          我的例子代码:
           final File optimizedDexOutputPath = getDir(APP_JAR,
            Context.MODE_PRIVATE);
        try {
          DexClassLoader classLoader = new DexClassLoader(
              dexInternalStoragePath.getAbsolutePath(),
              optimizedDexOutputPath.getAbsolutePath(), null,
              getClassLoader());
          // com.mtn.binder.HookIPhoneSubInfo
          Class class1 = classLoader
              .loadClass("com.mtn.binder.HookIPhoneSubInfo");
          Method method = class1.getMethod("hook", new Class[] {});
          method.invoke(class1, new Object[] {});

运行之后,就可以看到调用jar包成功。

DexClassLoader的更多相关文章

  1. [原创]Andorid DexClassLoader的创建过程解析(基于5.0)

    做Android插件框架时,经常会用到dex的动态加载,就要直接或间接的使用DexClassLoader,在new DexClassLoader的时候Android系统做了很多工作,下面我们详细分析一 ...

  2. Android 使用DexClassLoader要执行其他apk方法

    Android在apk文件dex文件是java编译出来.class次打包,当然在打包之前会利用自己的协议做一些数据处理,比如优化函数表和变量表.在java程序中是使用classloader来载入这些编 ...

  3. 类装载器DexClassLoader (android内核剖析)

    在java环境中,有个概念叫做"类装载器",其作用是动态装载Class文件.标准的java SDK中有一个ClassLoader类,借助它可以装载 想要的Class文件,每个Cla ...

  4. Android类装载器DexClassLoader的简单使用-----制作android插件的前奏

    声明:此篇文章借鉴<android内核剖析>整理得来. 一.装载器简介 “类装载器”(ClassLoader),顾名思义,就是用来动态装载class文件的.标准的Java SDK中有个Cl ...

  5. DexClassLoader和PathClassLoader

    Android的ClassLoader体系 在Android中可以跟java一样实现动态加载jar,但是Android使用Dalvik VM,不能直接加载java打包jar的byte code,需要通 ...

  6. DexClassLoader和PathClassLoader载入Dex流程

    0x00 在上一篇文章apk安装和优化原理,在最后我们分析了DexClassLoader和PathClassLoader的构造函数的不同. PathClassLoader最后调用的是new DexFi ...

  7. DexClassLoader和PathClassLoader类载入机制

    0x00 在DexClassLoader和PathClassLoader载入Dex流程一文中,我们分析了dex文件怎样形成了DexFile结构体.本文中解说类载入机制,实际上就是生成ClassObje ...

  8. Android插件化(二):使用DexClassLoader动态载入assets中的apk

    Android插件化(二):使用DexClassLoader动态载入assets中的apk 简单介绍 上一篇博客讲到.我们能够使用MultiDex.java载入离线的apk文件.须要注意的是,apk中 ...

  9. DexClassLoader动态加载分析

    转载自:http://www.blogfshare.com/dexclassloader.html 看到原来有把原始的dex文件加密保存,然后解密后使用DexClassLoader加载文件的方法,就来 ...

随机推荐

  1. python标准库介绍——5 re模块详解

    == re 模块== "Some people, when confronted with a problem, think 'I know, I'll use regular expres ...

  2. MySQL Proxy 实现 MySQL 读写分离提高并发负载

    还在学习,学完了在写笔记 (这个先安装lua:https://www.cnblogs.com/fps2tao/p/9163959.html ) 工作拓扑: MySQL Proxy有一项强大功能是实现“ ...

  3. 怎么使用 ab.exe 测试多个url。 how to use ab.exe test many url

    from a commandline in windows: for /F %q in (list.txt) DO ab -n 1000 https://test.com/search?%q   I ...

  4. Spring在xml配置里配置事务

    事先准备:配置数据源对象用<bean>实例化各个业务对象. 1.配置事务管理器. <bean id="transactionManager" class=&quo ...

  5. 【Android】3.18 示例18--自定义绘制功能

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 简介:介绍自定义绘制点.线.多边形.圆等几何图形和文字 详述: (1)支持绘制凸多边形,如要绘制凹多边形请用三 ...

  6. gtk-gnash大量占用cpu解决办法

    http://blog.csdn.net/papenghan/article/details/7727955 gnash是一个firefox的flash插件版本.当使用firefox打开含有falsh ...

  7. asp.net实现md5加密

    MD5加密简单的说就是把一段明文 通过某种运算方式 求出密文.在ASP.NET中MD5的加密方式很简单,详细介绍看下文 MD5加密简单的说就是把一段明文 通过某种运算方式 求出密文.例如:明文为:ab ...

  8. js 中object对象的操作

    n = object对象 for(var p in n){ console.log(p);// 取得是key值 console.log(n[p]);//取得是value值 } 继之前js中数组的常用方 ...

  9. java 多线程5: java 终止线程及中断机制 (stop()、interrupt() 、interrupted()、isInterrupted())

    JAVA中有3种方式可以终止正在运行的线程 ①线程正常退出,即run()方法执行完毕了 ②使用Thread类中的stop()方法强行终止线程.但stop()方法已经过期了,不推荐使用 ③使用中断机制i ...

  10. C#中一道关于员工信息系统的题(主要考察LinQ和正则表达式验证)

    今天上午进行了公司的C# C level考核,最后一道编程题是关于员工信息系统的,题目的要求大概是这样的:1.要可以保存员工信息(XXXXX),并且要用正则表达式对输入信息进行验证:2.要可以对员工信 ...