eyuancomm.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. //
  2. // Created by #Suyghur, on 2021/06/09.
  3. //
  4. #include <jni.h>
  5. #include <toolkit.h>
  6. #include <comm_map.h>
  7. #include <params_kit.h>
  8. #include <md5/md5.h>
  9. #include <logger.h>
  10. #include <aes/aes_utils.h>
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14. static void InitSdkDrive(JNIEnv *env, jobject thiz, jobject context) {
  15. CommMap::GetInstance()->Init(env, context);
  16. Logger::is_debug = ParamsKit::GetDebugModel(env, context);
  17. }
  18. static void SetCommParam(JNIEnv *env, jobject thiz, jstring key, jstring value) {
  19. std::string key_ = ToolKit::JString2String(env, key);
  20. std::string value_ = ToolKit::JString2String(env, value);
  21. if (key_ == "device_id") {
  22. if (value_ == CommMap::GetInstance()->comm_params["android_id"].asString()) {
  23. CommMap::GetInstance()->comm_params["id_type"] = 1;
  24. } else {
  25. CommMap::GetInstance()->comm_params["id_type"] = 0;
  26. }
  27. }
  28. CommMap::GetInstance()->comm_params[key_] = value_;
  29. }
  30. static jstring GetCommParam(JNIEnv *env, jobject thiz, jstring key) {
  31. std::string key_ = ToolKit::JString2String(env, key);
  32. return env->NewStringUTF(CommMap::GetInstance()->comm_params[key_].asString().c_str());
  33. }
  34. static jstring InvokeCommJob(JNIEnv *env, jobject thiz, jstring key, jstring data) {
  35. const char *key_ = env->GetStringUTFChars(key, JNI_FALSE);
  36. const char *data_ = env->GetStringUTFChars(data, JNI_FALSE);
  37. //添加公共参数
  38. Json::Value root = ToolKit::ToJsonObject(data_);
  39. root["common"] = CommMap::GetInstance()->comm_params;
  40. Logger::D(env, "请求参数 : " + ToolKit::ToJsonString(root));
  41. char *p = AesUtils::Encrypt(ToolKit::ToJsonString(root).c_str(), reinterpret_cast<const uint8_t *>(key_));
  42. jstring result = ToolKit::GetJString(env, p);
  43. env->ReleaseStringUTFChars(key, key_);
  44. env->ReleaseStringUTFChars(data, data_);
  45. free(p);
  46. return result;
  47. }
  48. static jstring ParseJob(JNIEnv *env, jobject thiz, jstring key, jstring data) {
  49. const char *key_ = env->GetStringUTFChars(key, JNI_FALSE);
  50. const char *data_ = env->GetStringUTFChars(data, JNI_FALSE);
  51. char *raw = AesUtils::Decrypt(data_, reinterpret_cast<const uint8_t *>(key_));
  52. Logger::D(env, raw);
  53. jstring result = ToolKit::GetJString(env, raw);
  54. env->ReleaseStringUTFChars(key, key_);
  55. env->ReleaseStringUTFChars(data, data_);
  56. free(raw);
  57. return result;
  58. }
  59. static jstring GetCommMap(JNIEnv *env, jobject thiz) {
  60. Json::Value root;
  61. root["common"] = CommMap::GetInstance()->comm_params;
  62. jstring data = ToolKit::GetJString(env, ToolKit::ToJsonString(root).c_str());
  63. return data;
  64. }
  65. static JNINativeMethod gMethod[] = {
  66. {"initSdkDrive", "(Landroid/content/Context;)V", (void *) InitSdkDrive},
  67. {"setCommParam", "(Ljava/lang/String;Ljava/lang/String;)V", (void *) SetCommParam},
  68. {"getCommParam", "(Ljava/lang/String;)Ljava/lang/String;", (void *) GetCommParam},
  69. {"invokeCommJob", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", (void *) InvokeCommJob},
  70. {"parseJob", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", (void *) ParseJob},
  71. {"getCommMap", "()Ljava/lang/String;", (void *) GetCommMap},
  72. };
  73. extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
  74. JNIEnv *env = nullptr;
  75. if (vm->GetEnv((void **) &env, JNI_VERSION_1_6) != JNI_OK) {
  76. return JNI_ERR;
  77. }
  78. jclass clz = env->FindClass("cn/yyxx/eyuancomm/comm/impl/CommSdkDrive");
  79. if (env->RegisterNatives(clz, gMethod, sizeof(gMethod) / sizeof(gMethod[0])) < 0) {
  80. return JNI_ERR;
  81. }
  82. return JNI_VERSION_1_6;
  83. }
  84. #ifdef __cplusplus
  85. }
  86. #endif