【问题标题】:Get unique device identifier from c++ on Android在 Android 上从 c++ 获取唯一的设备标识符
【发布时间】:2019-07-12 07:27:20
【问题描述】:

我有一个本地 android 库,我正在尝试使用许可系统来保护它。为此,我需要获取当前 Android 设备的唯一标识符。我一直在尝试很多解决方案,但都需要 JAVA 应用程序。

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

问候

【问题讨论】:

  • 它确实为 Java 而不是 c++ 提供了解决方案...
  • 回答是,但有问题的是 C 代码。 ;)
  • 请注意,从 Android Q 开始,第三方应用不再允许读取设备唯一标识符。无论您使用哪种编程语言。

标签: android c++ mobile android-ndk


【解决方案1】:

这是代码...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 2015-08-31
    • 2017-03-10
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 2023-01-19
    相关资源
    最近更新 更多