我有一个原生的android库(.so)我正在捆绑一些应用程序。在本机代码中,我想验证调用应用程序的签名者/包名称。
原因是,目前任何人都可以打开.apk文件获取我的.so文件并使用它来构建自己的应用程序。
有没有办法从Java端安全地识别调用应用程序?这可以是包名称,签名或其他任何可以以独特方式识别Android应用程序的内容。
答案 0 :(得分:2)
JNI代码与Java包名称相结合,只能从同一个包和类中调用。为了进一步提高安全性,您可以从JNI代码中检查一些Java private static final
字段。
答案 1 :(得分:0)
在本机代码中,我要验证签名者/程序包名称 调用应用程序。
怎么样?
#include <jni.h>
#include <string>
extern "C"
JNIEXPORT jstring JNICALL
Java_com_x_y_TestActivity_stringFromJNI(JNIEnv *env, jobject thiz)
{
jclass jActivity_class = env->GetObjectClass(thiz);
jmethodID jMethod_id_pn = env->GetMethodID(jActivity_class,"getPackageName","()Ljava/lang/String;");
jstring package_name = (jstring) env->CallObjectMethod(thiz,jMethod_id_pn);
return package_name;
}