防止别人反编译自已的游戏再修改然后发布,我们可以用在so文件中用Keystore签名值来加密一些参数。

这里只提供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;}

更多相关文章

  1. android中生成keystore
  2. Google Map无法显示:Error contacting Google servers. XXX authe
  3. Android(安卓)Studio 配置签名
  4. QQ android 登录模块简单分析
  5. [置顶] 实现android应用程序自动打包(Ant+proguard+签名)
  6. Android自带的signapk.jar + .x509.pem + .pk8签名应用程序
  7. 05. Android多渠道打包(友盟)
  8. 获取数字签名(.keystore)SHA1、MD5值
  9. 使用javah和javap得到JNI接口的签名

随机推荐

  1. 神器! 统计和金融计算器, 词云和情感分析
  2. 中国博导要求掌握的RDD方法实证运用范文(
  3. 2020秋招总结:凡是过往,皆为序章
  4. 【Github】NLPer-Interview: NLP 算法工
  5. 中文NER任务实验小结报告——深入模型实
  6. 逆向而行,中文轻量级预训练模型的探索之路
  7. 站在BERT肩膀上的NLP新秀们(PART I)
  8. Bert 之后:预训练语言模型与自然语言生成
  9. 最新: 运用机器学习和合成控制法研究武汉
  10. Ubuntu系统网络配置及shell脚本编程之函