`
44289533
  • 浏览: 67219 次
  • 性别: 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文件是一种常见的优化技术,它允许应用程序在运行时加载新的代码或库,而不必通过更新整个apk来实现功能的扩展或修复。这种技术通常用于热修复、插件化或者模块化开发,能够极...

    android动态加载jar

    在Android开发中,动态加载JAR(Java Archive)文件是一种常见的技术,它允许应用程序在运行时加载和执行不在原始APK文件中的代码。这种技术有多种应用场景,例如更新功能、热修复、插件化框架等。下面将详细介绍...

    dex2jar-2.0

    对此,可以尝试使用其他辅助工具,如dex-reader或dexlib来辅助分析。 尽管dex2jar提供了方便的反编译功能,但必须注意,未经授权对他人应用进行反编译可能涉及侵犯知识产权,因此在使用时应确保遵循合法合规的原则...

    android动态加载jar文件

    标题“android动态加载jar文件”指的是在Android应用中实现对.jar文件的运行时加载技术。这种技术通常涉及到Java的类加载器(ClassLoader)和Android的 DexClassLoader。在Android中,所有的Dalvik或ART字节码都是以...

    反编译工具,可以将android生成的framework.jar反编译为class,并且用jd-gui 查看修改是否编译进来

    在这个例子中,使用的似乎是.dex-tools-v2.4,这是一个针对Android的反编译和处理工具集合,可能包括了Dex2jar和其它相关工具。 1. **Dex2jar**:这个工具将Dalvik执行文件(`.dex`)转换为Java类库文件(`.jar`)...

    dex-tools-2.1-SNAPSHOT.zip

    dex-tools-2.1-SNAPSHOT.zip 是一个包含与Android应用开发相关的工具的压缩包,主要服务于将Dalvik Executable (DEX) 文件转换为Java字节码(JAR)的过程。"dev2jar"标签表明这个工具集是专门用于 Dex to Jar 的转换...

    dex-method-counts-master.zip

    "dex-method-counts-master.zip" 文件提供了一种工具,用于查询Java或Kotlin编译后的.jar或安卓APK中的方法数量。这个工具对于优化应用、避免Dalvik VM(或ART)的65536方法限制,以及理解代码复杂性都是十分有用的...

    最新版本反编译工具apktool+dex2jar+jd-gui工具

    3. 打开jd-gui,加载由dex2jar生成的.jar文件,查看反编译后的Java源代码。 以上就是关于“最新版本反编译工具apktool+dex2jar+jd-gui工具”的详细介绍。这些工具在Android逆向工程中起着关键作用,对于开发者而言...

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

    本资料“安卓插件机制相关-android动态加载插件dex后的jar以方便功能扩展.rar”似乎提供了实现这一目标的一些代码示例。 首先,我们需要理解Android插件机制的核心概念。Android插件系统通常基于类加载器...

    android 动态加载jar代码

    综上所述,Android动态加载jar代码是通过转换.dex文件并利用DexClassLoader实现的。这一技术为应用带来了更大的灵活性,但同时也需要注意性能和兼容性问题。在实际开发中,根据项目需求和场景选择合适的加载策略至关...

    Android app反编译工具(dex2jar-2.0.zip apktool_2.4.1.jar jd-gui-1.6.6.jar)

    4. 运行JD-GUI,加载由dex2jar生成的.jar文件,查看反编译出的Java源代码。 5. 如果需要更深入地理解代码,可以在Apktool解包后的.smali文件中寻找对应的汇编代码,虽然这比阅读Java源代码更为复杂,但有时是必要的...

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

    在Android平台上,动态加载.jar文件是一项关键的技术,它允许应用程序在运行时加载新的功能或更新代码,无需重新安装整个应用。下面将详细讲解这一过程的实现步骤和涉及到的知识点。 首先,我们需要创建.jar文件。...

    DexClassLoader自定义加载Assets目录下的dex、jar文件

    总结一下,DexClassLoader在Android开发中扮演着动态加载额外类库的角色,特别是在处理Assets目录下的.dex和.jar文件时。通过正确配置和使用,我们可以灵活地扩展应用的功能,同时避免方法数过多的问题。在实践中,...

    dx工具(android将jar包转成dex格式二进制jar包工具)

    在Android开发过程中,有时我们需要将Java编译生成的`.jar`文件转换为`.dex`文件,因为Dalvik虚拟机和Android运行时环境执行的是.dex格式的代码。`dx`工具正是用于此目的的一个命令行工具,它允许我们将Java字节码...

    利用dex2jar和jd-gui反编译和查看Android的apk源码

    总结来说,通过`dex2jar`和`jd-gui`这两个工具,我们可以方便地对Android APK进行反编译,从而查看其内部的Java源码。这对于学习Android开发、调试第三方应用或者进行安全分析都非常有用。然而,这项技术也应谨慎...

    Android反编译工具dex2jar

    - **动态加载**:部分功能动态加载,不在APK中直接包含,使得反编译者难以获取完整代码。 - **签名验证**:应用签名可以防止篡改,确保代码完整性。 了解并掌握反编译工具如dex2jar的使用,对于开发者来说,不仅...

    dex2jar-2.0和jd-gui-1.4.0.jar

    用户只需要打开jd-gui,然后加载由dex2jar转换得到的.jar文件,就可以查看到类、方法和变量等详细信息。jd-gui提供了一个直观的界面,便于查看和分析反编译后的代码,这对于调试、逆向工程或代码审计非常有用。 在...

    Android中动态加载jar包

    ### Android中动态加载jar包详解 #### 一、概述 在Android开发中,有时需要实现动态加载外部的jar包或类文件。这种技术可以提高应用的灵活性和扩展性,允许开发者在不重新编译和发布整个应用的情况下更新部分功能...

    动态加载apk或者jar或者dex.docx

    因此,在 Android 应用中直接动态加载 .jar 文件是不可行的,必须先将 .jar 文件转换为 .dex 文件格式。 **1.2 可用于动态加载的 API** 1. **DexClassLoader**:可以用来动态加载 .jar、.apk 或者 .dex 文件,甚至...

Global site tag (gtag.js) - Google Analytics