Commit deefe57d by Fear1ess

4/23

parent 20242691
...@@ -26,6 +26,7 @@ import android.location.Location; ...@@ -26,6 +26,7 @@ import android.location.Location;
import android.location.LocationListener; import android.location.LocationListener;
import android.location.LocationManager; import android.location.LocationManager;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.LinkProperties;
import android.net.Network; import android.net.Network;
import android.net.NetworkCapabilities; import android.net.NetworkCapabilities;
import android.net.NetworkInfo; import android.net.NetworkInfo;
...@@ -51,6 +52,7 @@ import com.reyun.wandun.WdMain; ...@@ -51,6 +52,7 @@ import com.reyun.wandun.WdMain;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.net.InetAddress;
import java.net.NetworkInterface; import java.net.NetworkInterface;
import java.net.SocketException; import java.net.SocketException;
import java.security.cert.Certificate; import java.security.cert.Certificate;
...@@ -107,14 +109,6 @@ public class MainActivity extends AppCompatActivity { ...@@ -107,14 +109,6 @@ public class MainActivity extends AppCompatActivity {
e.printStackTrace(); e.printStackTrace();
} }
CameraManager camera = (CameraManager) getSystemService(Service.CAMERA_SERVICE);
try {
String[] list = camera.getCameraIdList();
CameraCharacteristics cc = camera.getCameraCharacteristics("0");
Log.d("haha", "onCreate: ");
} catch (CameraAccessException e) {
e.printStackTrace();
}
} }
@Override @Override
...@@ -144,5 +138,27 @@ public class MainActivity extends AppCompatActivity { ...@@ -144,5 +138,27 @@ public class MainActivity extends AppCompatActivity {
}); });
} }
} }
public String getDns() {
String result = "";
ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
for (Network network : cm.getAllNetworks()) {
NetworkInfo networkInfo = cm.getNetworkInfo(network);
if (networkInfo.getType() == activeNetworkInfo.getType()) {
LinkProperties lp = cm.getLinkProperties(network);
for (InetAddress addr : lp.getDnsServers()) {
// Get DNS IP address here:
result += addr.getHostAddress() + ",";
}
}
}
if(result.contains(",")){
result=result.substring(0, result.length() - 1);
}
result="[" + result + "]";
return result;
}
} }
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <sys/mman.h> #include <sys/mman.h>
#include <sys/sysinfo.h> #include <sys/sysinfo.h>
#include <sys/statfs.h> #include <sys/statfs.h>
#include <sys/stat.h>
#include "openssl/md5.h" #include "openssl/md5.h"
#include <arpa/inet.h> #include <arpa/inet.h>
#include <sys/syscall.h> #include <sys/syscall.h>
...@@ -88,13 +89,6 @@ jstring do_collect(JNIEnv* env) { ...@@ -88,13 +89,6 @@ jstring do_collect(JNIEnv* env) {
jstring data_jstr = (*env)->NewStringUTF(env, data); jstring data_jstr = (*env)->NewStringUTF(env, data);
return data_jstr; return data_jstr;
/*
size_t len = strlen(data);
int fd = WDSYSCALL(SYS_openat, AT_FDCWD, "/sdcard/wd_data", O_CREAT|O_RDWR|O_TRUNC, S_IRWXU);
int err = errno;
WDSYSCALL(SYS_write, fd, data, len);
WDSYSCALL(SYS_close, fd);*/
} }
void collect_app_info(JNIEnv* env, cJSON *json) { void collect_app_info(JNIEnv* env, cJSON *json) {
...@@ -102,6 +96,7 @@ void collect_app_info(JNIEnv* env, cJSON *json) { ...@@ -102,6 +96,7 @@ void collect_app_info(JNIEnv* env, cJSON *json) {
loge(WD_COLLECT, "%s", "collect_app_info func call env->pushLocalFrame failed!"); loge(WD_COLLECT, "%s", "collect_app_info func call env->pushLocalFrame failed!");
return; return;
} }
//package_name //package_name
jobject pkgName = wdCallObjectMethod(env, g_app_context, "getPackageName", "()Ljava/lang/String;"); jobject pkgName = wdCallObjectMethod(env, g_app_context, "getPackageName", "()Ljava/lang/String;");
addJniStringToJson(env, json, "package_name", pkgName); addJniStringToJson(env, json, "package_name", pkgName);
...@@ -181,6 +176,21 @@ void collect_app_info(JNIEnv* env, cJSON *json) { ...@@ -181,6 +176,21 @@ void collect_app_info(JNIEnv* env, cJSON *json) {
fclose(fp); fclose(fp);
} }
//apk_path
jstring apk_path_jstr = wdCallObjectMethod(env, g_app_context, "getPackageResourcePath", "()Ljava/lang/String;");
if(apk_path_jstr != NULL) {
const char* path = (*env)->GetStringUTFChars(env, apk_path_jstr, NULL);
cJSON_AddStringToObject(json, "apk_path", path);
//apk_size
struct stat st;
if(WDSYSCALL(WD_SYS_fstatat, AT_FDCWD, path, &st, 0) == 0) {
cJSON_AddNumberToObject(json, "apk_size", st.st_size);
}
(*env)->ReleaseStringUTFChars(env, apk_path_jstr, path);
(*env)->DeleteLocalRef(env, apk_path_jstr);
}
logd(WD_COLLECT, "%s", "collect app info finished..."); logd(WD_COLLECT, "%s", "collect app info finished...");
(*env)->PopLocalFrame(env, NULL); (*env)->PopLocalFrame(env, NULL);
} }
...@@ -221,8 +231,6 @@ void collect_imei(JNIEnv *env, cJSON *json) { ...@@ -221,8 +231,6 @@ void collect_imei(JNIEnv *env, cJSON *json) {
logd(WD_COLLECT, "%s", "collect imei finished..."); logd(WD_COLLECT, "%s", "collect imei finished...");
} }
void collect_android_id(JNIEnv* env, cJSON* json) { void collect_android_id(JNIEnv* env, cJSON* json) {
jstring key_str = (*env)->NewStringUTF(env, "android_id"); jstring key_str = (*env)->NewStringUTF(env, "android_id");
jobject cr = wdCallObjectMethod(env, g_app_context, "getContentResolver", "()Landroid/content/ContentResolver;"); jobject cr = wdCallObjectMethod(env, g_app_context, "getContentResolver", "()Landroid/content/ContentResolver;");
...@@ -292,7 +300,8 @@ void collect_prop_info(JNIEnv* env, cJSON* json) { ...@@ -292,7 +300,8 @@ void collect_prop_info(JNIEnv* env, cJSON* json) {
cJSON* pi_json = cJSON_CreateObject(); cJSON* pi_json = cJSON_CreateObject();
const char* prop_key[] = {"wifi.interface", "gsm.sim.state", "gsm.version.baseband", "gsm.version.ril-impl", const char* prop_key[] = {"wifi.interface", "gsm.sim.state", "gsm.version.baseband", "gsm.version.ril-impl",
"gsm.current.phone-type", "gsm.operator.isroaming", "gsm.network.type", "persist.sys.timezone", "gsm.current.phone-type", "gsm.operator.isroaming", "gsm.network.type", "persist.sys.timezone",
"init.svc.adbd", "ro.build.date.utc", "gsm.operator.alpha", "ro.opengles.version"}; "init.svc.adbd", "ro.build.date.utc", "gsm.operator.alpha", "ro.opengles.version",
"ro.serialno"};
char buf[64]; char buf[64];
for(int i = 0; i < sizeof(prop_key)/sizeof(const char*); ++i) { for(int i = 0; i < sizeof(prop_key)/sizeof(const char*); ++i) {
memset((void*)buf, 0, 64); memset((void*)buf, 0, 64);
...@@ -307,7 +316,7 @@ void collect_settings_info(JNIEnv *env, cJSON *json) { ...@@ -307,7 +316,7 @@ void collect_settings_info(JNIEnv *env, cJSON *json) {
const char* settings_secure_key[] = {"usb_mass_storage_enabled", "development_settings_enabled", "accessibility_enabled"}; const char* settings_secure_key[] = {"usb_mass_storage_enabled", "development_settings_enabled", "accessibility_enabled"};
const char* settings_system_key[] = {"screen_brightness", "accelerometer_rotation", "screen_brightness_mode", const char* settings_system_key[] = {"screen_brightness", "accelerometer_rotation", "screen_brightness_mode",
"sound_effects_enabled", "screen_off_timeout"}; "sound_effects_enabled", "screen_off_timeout"};
const char* settings_global_key[] = {"lock_pattern_autolock", "lock_pattern_visible_pattern"}; // const char* settings_global_key[] = {"lock_pattern_autolock", "lock_pattern_visible_pattern"};
jobject cr = wdCallObjectMethod(env, g_app_context, "getContentResolver", "()Landroid/content/ContentResolver;"); jobject cr = wdCallObjectMethod(env, g_app_context, "getContentResolver", "()Landroid/content/ContentResolver;");
...@@ -322,13 +331,14 @@ void collect_settings_info(JNIEnv *env, cJSON *json) { ...@@ -322,13 +331,14 @@ void collect_settings_info(JNIEnv *env, cJSON *json) {
(*env)->DeleteLocalRef(env, key_str); (*env)->DeleteLocalRef(env, key_str);
(*env)->DeleteLocalRef(env, jstr); (*env)->DeleteLocalRef(env, jstr);
} }
/*
for(int m = 0; m < sizeof(settings_global_key)/sizeof(const char*); ++m) { for(int m = 0; m < sizeof(settings_global_key)/sizeof(const char*); ++m) {
jstring key_str = (*env)->NewStringUTF(env, settings_global_key[m]); jstring key_str = (*env)->NewStringUTF(env, settings_global_key[m]);
jint value = wdCallStaticIntMethod(env, "android/provider/Settings$Global", "getInt", jint value = wdCallStaticIntMethod(env, "android/provider/Settings$Global", "getInt",
"(Landroid/content/ContentResolver;Ljava/lang/String;)I", cr, key_str); "(Landroid/content/ContentResolver;Ljava/lang/String;)I", cr, key_str);
cJSON_AddNumberToObject(si_json, settings_global_key[m], value); cJSON_AddNumberToObject(si_json, settings_global_key[m], value);
(*env)->DeleteLocalRef(env, key_str); (*env)->DeleteLocalRef(env, key_str);
} }*/
for(int j = 0; j < sizeof(settings_system_key)/sizeof(const char*); ++j) { for(int j = 0; j < sizeof(settings_system_key)/sizeof(const char*); ++j) {
jstring key_str = (*env)->NewStringUTF(env, settings_system_key[j]); jstring key_str = (*env)->NewStringUTF(env, settings_system_key[j]);
jint value = wdCallStaticIntMethod(env, "android/provider/Settings$System", "getInt", jint value = wdCallStaticIntMethod(env, "android/provider/Settings$System", "getInt",
...@@ -375,9 +385,9 @@ void collect_camera_info(JNIEnv *env, cJSON *json) { ...@@ -375,9 +385,9 @@ void collect_camera_info(JNIEnv *env, cJSON *json) {
cJSON* item_json = cJSON_CreateArray(); cJSON* item_json = cJSON_CreateArray();
//获取CameraManager对象 //获取CameraManager对象
jobject camera_Str=(*env)->NewStringUTF(env,"camera"); jobject camera_Str=(*env)->NewStringUTF(env, "camera");
jobject cameraManager_obj=wdCallObjectMethod(env,g_app_context,"getSystemService", jobject cameraManager_obj=wdCallObjectMethod(env, g_app_context,"getSystemService",
"(Ljava/lang/String;)Ljava/lang/Object;",camera_Str); "(Ljava/lang/String;)Ljava/lang/Object;", camera_Str);
jobjectArray cameraIdList_Obj=wdCallObjectMethod(env,cameraManager_obj,"getCameraIdList", jobjectArray cameraIdList_Obj=wdCallObjectMethod(env,cameraManager_obj,"getCameraIdList",
"()[Ljava/lang/String;"); "()[Ljava/lang/String;");
int count=(*env)->GetArrayLength(env,cameraIdList_Obj); int count=(*env)->GetArrayLength(env,cameraIdList_Obj);
...@@ -700,6 +710,7 @@ void collect_mem_info(JNIEnv *env, cJSON *json) { ...@@ -700,6 +710,7 @@ void collect_mem_info(JNIEnv *env, cJSON *json) {
} }
void collect_network_info(JNIEnv *env, cJSON *json) { void collect_network_info(JNIEnv *env, cJSON *json) {
cJSON* network = cJSON_CreateObject();
jstring ci_jstr = (*env)->NewStringUTF(env, "connectivity"); jstring ci_jstr = (*env)->NewStringUTF(env, "connectivity");
jobject ci = wdCallObjectMethod(env, g_app_context, "getSystemService", jobject ci = wdCallObjectMethod(env, g_app_context, "getSystemService",
"(Ljava/lang/String;)Ljava/lang/Object;", ci_jstr); "(Ljava/lang/String;)Ljava/lang/Object;", ci_jstr);
...@@ -743,37 +754,64 @@ void collect_network_info(JNIEnv *env, cJSON *json) { ...@@ -743,37 +754,64 @@ void collect_network_info(JNIEnv *env, cJSON *json) {
default: default:
break; break;
} }
cJSON_AddStringToObject(json, "network_type", network_type); cJSON_AddStringToObject(network, "network_type", network_type);
} }
//wifi //wifi
else if (conn_type == 1) { else if (conn_type == 1) {
cJSON_AddStringToObject(json, "network_type", "wifi"); cJSON_AddStringToObject(network, "network_type", "wifi");
//get wifi ssid bssid ip, need ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION permission on Android high version //get wifi ssid bssid ip, need ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION permission on Android high version
jstring wm_jstr = (*env)->NewStringUTF(env, "wifi"); jstring wm_jstr = (*env)->NewStringUTF(env, "wifi");
jobject wm = wdCallObjectMethod(env, g_app_context, "getSystemService", jobject wm = wdCallObjectMethod(env, g_app_context, "getSystemService",
"(Ljava/lang/String;)Ljava/lang/Object;", wm_jstr); "(Ljava/lang/String;)Ljava/lang/Object;", wm_jstr);
jobject wi = wdCallObjectMethod(env, wm, "getConnectionInfo", "()Landroid/net/wifi/WifiInfo;"); jobject wi = wdCallObjectMethod(env, wm, "getConnectionInfo", "()Landroid/net/wifi/WifiInfo;");
jobject ssid = wdCallObjectMethod(env, wi, "getSSID", "()Ljava/lang/String;"); jobject ssid = wdCallObjectMethod(env, wi, "getSSID", "()Ljava/lang/String;");
addJniStringToJson(env, json, "ssid", ssid); addJniStringToJson(env, network, "ssid", ssid);
(*env)->DeleteLocalRef(env, ssid); (*env)->DeleteLocalRef(env, ssid);
jobject bssid = wdCallObjectMethod(env, wi, "getBSSID", "()Ljava/lang/String;"); jobject bssid = wdCallObjectMethod(env, wi, "getBSSID", "()Ljava/lang/String;");
addJniStringToJson(env, json, "bssid", bssid); addJniStringToJson(env, network, "bssid", bssid);
(*env)->DeleteLocalRef(env, bssid); (*env)->DeleteLocalRef(env, bssid);
jint wifi_ip_int = wdCallIntMethod(env, wi, "getIpAddress", "()I"); jint wifi_ip_int = wdCallIntMethod(env, wi, "getIpAddress", "()I");
char wifi_ip[32] = {0}; char wifi_ip[32] = {0};
inet_ntop(AF_INET, &wifi_ip_int, wifi_ip, 31); inet_ntop(AF_INET, &wifi_ip_int, wifi_ip, 31);
cJSON_AddStringToObject(json, "wifi_ip", wifi_ip); cJSON_AddStringToObject(network, "wifi_ip", wifi_ip);
(*env)->DeleteLocalRef(env, wi); (*env)->DeleteLocalRef(env, wi);
(*env)->DeleteLocalRef(env, wm); (*env)->DeleteLocalRef(env, wm);
(*env)->DeleteLocalRef(env, wm_jstr); (*env)->DeleteLocalRef(env, wm_jstr);
} }
//dns
cJSON* dns = cJSON_CreateArray();
jobject nw = wdCallObjectMethod(env, ci, "getActiveNetwork", "()Landroid/net/Network;");
if(nw != NULL) {
jobject lp = wdCallObjectMethod(env, ci, "getLinkProperties", "(Landroid/net/Network;)Landroid/net/LinkProperties;", nw);
if(lp != NULL) {
jobject dns_list = wdCallObjectMethod(env, lp, "getDnsServers", "()Ljava/util/List;");
if(dns_list != NULL) {
jint size = wdCallIntMethod(env, dns_list, "size", "()I");
for(int i = 0; i < size; ++i) {
jobject ia = wdCallObjectMethod(env, dns_list, "get", "(I)Ljava/lang/Object;", i);
jstring address_jstr = wdCallObjectMethod(env, ia, "getHostAddress", "()Ljava/lang/String;");
addJniStringToArray(env, dns, address_jstr);
(*env)->DeleteLocalRef(env, address_jstr);
}
(*env)->DeleteLocalRef(env, dns_list);
}
(*env)->DeleteLocalRef(env, lp);
}
(*env)->DeleteLocalRef(env, nw);
}
cJSON_AddItemToObject(network, "dns", dns);
(*env)->DeleteLocalRef(env, ni); (*env)->DeleteLocalRef(env, ni);
return_label: return_label:
(*env)->DeleteLocalRef(env, ci); (*env)->DeleteLocalRef(env, ci);
(*env)->DeleteLocalRef(env, ci_jstr); (*env)->DeleteLocalRef(env, ci_jstr);
cJSON_AddItemToObject(json, "network", network);
logd(WD_COLLECT, "%s", "collect network info finished..."); logd(WD_COLLECT, "%s", "collect network info finished...");
} }
...@@ -791,7 +829,6 @@ void collect_user_agent(JNIEnv *env, cJSON *json) { ...@@ -791,7 +829,6 @@ void collect_user_agent(JNIEnv *env, cJSON *json) {
(*env)->DeleteLocalRef(env, key_jstr); (*env)->DeleteLocalRef(env, key_jstr);
(*env)->DeleteLocalRef(env, ua2_jstr); (*env)->DeleteLocalRef(env, ua2_jstr);
logd(WD_COLLECT, "%s", "collect user agent finished..."); logd(WD_COLLECT, "%s", "collect user agent finished...");
} }
...@@ -1046,13 +1083,11 @@ void collect_risk_info(JNIEnv *env, cJSON *json) { ...@@ -1046,13 +1083,11 @@ void collect_risk_info(JNIEnv *env, cJSON *json) {
(*env)->DeleteLocalRef(env, files_path_jstr); (*env)->DeleteLocalRef(env, files_path_jstr);
(*env)->DeleteLocalRef(env, files_dir); (*env)->DeleteLocalRef(env, files_dir);
cJSON_AddItemToObject(json, "risk", risk_item); cJSON_AddItemToObject(json, "risk", risk_item);
} }
void collect_common_app(JNIEnv *env, cJSON *json) { void collect_common_app(JNIEnv *env, cJSON *json) {
cJSON* item = cJSON_CreateArray(); cJSON* item = cJSON_CreateArray();
const char* apps[] = { const char* apps[] = {
"com.tencent.mm", "com.tencent.mm",
"com.tencent.mobileqq", "com.tencent.mobileqq",
...@@ -1075,7 +1110,6 @@ void collect_common_app(JNIEnv *env, cJSON *json) { ...@@ -1075,7 +1110,6 @@ void collect_common_app(JNIEnv *env, cJSON *json) {
"com.ss.android.article.news", "com.ss.android.article.news",
"com.tencent.news" "com.tencent.news"
}; };
for(int i = 0; i < sizeof(apps)/sizeof(const char*); ++i) { for(int i = 0; i < sizeof(apps)/sizeof(const char*); ++i) {
char path[128] = {0}; char path[128] = {0};
snprintf(path, 127, "/data/data/%s", apps[i]); snprintf(path, 127, "/data/data/%s", apps[i]);
...@@ -1083,7 +1117,6 @@ void collect_common_app(JNIEnv *env, cJSON *json) { ...@@ -1083,7 +1117,6 @@ void collect_common_app(JNIEnv *env, cJSON *json) {
cJSON_AddItemToArray(item, cJSON_CreateString(apps[i])); cJSON_AddItemToArray(item, cJSON_CreateString(apps[i]));
} }
} }
cJSON_AddItemToObject(json, "common_used_apps", item); cJSON_AddItemToObject(json, "common_used_apps", item);
} }
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <jni.h> #include <jni.h>
void addJniStringToJson(JNIEnv* env, cJSON* json, const char* key, jobject jstr); void addJniStringToJson(JNIEnv* env, cJSON* json, const char* key, jobject jstr);
void addJniStringToArray(JNIEnv* env, cJSON* json, jobject jstr);
void getJniStringSha256(JNIEnv* env, jobject jstr, char* sha256); void getJniStringSha256(JNIEnv* env, jobject jstr, char* sha256);
void bytes2Hex(const unsigned char* source, char* dest, int sourceLen, int mac_format); void bytes2Hex(const unsigned char* source, char* dest, int sourceLen, int mac_format);
void hex2Bytes(const char* source, unsigned char* dest, int sourceLen); void hex2Bytes(const char* source, unsigned char* dest, int sourceLen);
......
...@@ -12,11 +12,13 @@ ...@@ -12,11 +12,13 @@
#ifdef __arm__ #ifdef __arm__
#define WDSYSCALL(cmd, args...) wd_syscall_arm(WDNUM(cmd), ##args) #define WDSYSCALL(cmd, args...) wd_syscall_arm(WDNUM(cmd), ##args)
#define WD_SYS_mmap SYS_mmap2 #define WD_SYS_mmap SYS_mmap2
#define WD_SYS_fstatat SYS_fstatat64
#endif #endif
#ifdef __aarch64__ #ifdef __aarch64__
#define WDSYSCALL(cmd, args...) wd_syscall_aarch64(WDNUM(cmd), ##args) #define WDSYSCALL(cmd, args...) wd_syscall_aarch64(WDNUM(cmd), ##args)
#define WD_SYS_mmap SYS_mmap #define WD_SYS_mmap SYS_mmap
#define WD_SYS_fstatat SYS_newfstatat
#endif #endif
#ifdef x86 #ifdef x86
......
...@@ -76,13 +76,19 @@ void hex2Bytes(const char* source, unsigned char* dest, int sourceLen) ...@@ -76,13 +76,19 @@ void hex2Bytes(const char* source, unsigned char* dest, int sourceLen)
return; return;
} }
void addJniStringToArray(JNIEnv* env, cJSON* json, jobject jstr) {
addJniStringToJson(env, json, NULL, jstr);
}
void addJniStringToJson(JNIEnv *env, cJSON *json, const char *key, jobject jstr) { void addJniStringToJson(JNIEnv *env, cJSON *json, const char *key, jobject jstr) {
if(jstr == NULL) { if(jstr == NULL) {
cJSON_AddStringToObject(json, key, ""); if(key) cJSON_AddStringToObject(json, key, "");
else cJSON_AddItemToArray(json, cJSON_CreateString(""));
}else{ }else{
jboolean bl = 0; jboolean bl = 0;
const char* value= (*env)->GetStringUTFChars(env, jstr, &bl); const char* value= (*env)->GetStringUTFChars(env, jstr, &bl);
cJSON_AddStringToObject(json, key, value); if(key) cJSON_AddStringToObject(json, key, value);
else cJSON_AddItemToArray(json, cJSON_CreateString(value));
(*env)->ReleaseStringUTFChars(env, jstr, value); (*env)->ReleaseStringUTFChars(env, jstr, value);
} }
} }
......
...@@ -251,6 +251,10 @@ jvalue wdCallStaticMethod(JNIEnv* env, const char* clsName, const char* methodNa ...@@ -251,6 +251,10 @@ jvalue wdCallStaticMethod(JNIEnv* env, const char* clsName, const char* methodNa
jvalue wdCallMethod(JNIEnv* env, jobject obj, const char* methodName, const char* methodSig, va_list args) { jvalue wdCallMethod(JNIEnv* env, jobject obj, const char* methodName, const char* methodSig, va_list args) {
jclass cls = (*env)->GetObjectClass(env, obj); jclass cls = (*env)->GetObjectClass(env, obj);
jmethodID methodId = (*env)->GetMethodID(env, cls, methodName, methodSig); jmethodID methodId = (*env)->GetMethodID(env, cls, methodName, methodSig);
if(methodId == NULL) {
logd(WD_JNI, "not find method %s%s", methodName, methodSig);
goto return_label;
}
jvalue value = {0}; jvalue value = {0};
switch(wdGetMethodRetType(methodSig)) { switch(wdGetMethodRetType(methodSig)) {
case 'V': case 'V':
...@@ -287,6 +291,7 @@ jvalue wdCallMethod(JNIEnv* env, jobject obj, const char* methodName, const char ...@@ -287,6 +291,7 @@ jvalue wdCallMethod(JNIEnv* env, jobject obj, const char* methodName, const char
default: break; default: break;
} }
wdCheckException(env); wdCheckException(env);
return_label:
(*env)->DeleteLocalRef(env, cls); (*env)->DeleteLocalRef(env, cls);
return value; return value;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment