Android JNI 获取应用程序签名
使用Android JNI 获取应用程序签名。
获取基础上生成自己的签名password,这可以防止别人反编译找到自己的源代码password。
jstring Java_com_masonsdk_jni_JNIUtil_getPWD(JNIEnv* env, jobject thizz
,jobject thiz
){ jclass native_clazz = env->GetObjectClass(thiz); // 得到 getPackageManager 方法的 ID
jmethodID methodID_func =env->GetMethodID(native_clazz,"getPackageManager", "()Landroid/content/pm/PackageManager;"); // 获得应用包的管理器
jobject package_manager = env->CallObjectMethod(thiz, methodID_func); // 获得 PackageManager 类
jclass pm_clazz = env->GetObjectClass(package_manager); // 得到 getPackageInfo 方法的 ID
jmethodID methodID_pm = env->GetMethodID( pm_clazz,
"getPackageInfo", "(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;"); //获取包名
jmethodID methodID_packagename =env->GetMethodID(native_clazz,"getPackageName", "()Ljava/lang/String;");
jstring name_str = static_cast<jstring>(env->CallObjectMethod(thiz, methodID_packagename)); // 获得应用包的信息
jobject package_info = env->CallObjectMethod(package_manager,
methodID_pm, name_str, 64);//env->NewStringUTF("com.example.contasdf") // 获得 PackageInfo 类
jclass pi_clazz = env->GetObjectClass( package_info); // 获得签名数组属性的 ID
jfieldID fieldID_signatures = env->GetFieldID( pi_clazz,
"signatures", "[Landroid/content/pm/Signature;"); // 得到签名数组。待改动
jobject signatur = env->GetObjectField(package_info, fieldID_signatures);
jobjectArray signatures = reinterpret_cast<jobjectArray>(signatur);
// 得到签名
jobject signature = env->GetObjectArrayElement(signatures, 0); // 获得 Signature 类。待改动
jclass s_clazz = env->GetObjectClass(signature); // 得到 hashCode 方法的 ID
jmethodID methodID_hc = env->GetMethodID(s_clazz, "hashCode", "()I"); // 获得应用包的管理器,待改动
int hash_code = env->CallIntMethod(signature, methodID_hc); char str[100]; sprintf(str, "%u", hash_code);
return env->NewStringUTF(str); }
源代码:
https://github.com/mentor811/AndroidUltimateEncrypt
【 声明:版权全部分,欢迎转载,不用于商业用途。 --天盟】
版权声明:本文博客原创文章。博客,未经同意,不得转载。
Android JNI 获取应用程序签名的更多相关文章
- Android中获取应用程序(包)的大小-----PackageManager的使用(二)
通过第一部分<<Android中获取应用程序(包)的信息-----PackageManager的使用(一)>>的介绍,对PackageManager以及 AndroidMani ...
- Android中获取应用程序(包)的信息----PackageManager
本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下: 第一部分: 获取应用程序的packagena ...
- Android中获取应用程序(包)的信息-----PackageManager的使用(一)
本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下: 第一部分: 获取应用程序的packagenam ...
- Android实现获取应用程序相关信息列表的方法
本文所述为Androdi获取手机应用列表的方法,比如获取到Android应用的软件属性.大小和应用程序路径.应用名称等,获取所有已安装的Android应用列表,包括那些卸载了的,但没有清除数据的应用程 ...
- Android中获取应用程序(包)的信息-----PackageManager的使用
本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下: 第一部分: 获取应用程序的packagename ...
- 【转】Android中获取应用程序(包)的信息-----PackageManager的使用(一)
转载请注明出处:http://blog.csdn.net/qinjuning 本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占 ...
- Android JNI 增强应用程序性能
JNI全称Java Native Interface. 它为托管代码(使用Java编程语言编写)与本地代码(使用C/C++编写)提供了一种交互方式.它是与厂商无关的(vendor-neutral),支 ...
- Android中获取正在运行的应用程序-----ActivityManager.RunningAppProcessInfo类详解
今天继续讲解关于ActivityManager的使用,通过前面一节的学习,我们学会了如何利用ActivityManager获取系统里 正在运行的进程.本文要讲解的知识点是利用这些进程信息获取系统里正在 ...
- Android中获取正在运行的服务-------ActivityManager.RunningServiceInfo的使用
关于PackageManager和ActivityManager的使用 ,自己也写了一些DEMO 了,基本上写的线路参考了Settings模块下的 应用程序,大家如果真正的有所兴趣,建议大家看看源码, ...
随机推荐
- 小型Mp3播放器
准备三张图片,名字分别为: play.pause.stop. 将一个名为Mp3的文件放入res/raw文件夹中. 在main.xml中: <LinearLayout xmlns:android= ...
- C# LDAP认证登录
LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.它是基于X.500标准的,但是简单多了并且可以根据需要定制.与X ...
- uva 1025
紫皮书 非原创…… 某城市的地铁是线性的有n个车站从左到右编号为1-n,有M1辆地铁从第一站出发,有M2辆车从最后一站出发,mario从第一站出发,目的是在时刻T会见车站n的一个朋友(间谍).在车站等 ...
- ALV双击单元格事件处理
*激发双击事件 FORM f_alv_user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. "先引 ...
- 与众不同 windows phone (17) - Graphic and Animation(画图和动画)
原文:与众不同 windows phone (17) - Graphic and Animation(画图和动画) [索引页][源码下载] 与众不同 windows phone (17) - Grap ...
- eclipse Maven plugin 配置
1. eclipse -> help -> marketpalce -> search 在输入框中输入Maven,回车. 在搜索结果列表中往下拉几个安装 Maven Integrat ...
- PHP从数据库获取的下拉树
<?php include "config.php"; include "mysql.php"; $db = new Mysql('test'); //几 ...
- 注解框架---AndroidAnnotations
AndroidAnnotations是一个开源框架,旨在加快Android开发的效率.通过使用它开放出来的注解api,你差点儿可以使用在不论什么地方, 大大的降低了无关痛痒的代码量,让开发人员可以抽身 ...
- Android代码混淆和项目宣布步骤记录器
原本放在一起Android项目与发布的文件相混淆.我突然想到,为什么不写博客,分享.有这篇文章的情况下,. Android代码混淆及项目公布步骤记录 一.清理代码中的调试信息,如Log.System. ...
- Android监听外部存储设备的状态(SD卡、U盘等等)
近期在项目中须要对外部存储设备的状态进行监听,所以整理了此笔记,以便日后查看. 外部存储设备的状态变化时发出的广播 对照不同状态下的广播 1. 插入外部SD卡时: 2. 移除外部SD卡时: 3. 连接 ...