Android动态加载Jar包并实现Native方法

一直以来,在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包
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值