Android动态加载Jar包并实现Native方法
来源:互联网 发布:黑暗之魂剧情分析知乎 编辑:程序博客网 时间:2024/06/01 10:34
一直以来,在Android项目中引用第三方SDK都是将其复制到lib目录下,根据开发环境的不同进行配置(在Android studio中需要使用工具进行添加File dependency到gradle中),便可直接调用内部方法进行实现。
现因公司的需求所以更改了引用Jar包的方式,对,那就是动态加载Jar包
前提:Jar包为公司内部SDK
公司需求:为实现在提供给用户后,防止SDK被篡改,需使用SM3算法对其加密,并在非首次调用的时候进行验证,如果与首次生成的SM3值不同则为SDK已被篡改(首次生成的SM3值会保存,以供对比)
实现方式:
1:将Jar包放入sdk-build-tools目录下的某版本中,运行dx --dex --output=xxx_dex.jar xxx.jar 命令,将此jar包转换为dex包并放到工程目录的assets中
2:将工程目录中的dex包复制到真机私有目录下,使用DexClassLoader类加载器加载dex包(jar包)中的类名并得到类对象,相关代码:
DexClassLoader dcl = new DexClassLoader(dex.jar包的路径,加载后dex文件存放位置 , null, context.getClassLoader()); 类加载器 Class sotp = dcl.loadClass("com.zryf.sotp.SotpClient"); 加载类 Log.i("sotpClient --> ", "=" + sotp.getName()); Method method = sotp.getMethod("getInstance", Context.class); 参1:查找SDK中初始化方法 参2:参数类型 Object sotpClient = method.invoke(null, context); 反射得到类对象
Method sotpAppInfoMethod = sotp.getMethod("downLoadInit", String.class); String val = (String) sotpAppInfoMethod.invoke(sotpClient, "333"); 反射类对象中的方法并得到返回值
通过以上方法即实现了动态加载jar包
阅读全文
0 0
- Android动态加载Jar包并实现Native方法
- Android动态加载JAR包的实现方法
- JAVA实现动态加载jar包并调用其中的方法
- android动态加载jar包
- android动态加载jar包
- 动态加载jar包的方法
- 实现java classloader 动态加载jar包
- Android如何动态加载jar包
- 深入浅出Android动态加载jar包技术
- android动态加载jar包中的图片
- 深入浅出Android动态加载jar包技术
- java动态加载jar包,并运行其中的类和方法
- java动态加载jar包,并运行其中的类和方法
- java动态加载jar包,并运行其中的类和方法
- java动态加载jar包,并运行其中的类和方法 (jar是与平台无关的文件格式)
- java程序中动态加载jar包并执行
- Android动态加载jar、apk的实现
- Android动态加载jar、apk的实现
- 系统操作日志原型设计
- 数论——素数筛法
- kotlin for android 集成&&简单使用
- SQL中char、varchar、text区别
- 求LCA的几种方法
- Android动态加载Jar包并实现Native方法
- c语言常见的几种指针用法
- Shell 显示所在项目当前git分支及状态
- JavaScript 生成器函数function* () {}
- C语言sscanf函数的总结
- JZOJ 3927. 【NOIP2014模拟11.6】可见点数
- 用PDF编辑软件简PDF文档进行上下标简不简单?
- 环境变量的配置--java开发环境
- 【Android资源管理和打包】深入理解Gradle