android获取keystore的代码,Android通过NDK获取Keystore签名值

package com.boyaa.ndk;

import android.content.Context;

public class RegionGames {

static {

try {

System.loadLibrary("boyaaregiongames");

} catch (Throwable e) {

e.printStackTrace();

}

}

public static native String getSign(Context ctx);

}

#include

#include

#include

#include

extern "C"

JNIEXPORT jstring JNICALL Java_com_boyaa_ndk_RegionGames_signData(JNIEnv *env, jclass jcl,

jobject context_object) {

jclass context_class = env->GetObjectClass(context_object);

//context.getPackageManager()

jmethodID methodId = env->GetMethodID(context_class, "getPackageManager", "()Landroid/content/pm/PackageManager;");

jobject package_manager_object = env->CallObjectMethod(context_object, methodId);

if (package_manager_object == NULL) {

__android_log_print(ANDROID_LOG_INFO, "JNITag","getPackageManager() Failed!");

return NULL;

}

//context.getPackageName()

methodId = env->GetMethodID(context_class, "getPackageName", "()Ljava/lang/String;");

jstring package_name_string = (jstring)env->CallObjectMethod(context_object, methodId);

if (package_name_string == NULL) {

__android_log_print(ANDROID_LOG_INFO, "JNITag","getPackageName() Failed!");

return NULL;

}

env->DeleteLocalRef(context_class);

//PackageManager.getPackageInfo(Sting, int)

jclass pack_manager_class = env->GetObjectClass(package_manager_object);

methodId = env->GetMethodID(pack_manager_class, "getPackageInfo", "(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");

env->DeleteLocalRef(pack_manager_class);

jobject package_info_object = env->CallObjectMethod(package_manager_object, methodId, package_name_string, 64);

if (package_info_object == NULL) {

__android_log_print(ANDROID_LOG_INFO, "JNITag","getPackageInfo() Failed!");

return NULL;

}

env->DeleteLocalRef(package_manager_object);

//PackageInfo.signatures[0]

jclass package_info_class = env->GetObjectClass(package_info_object);

jfieldID fieldId = env->GetFieldID(package_info_class, "signatures", "[Landroid/content/pm/Signature;");

env->DeleteLocalRef(package_info_class);

jobjectArray signature_object_array = (jobjectArray)env->GetObjectField(package_info_object, fieldId);

if (signature_object_array == NULL) {

__android_log_print(ANDROID_LOG_INFO, "JNITag","PackageInfo.signatures[] is null");

return NULL;

}

jobject signature_object = env->GetObjectArrayElement(signature_object_array, 0);

env->DeleteLocalRef(package_info_object);

//Signature.toCharsString()

jclass signature_class = env->GetObjectClass(signature_object);

methodId = env->GetMethodID(signature_class, "toCharsString", "()Ljava/lang/String;");

env->DeleteLocalRef(signature_class);

jstring signature_string = (jstring) env->CallObjectMethod(signature_object, methodId);

return signature_string;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值