注:NDK的形式采用XPOSED无法拦截到。
so为了确保调用方是自己的应用,调用的时候将应用的Context传入,通过Context将应用的签名拿出来,然后和so中定义好的签名进行对比,如果一致则进行调用,代码如下:
/**
*校验APP包名和签名是否合法返回值为1表示合法
*/
jint checkSignature(JNIEnv* env,jobject thiz,jobject context){
//Context的类
jclass context_clazz=(*env)->GetObjectClass(env,context);
//得到getPackageManager方法的ID
jmethodID methodID_getPackageManager = (*env)->GetMethodID(env,
context_clazz,"getPackageManager",
"()Landroid/content/pm/PackageManager;");
//获得PackageManager对象
jobject packageManager = (*env)->CallObjectMethod(env,context,methodID_getPackageManager);
// //获得PackageManager类
jclass packageManager_clazz=(*env)->GetObjectClass