Android获取apk签名信息(举例说明java反射调用方法步骤)
来源:互联网 发布:淘宝诈骗村 编辑:程序博客网 时间:2024/05/14 00:32
getMethod() 只能获取public类型的方法,包括类自身、所继承的基类、所实现的接口中的所有public方法;
getDeclaredMethod()只能获取类自身的所有方法,包括public、protected、private,不能获取所继承的基类及实现的接口中的方法。
以下以获取apk签名信息为例,举例反射调用方法的流程:
附上android源码查看链接,对比源码了解如何使用反射调用
http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/
private String getApkSignInfo(String apkPath) { String PATH_PackageParser = "android.content.pm.PackageParser"; try { //1、拿到class Class pkgParserCls = Class.forName(PATH_PackageParser); Class[] typeArgs = new Class[1]; typeArgs[0] = String.class; //2、构建该class实例 (api>19时,使用无参构造方式) Constructor pkgParserCt = pkgParserCls.getConstructor(typeArgs); Object[] valueArgs = new Object[1]; valueArgs[0] = apkPath; Object pkgParser = pkgParserCt.newInstance(valueArgs); //3、构建要调用该方法所需传入的参数的类型 // public Package More ...parsePackage(File sourceFile, String destCodePath,DisplayMetrics metrics, int flags) DisplayMetrics metrics = new DisplayMetrics(); metrics.setToDefaults(); typeArgs = new Class[4]; typeArgs[0] = File.class; typeArgs[1] = String.class; typeArgs[2] = DisplayMetrics.class; typeArgs[3] = Integer.TYPE; //4、使用getDeclaredMethod()获取要调用的方法 Method pkgParser_parsePackageMtd = pkgParserCls.getDeclaredMethod("parsePackage", typeArgs); //5、构造要调用该方法所需传入的参数值 valueArgs = new Object[4]; valueArgs[0] = new File(apkPath); valueArgs[1] = apkPath; valueArgs[2] = metrics; valueArgs[3] = PackageManager.GET_SIGNATURES; //6、调用invoke,执行该方法,返回Package pkgParserPkg Object pkgParserPkg = pkgParser_parsePackageMtd.invoke(pkgParser, valueArgs); //7、以下继续使用反射 调用PackageParser下的collectCertificates方法 typeArgs = new Class[2]; typeArgs[0] = pkgParserPkg.getClass(); typeArgs[1] = Integer.TYPE; Method pkgParser_collectCertificatesMtd = pkgParserCls.getDeclaredMethod("collectCertificates", typeArgs); valueArgs = new Object[2]; valueArgs[0] = pkgParserPkg; valueArgs[1] = PackageManager.GET_SIGNATURES; pkgParser_collectCertificatesMtd.invoke(pkgParser, valueArgs); Field packageInfoFld = pkgParserPkg.getClass().getDeclaredField("mSignatures"); Signature[] info = (Signature[]) packageInfoFld.get(pkgParserPkg); return info[0].toCharsString(); } catch (Exception e) { e.printStackTrace(); } return null; }
写上注释只为自己更好理解,若有措词不准之处,望指出.
0 0
- Android获取apk签名信息(举例说明java反射调用方法步骤)
- Android:获取APK签名信息
- Android:获取APK签名信息 .
- Android获取apk签名信息
- Android 开发技巧 - 获取apk签名信息的方法
- android获取APK文件,及应用内部签名信息方法
- 获取Android的APK包签名信息
- 获取apk签名信息
- 获取APK文件的签名信息,反射实现
- 获取APK文件的签名信息,反射实现
- 获取APK文件的签名信息,反射实现
- 获取APK文件的签名信息,反射实现
- Android查看apk签名信息方法
- Android Studio apk打包以及获取apk签名信息
- Java反射(三)----- 获取方法信息
- Java非反射方式获取方法签名
- [.bat][保存以防后面有用哦]获取APK签名信息 , 获取 Android 应用的 Apk 签名
- Android 获取apk签名
- 【IOS 开发学习总结-OC-50】★ios开发之UI控件——UIToolBar(工具栏)
- python 变量作用域
- Linux下安装Apache+php环境
- linux下的C语言开发(自动编译工具)
- SSH 登陆失败: Host key verification failed
- Android获取apk签名信息(举例说明java反射调用方法步骤)
- 如何在play框架的前端_通过Angularjs框架使用html模板
- EVDO-简介
- 子数组和的最大值
- linux下的C语言开发(进程创建及等待)
- 无向图欧拉回路的判定
- jquery函数哪些事儿(.siblings( [selector ] ))
- PHP计算一年有多少周,每周开始日期和结束日期
- linux下的C语言开发(信号处理)