源码

#include #include #include #include #include #include typedef void(*FunType)(void);void (*asmcheck)(void);int detect() {    int a = 0;    char code[] =        "\xF0\x41\x2D\xE9"        "\x00\x70\xA0\xE3"        "\x0F\x80\xA0\xE1"        "\x00\x40\xA0\xE3"        "\x01\x70\x87\xE2"        "\x00\x50\x98\xE5"        "\x01\x40\x84\xE2"        "\x0F\x80\xA0\xE1"        "\x0C\x80\x48\xE2"        "\x00\x50\x88\xE5"        "\x0A\x00\x54\xE3"        "\x02\x00\x00\xAA"        "\x0A\x00\x57\xE3"        "\x00\x00\x00\xAA"        "\xF6\xFF\xFF\xEA"        "\x04\x00\xA0\xE1"        "\xF0\x81\xBD\xE8";    void *exec = mmap(NULL, (size_t) getpagesize(), PROT_EXEC | PROT_READ | PROT_WRITE , MAP_ANONYMOUS | MAP_SHARED, -1, (off_t) 0);    memcpy(exec, code, sizeof(code) + 1);    asmcheck = (FunType) exec;    asmcheck();    __asm __volatile (    "mov %0,r0 \n"    :"=r"(a)    );    munmap(exec, getpagesize());    return a;}JNIEXPORT jint JNICALL Java_com_android_util_SimulatorChecker_check  (JNIEnv *env, jobject object) {    int isSim = detect();    return (jint)isSim;}

只有当 check 方法返回是 10, 判断设备为真机, 否则为模拟器.

Android.mk

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := simulator_checkerLOCAL_SRC_FILES := com_android_util_SimulatorChecker.ccLOCAL_CPPFLAGS :=  -Os# -fvisibility=hiddenLOCAL_CFLAGS :=  -Os#-fvisibility=hiddenLOCAL_CFLAGS += -Wno-psabiLOCAL_CFLAGS += -funwind-tables -gLOCAL_CFLAGS := -funwind-tables -Wl,--no-merge-exidx-entries#-fpermissiveLOCAL_LDLIBS += -llog -ldl -landroidinclude $(BUILD_SHARED_LIBRARY)

Application.mk

APP_LOCAL_PATH :=$(call my-dir)APP_ABI := armeabi-v7a armeabiAPP_STL := stlport_staticAPP_STL := gnustl_staticAPP_OPTIM := releaseAPP_CPPFLAGS += -Wno-error=format-security

参考资料:

  • Android模拟器识别技术

  • 利用cache特性检测Android模拟器

  • Android模拟器识别技术

  • Android 检测设备是否为模拟器

更多相关文章

  1. 关于 android RIL 调试
  2. android模拟器设置代理上网
  3. react-native android 环境配置
  4. Android开发(一)拨打电话程序
  5. Android-中常用方法集锦
  6. 《android 利用自带技术解析json字符》
  7. Arcgis for Android(安卓)开发环境配置(Android(安卓)Studio篇)
  8. 从android模拟器中提取文件系统
  9. Android涂鸦技术及刮刮乐示例分析

随机推荐

  1. Android应用如何获取版本号
  2. Android经典底部选项卡集成方式之一
  3. Android利用ffmpeg做视频裁剪
  4. Android(安卓)6.0系统新特性及功能说明
  5. Intellij IDEA android-x86开发
  6. [Android]Can't create handler inside t
  7. -Android(安卓)MediaPlayer播放mp3的实例
  8. Android仿微信选择图片和拍照功能
  9. Android应用开发学习笔记之多线程与Handl
  10. android中gradle 3.1.4 处理com.android.