`
44289533
  • 浏览: 64795 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

android动态加载Jar/dex--原创

阅读更多

背景:开发课题需要对应不同手机,为防止每次更换手机对系统重新开发时间上的浪费。决定把通用的一些功能拿出来,扫描,蓝牙,照相,摄像之类的这些技能,同意开发一个jar动态调用。参考了诸多前辈的网站之后,自己动手写了一下。

相关扫盲:

1. 浅谈Android虚拟机的动态加载技术 

2. android动态加载Jar/dex-农民伯伯

3.http://blog.csdn.net/qq591840685/article/details/7866115

首先对以上前辈感谢,特别是农民伯伯。

 

 

切入正题:

一、动态jar/dex的准备,根据自己业务需求封装。

1.如果是android.library=true这种项目可以直接在bin下面找到jar包(我是这种方式)。否则可以直接expot to jar 导出来。注意一些不必要的android配置文件不要打成Jar。再或者把需要打包的package新建一个java project然后编译expot to jar。

 

2. 第一步导出来的jar是没有被dx优化的,也就是说里面是.class文件而不是.dex文件。需要进行优化。

  很多人找不到dx在什么位置,我也是找了半天才找到。在sdk下面的platform-tools文件夹里面或者tools里面你们找找。我的就没有是从别的sdk里面找到的,不知道为什么。大家要是要的话可以留言跟我要。

用法很简单:dos 进入 tools下面 运行:

dx --dex --output=B.jar A.jar    //A.jar 是你第一步倒出来的   B.jar是优化完之后的。

  注:优化的目的是android解析.dex文件会比.class更快。上面的命令就是把A.jar里面的.class文件优化成.dex文件然后又打包成B.jar。此处就不多解释了。

 

3.B.jar准备好了之后,放到手机内部一个路径。注意权限问题。

 

4.然后就是敲写代码这里了,主要利用的是反射技术。通过上面的文章或许你们都已经了解了我就不多赘述。直接上代码:

 

String path = "data/ytpacer/dex/B.jar";//路径自己改
				final File file = new File(path);
				DexClassLoader cl = new DexClassLoader(file.getAbsolutePath(),
						"data/ytpacer/dex", null, getClassLoader());
				Class libProviderClazz = null;

				try {
					libProviderClazz = cl
							.loadClass("com.xxx.xxx.类名");
					Method[] methods = libProviderClazz.getDeclaredMethods();
					for (int i = 0; i < methods.length; i++) { //遍历类里所有方法
						Log.v("====", methods[i].toString());
					}
					Method start = libProviderClazz.getDeclaredMethod("start",
							Context.class);//调用start方法,参数类型是Context
					start.setAccessible(true);//未加这句之前报了一个错误:access to method denied 加上之后可以了。
					start.invoke(libProviderClazz.newInstance(),
							MainActivity.this);//调用方法传参
				
				} catch (Exception e) {
					e.printStackTrace();
				}

 

 

                           

OK 跑一下你的项目就能看到Log打出来的所有方法。

后一步可以继续封装。全部反射调用这样太累了。明天继续,今天早点回家,天不太好!

望大家多多指教,若有更好的实现方法,不采用动态加载jar的话请告知!谢谢。

 

 

 

分享到:
评论

相关推荐

    Android动态加载jar/dex,基于android studio+android开发艺术其他demo

    Android动态加载jar/dex+android开发艺术其他demo,基于android studio,示例代码,需要的可看

    安卓插件机制相关-android动态加载插件dex后的jar以方便功能扩展.rar

    android 动态加载插件(dex后的jar)以方便功能扩展.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    Android 中动态加载.jar的实现步骤

    首先第一个是 jar 文件的制作,Java 里面直接把 .class 文件打包到 .jar 文件里面就可以了,但是 Android 的 Dalvik VM 是不认 Java ...要动态加载其它类,可以用的 Class Loader 有: DexClassLoader,PathClassLoader

    Android-Method-Swizzling

    Android方法混乱 Android Studio从位于/build/outputs/aar/.aar下的模块生成aar文件 从aar提取jar文件:使用存档管理器时打开aar,而aar文件包含classes.jar文件。... 现在可以动态加载该dex文件。

    Android代码-应用模块化和懒加载在 Instagram 中的实现

    Before this library can be used a module needs to be compiled to a separate jar/dex or apk file. Right now, the library supports java libraries and android libraries which don't rely on android ...

    jar动态加载测试包

    jar动态加载测试包,for Android开发系列之动态添加dex。

    auto.js 百度对象存储 bos 的dex文件

    使用的jar为 bce-android-sdk-1.0.14.jar 用loadDex加载 dex和jar 都在压缩包 runtime.loadDex(files.getSdcardPath() + "/classes.dex"); importClass(com.baidubce.services.bos.BosClientConfiguration); ...

    Android_RAT

    此项目生成的部分需要添加的代码,例如myService中动态加载包含RA逻辑的jar并执行,注册屏幕监听事件。 生成方式 电报编译打包 gradlew makeJar //生成jar dx --dex --output ratdex.jar rat.jar //转换jar java -...

    下载服务端dex文件,动态加载dex文件源码

    从服务端下载dex文件并保存到app私有目录,将保存的dex文件动态加载执行

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    loaddex:android 动态加载dex

    工作原理:首先把需要动态加载的部分导出jar,然后用sdk中的命令把jar编译成dex的jar,在代码中用classloader来加载编译好的jar就可以了,在原始包中如果要调用dex中的方法,需要用反射的方式调用,而dex中的方法则...

    apk加壳和动态加载技术

    动态加载技术 该技术在Java中是一个比较成熟的技术,而Android中该技术还没有被大家充分利用起来。该技术思想主要分为以下几步: 1.将核心代码编译成dex文件的Jar包 2. 对jar包进行加密处理 3.在程序主入口利用NDK...

    DexClassloader:这个一个demo,用来实现加载class文件,如果在实际项目中可以实现,动态修改代码的业务逻辑

    DexClassloader 这个一个demo,用来实现加载class文件,如果在实际项目中可以...2: DexClassloader: Android 用来加载 jar/apk/dex 文件 3: URLClassloader: 可以加载java的jar包,但是Dalvik 虚拟机不支持这种加载方式

    Android开发艺术探索

     13.3 Android的动态加载技术 / 463  13.4 反编译初步 / 469  13.4.1 使用dex2jar和jd-gui反编译apk / 470  13.4.2 使用apktool对apk进行二次打包 / 470  第14章 JNI和NDK编程 / 473  14.1 JNI的开发流程 / ...

    Dex_Plugin_Project.zip

    Android动态加载Dex文件,将一个类转为jar包的形式,通过android sdk自带的dx.jar工具转换jar包为包含dex文件的Jar文件,然后用DexClassLoader去加载 详情看我博客 ...

    字节码查看器:一个Java 8+ Jar和Android APK逆向工程套件(反编译器,编辑器,调试器等)

    APK / DEX支持-使用Dex2Jar和Jar2Dex,可以轻松加载和保存APK! Java反编译器-它利用FernFlower,Procyon,CFR和JD进行反编译。 字节码反编译器-CFIDE的修改版本。 十六进制查看器-由JHexPane提供支持。 每个反...

    android开发艺术探索高清完整版PDF

    / 441 12.3.2 优化列表的卡顿现象 / 446 第13章 综合技术 / 448 13.1 使用Crash Handler来获取应用的crash信息 / 449 13.2 使用multidex来解决方法数越界 / 455 13.3 Android的动态加载技术 / 463 13.4 反编译...

    一键合并odex

    所谓Odex,是由android软件中的classes.dex生成的,Odex化即是把那个文件预先提取出来作用是能加快软件加载速度和开机速度。不过Odex也有缺点,那就是有时候加刷东西会出现问题。 简单说,原本系统恢复出厂设置后第...

Global site tag (gtag.js) - Google Analytics