从C++在Android上获取唯一设备标识符

3

我有一个本地的Android库,我想通过许可证系统来保护它。为了这样做,我需要获取当前Android设备的唯一标识符。我已经尝试了很多解决方案,但所有的解决方案都需要Java应用程序。

所以我的问题是:是否可能从C++代码(使用NDK或嵌入式C++函数)中获取唯一标识符?

谢谢!


看起来这是重复的 https://dev59.com/qqPia4cB1Zd3GeqP4tmX - sklott
1
它提供了Java而不是C++的解决方案... - sa.l_dev
回答是的,但问题中有C代码。 ;) - sklott
请注意,从Android Q开始,不再允许第三方应用程序读取设备唯一标识符。无论您使用哪种编程语言都是如此。 - Michael
1个回答

0

这里是代码...

std::string getPublicStaticString(JNIEnv *env, const char *className, const char *fieldName) {
    jclass clazz = env->FindClass(className);
    if (clazz != nullptr) {
        jfieldID fid = env->GetStaticFieldID(clazz, fieldName, "Ljava/lang/String;");
    if (fid != nullptr) {
        jstring GladioReceiver = (jstring) env->GetStaticObjectField(clazz, fid);
        jboolean blnIsCopy;
        std::string mystr = env->GetStringUTFChars(GladioReceiver, &blnIsCopy);
        return mystr;
    }
}
    return "ERROR";
}

std::string CreateDeviceUniqueID(JNIEnv *env) {
    std::string strReturn;
    std::string board = getPublicStaticString(env, "android/os/Build", "BOARD");
    std::string brand = getPublicStaticString(env, "android/os/Build", "BRAND");
    std::string display = getPublicStaticString(env, "android/os/Build", "DISPLAY");
    std::string device = getPublicStaticString(env, "android/os/Build", "DEVICE");
    std::string manufacturer = getPublicStaticString(env, "android/os/Build", "MANUFACTURER");
    std::string model = getPublicStaticString(env, "android/os/Build", "MODEL");
    std::string product = getPublicStaticString(env, "android/os/Build", "PRODUCT");

    int mod = 10;
    int a1 = ((int) board.size()) % mod;
    int a2 = ((int) brand.size()) % mod;
    int a3 = ((int) display.size()) % mod;
    int a4 = ((int) device.size()) % mod;
    int a5 = ((int) manufacturer.size()) % mod;
    int a6 = ((int) model.size()) % mod;
    int a7 = ((int) product.size()) % mod;

    strReturn = "35" +
            std::to_string(a1) +
            std::to_string(a2) +
            std::to_string(a3) +
            std::to_string(a4) +
            std::to_string(a5) +
            std::to_string(a6) +
            std::to_string(a7);

    return strReturn;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接