识别Android NDK中的呼叫应用程序

时间:2010-07-27 03:15:11

标签: android authentication android-ndk

我有一个原生的android库(.so)我正在捆绑一些应用程序。在本机代码中,我想验证调用应用程序的签名者/包名称。

原因是,目前任何人都可以打开.apk文件获取我的.so文件并使用它来构建自己的应用程序。

有没有办法从Java端安全地识别调用应用程序?这可以是包名称,签名或其他任何可以以独特方式识别Android应用程序的内容。

2 个答案:

答案 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;
}