1. 程式人生 > >NDK獲取android唯一裝置號,簡單的將andorid_id 和 serial拼接起來。

NDK獲取android唯一裝置號,簡單的將andorid_id 和 serial拼接起來。

NDK獲取android唯一裝置標識

裝置唯一標識只是簡單的將andorid_id 和 serial拼接起來。你也可以使用自己的邏輯進行拼接。

  • java 實現
  • native 實現

java 實現程式碼

    public static String getUniqueId(Context context) {
        // 獲取 android_id
        String androidID = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
        // 拼接 serial
return androidID + Build.SERIAL; }

native 實現 (將上面的java 程式碼轉化為 jni 程式碼)

 public native String getAndroidId();
extern "C"
JNIEXPORT jstring JNICALL
Java_com_encrypt_MainActivity_getAndroidId(JNIEnv *env, jobject instance) {

    // get contentResolver
    jclass activity = env->GetObjectClass(instance);
    jmethodID method = env->GetMethodID(activity, "getContentResolver"
, "()Landroid/content/ContentResolver;"); jobject resolverInstance = env->CallObjectMethod(instance, method); // get android_id from android Settings$Secure jclass androidSettingsClass = env->FindClass("android/provider/Settings$Secure"); jmethodID methodId = env->GetStaticMethodID(androidSettingsClass, "getString"
, "(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;"); jstring param_android_id = env->NewStringUTF("android_id"); jstring android_id = (jstring) env->CallStaticObjectMethod(androidSettingsClass, methodId, resolverInstance, param_android_id); // get serial num from android Build jclass androidBuildClass = env->FindClass("android/os/Build"); jfieldID SERIAL = env->GetStaticFieldID(androidBuildClass, "SERIAL", "Ljava/lang/String;"); jstring serialNum = (jstring) env->GetStaticObjectField(androidBuildClass, SERIAL); // concat strings jclass String_clazz = env->FindClass("java/lang/String"); jmethodID concat_methodID = env->GetMethodID(String_clazz, "concat", "(Ljava/lang/String;)Ljava/lang/String;"); jstring result = (jstring) env->CallObjectMethod(android_id, concat_methodID, serialNum); // release env->DeleteLocalRef(param_android_id); env->DeleteLocalRef(serialNum); return result; }