我有一个本地的Android库,我想通过许可证系统来保护它。为了这样做,我需要获取当前Android设备的唯一标识符。我已经尝试了很多解决方案,但所有的解决方案都需要Java应用程序。
所以我的问题是:是否可能从C++代码(使用NDK或嵌入式C++函数)中获取唯一标识符?
谢谢!
我有一个本地的Android库,我想通过许可证系统来保护它。为了这样做,我需要获取当前Android设备的唯一标识符。我已经尝试了很多解决方案,但所有的解决方案都需要Java应用程序。
所以我的问题是:是否可能从C++代码(使用NDK或嵌入式C++函数)中获取唯一标识符?
谢谢!
这里是代码...
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;
}