Android studio导出jar包,作为插件化jar包的步骤

来源:互联网 发布:王宝强离婚案 知乎 编辑:程序博客网 时间:2024/06/05 19:21

1、一般会在主工程里面新增一个module,类型为Android Library,命名为dexlibs

2、该module里面编写我们的插件内容,比如:

3、选择build,make该lib,这样会在该module下的build-》intermediates-》bundles-》debug下会生成一个classes.jar文件。

该文件就是工程编译出来的可用的jar包。但是该jar包只是被java虚拟机使用,而我们的android是davilk或art虚拟机,不能识别java字节码,必须通过dx工具转换一下才能被

DexClassLoader识别

4、接着,使用dx工具转换,该工具在Android\sdk\build-tools\,具体的sdk版本,比如我是使用的是\25.0.2,在该文件夹下面就有dx.bat这个可执行文件,把我们的源classes.jar放到该目录下,执行如下命令:

dx --dex --output=loader_dex.jar classes.jar

在该目录下就生成了loader_dex.jar文件。

5、这时候我们在宿主中,就能使用该jar包中的类了。如:

File dexOutputDir = getDir("dex",0);//在data/data/xx包名/下面创建一个app_dex文件夹。        String dexPath = Environment.getExternalStorageDirectory().toString() + File.separator + "loader_dex.jar";//sdcard中的        // 4.1以后不能够将optimizedDirectory(即第二个参数)设置到sd卡目录, 否则抛出异常. 所以我们使用内部存储路径dexOutputDir         DexClassLoader loader = new DexClassLoader(dexPath,dexOutputDir.getAbsolutePath(),null,getClassLoader());        try {            Class clz = loader.loadClass("com.tongxt.mylibrary.ShowToastImpl");            Method method = clz.getDeclaredMethod("showToast", Context.class);            method.invoke(clz.newInstance(), this);        } catch (Exception e) {            e.printStackTrace();        }

参考文章:
Android动态加载jar、apk的实现
android动态加载Jar/dex--原创



原创粉丝点击