博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 动态类加载
阅读量:6432 次
发布时间:2019-06-23

本文共 1537 字,大约阅读时间需要 5 分钟。

Android程序可以通过动态类加载方法,在运行时动态生成对象,调用方法。

在Android中可以动态加载,但无法像Java中那样方便动态加载jar. 

原因:Android的虚拟机(Dalvik VM)是不认识Java打出jar的byte code,需要通过dx工具来优化转换成Dalvik byte code才行。

 

1. 首先生成被调用的dex文件:

package com.dynamic;

public interface IDynamic {

  public String helloworld();
}

 

package com.dynamic;

public class IDynamicTest implements IDynamic{

  public String helloworld()
  {
    return "hello world";
  }
}

构造helloworld函数,将代码Export打包成1.jar文件,调用Android自带的dx工具,将1.jar文件编译成包含dex文件的test.jar。

2. 在Android代码中,调用test.jar中的helloworld函数。

public void onClick(View v) {

  button1.setText("LauClass(M1)");

  final File dexpathFile = new File("/data/app/test.jar");                                  // 指定jar文件位置

  DexClassLoader classLoader = new DexClassLoader(dexpathFile.getAbsolutePath(), "/data/app/", null, getClassLoader());   //生成classLoader

  try{

    Class libProvideClass = classLoader.loadClass("com.dynamic.IDynamicTest");                     //利用ClassLoader将类加载进来

    if (libProvideClass==null)

    {

      return ;

    }

    Object obj=libProvideClass.newInstance();                                     //利用得到的类生成实例对象

    Method methodInstance = libProvideClass.getMethod("helloworld", null);                        //获取对象的方法对象

    if(methodInstance==null)

    {

      finish();

    }

    Toast.makeText(secondClass.this, (String)methodInstance.invoke(obj,null), Toast.LENGTH_SHORT).show();        //触发helloworld方法

  } catch(Exception exception)

  {

    exception.printStackTrace();

  }

}

 

Related URL:

 

转载于:https://www.cnblogs.com/yulele/p/4355037.html

你可能感兴趣的文章
Workbox CLI中文版
查看>>
贝聊亿级数据库分库分表实践
查看>>
同时连接gitlab和github
查看>>
vuex源码分析
查看>>
tornado+datatables分页
查看>>
集成 Kubernetes 与 Cloud Foundry,IBM自有一套
查看>>
php 中英文字符分割
查看>>
No module named yum
查看>>
Shell处理用户输入参数----getopts
查看>>
【函数】06、装饰器的应用
查看>>
v$sysstat
查看>>
剑指offer 66通关纪念
查看>>
医疗信息化 医学 医院管理 医疗器械 资料下载
查看>>
nginx.conf 示例配置
查看>>
在办公电脑上设置日志服务器监控思科和华为设备
查看>>
python 字符串替换
查看>>
我的友情链接
查看>>
Linux之常用网络命令
查看>>
linux php 安装 curl
查看>>
思科rip、dhcp、vlan
查看>>