码迷,mamicode.com
首页 > 其他好文 > 详细

DexClassLoader

时间:2014-07-05 20:05:12      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:android   java   使用   文件   cti   代码   

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,布布扣,bubuko.com

DexClassLoader

标签:android   java   使用   文件   cti   代码   

原文地址:http://www.cnblogs.com/kobe8/p/3822622.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!