精华内容
下载资源
问答
  • android模拟器
    千次阅读
    2022-02-01 22:17:53

    通过Android Studio创建的手机模拟器,无需任何操作就可以获取root权限。然后还可以通过控制台在Android/sdk/emulator目录下,运行下面的指令来开放remount权限

    emulator -writable-system -netdelay none -netspeed full -avd 模拟器的名字
    更多相关内容
  • 如果我们编写了一个Android应用程序,想在一台没有Android SDK或者BUILD环境的机器显示给别人看...这篇文章介绍另外一种方法在Windows下环境下使用Android模拟器,它不依赖于SDK或者BUILD环境,可以独立分发和使用。  
  • docker-emulator-android:Dockerized android模拟器
  • 为了在模拟器中观察运行结果,创建Android应用程序前,需要先创建模拟器。有以下几种办法: 办法1:进入AndroidSDK安装目录(D:\Android\android-sdk),运行AVD Manager.exe。 办法2:运行VS2015,然后运行Android ...
  • 用命令启动android模拟器并设置其内存大小的方法,,需要的朋友可以参考下
  • Mac本M1芯片无法使用Android模拟器的解决方案.docx
  • Android模拟器躲避的检测与应对,介绍模拟器检测的主要方法
  • android模拟器java Android

    2022-07-25 20:53:46
    android模拟器java Androidandroid模拟器java Androidandroid模拟器java Androidandroid模拟器java Androidandroid模拟器java Androidandroid模拟器java Androidandroid模拟器java Androidandroid模拟器java Android...
  • 用于Androidstudio模拟器的系统签名,方便进行需要系统签名方面的调试,内含一个生成的platform.jks和系统签名源文件(.pk8和x509.pem等等) ,拿到源文件你也可以自己生成jks或者keystore。 内含jks签名信息: Key ...
  • Ubuntu下全命令行部署Android模拟器

    千次阅读 2022-05-09 22:39:47
    安装 Android 模拟器 sdkmanager avdmanager 从命令行启动模拟器 Android 调试桥 (adb) 平台代号、版本、API 级别和 NDK 版本 下表列出了代号、对应的版本号以及关联的 API 级别。 代号 ...

    目录

    平台代号、版本、API 级别和 NDK 版本

    安装JDK环境

    安装 Android 模拟器

    sdkmanager

    avdmanager

    从命令行启动模拟器

    Android 调试桥 (adb)


    平台代号、版本、API 级别和 NDK 版本

    下表列出了代号、对应的版本号以及关联的 API 级别。

    代号

    版本

    API 级别/NDK 版本

    Android12L12.1API 级别 32
    Android1212API 级别 31
    Android1111API 级别 30
    Android1010API 级别 29
    Pie9API 级别 28
    Oreo8.1.0API 级别 27
    Oreo8.0.0API 级别 26
    Nougat7.1API 级别 25
    Nougat7.0API 级别 24
    Marshmallow6.0API 级别 23
    Lollipop5.1API 级别 22
    Lollipop5.0API 级别 21
    KitKat4.4 - 4.4.4API 级别 19
    Jelly Bean4.3.xAPI 级别 18
    Jelly Bean4.2.xAPI 级别 17
    Jelly Bean4.1.xAPI 级别 16
    Ice Cream Sandwich4.0.3 - 4.0.4API 级别 15,NDK 8
    Ice Cream Sandwich4.0.1 - 4.0.2API 级别 14,NDK 7
    Honeycomb3.2.xAPI 级别 13
    Honeycomb3.1API 级别 12,NDK 6
    Honeycomb3.0API 级别 11
    Gingerbread2.3.3 - 2.3.7API 级别 10
    Gingerbread2.3 - 2.3.2API 级别 9,NDK 5
    Froyo2.2.xAPI 级别 8,NDK 4
    Eclair2.1API 级别 7,NDK 3
    Eclair2.0.1API 级别 6
    Eclair2.0API 级别 5
    Donut1.6API 级别 4,NDK 2
    Cupcake1.5API 级别 3,NDK 1
    (无代号)1.1API 级别 2
    (无代号)1.0API 级别 1

    安装JDK环境

    root@w23ta0-virtual-machine# wget https://mirrors.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
    root@w23ta0-virtual-machine# tar zxvf jdk-8u202-linux-x64.tar.gz -C /opt
    ​
    export JAVA_HOME="/opt/jdk1.8.0_202"
    export PATH="$PATH:$JAVA_HOME/bin"
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    安装 Android 模拟器

    sdkmanager

    sdkmanager 是一个命令行工具,您可以用它来查看、安装、更新和卸载 Android SDK 的软件包。

    root@w23ta0-virtual-machine# wget https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
    ​
    root@w23ta0-virtual-machine# unzip commandlinetools-linux-8092744_latest.zip -d /opt/
    ​
    root@w23ta0-virtual-machine# cd /opt/cmdline-tools/bin

    初始化目录

    root@w23ta0-virtual-machine# ./sdkmanager --sdk_root=opt/android-sdk --install

    接受所有许可证

    root@w23ta0-virtual-machine# ./sdkmanager --sdk_root=opt/android-sdk --licenses

    安装的基本工具

    root@w23ta0-virtual-machine# ./sdkmanager --sdk_root=opt/android-sdk --install  "platforms;android-29" "platform-tools" "emulator" "cmdline-tools;latest" "system-images;android-29;default;x86"  

    avdmanager

    avdmanager是一个命令行工具,可以用于从命令行创建和管理 Android 虚拟设备 (AVD)。借助 AVD,您可以定义要在 Android 模拟器中模拟的 Android 手机、Wear OS 手表或 Android TV 设备的特性。

    添加Android SDK环境变量

    export ANDROID_SDK_ROOT=/opt/android-sdk
    export PATH=$PATH:$ANDROID_SDK_ROOT/emulator
    export PATH=$PATH:$ANDROID_SDK_ROOT/platform-tools/
    export PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/

    创建新的 AVD

    root@w23ta0-virtual-machine# echo "no" | avdmanager --verbose create avd --force --name "android-29" --package "system-images;android-29;default;x86" 

    列出现有的 Android 虚拟设备

    root@w23ta0-virtual-machine# avdmanager list avd
    Available Android Virtual Devices:
        Name: android-29
        Path: /root/.android/avd/android-29.avd
      Target: Default Android System Image
              Based on: Android 10.0 (Q) Tag/ABI: default/x86
      Sdcard: 512 MB

    从命令行启动模拟器

    查看 AVD 名称的列表

    root@w23ta0-virtual-machine# emulator -list-avds
    android-29

    启动模拟器

    root@w23ta0-virtual-machine# emulator @android-29 -no-boot-anim -netdelay none -accel on -no-snapshot -wipe-data &

    Android 调试桥 (adb)

    Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令)的访问权限。

    使用 devices 命令获取目标设备的序列号

    root@w23ta0-virtual-machine# adb devices
    List of devices attached
    emulator-5554   device

    使用 adb 的 install 命令在模拟器或连接的设备上安装 APK

    root@w23ta0-virtual-machine# adb install v2rayNG_1.1.14.apk
    Performing Streamed Install
    Success

    获取应用的软件包名称

    root@w23ta0-virtual-machine# adb shell pm list packages |grep v2ray
    package:com.v2ray.ang

    获取到APP的详细信息

    root@w23ta0-virtual-machine# adb shell dumpsys package com.v2ray.ang 
    Activity Resolver Table:
      Full MIME Types:
          text/plain:
            9317857 com.v2ray.ang/.ui.MainActivity filter eb50f9f
              Action: "android.intent.action.SEND"
              Category: "android.intent.category.DEFAULT"
              Type: "text/plain"

    启动应用程序

    root@w23ta0-virtual-machine# adb shell am start -n com.v2ray.ang/com.v2ray.ang.ui.MainActivity
    Starting: Intent { cmp=com.v2ray.ang/.ui.MainActivity }

    关闭指定包名的应用程序

    root@w23ta0-virtual-machine# adb shell am  force-stop  com.v2ray.ang
    展开全文
  • Android模拟器检测方案优化

    千次阅读 2021-05-26 13:12:24
    Android模拟器检测方案项目背景:由于美柚当前检测模拟器的方案存在识别率(指模拟器没被检测出来)和准确率(错误地将真机判定为模拟器)都比较低的情况。导致黑产猖獗,所以提出该方案用于改善检测 Android 模拟器的...

    Android模拟器检测方案

    项目背景:由于美柚当前检测模拟器的方案存在识别率(指模拟器没被检测出来)和准确率(错误地将真机判定为模拟器)都比较低的情况。导致黑产猖獗,所以提出该方案用于改善检测 Android 模拟器的识别率和准确率

    PS: 经过309台真机测试

    目前市面上所有的模拟器如下:

    Android模拟器名

    支持平台

    Android内核版本

    CPU架构方式

    Adb连接方式

    Android原生模拟器

    Mac、 Linux 、Windows

    All

    x86

    adb connect 127.0.0.1:5555

    Genymotion

    Mac、Linux、Windows

    All

    x86

    adb connect 127.0.0.1:5555

    海马玩模拟器(Droid4X)

    Windows、Mac

    4.2.2

    x86

    adb connect 127.0.0.1:26944

    Bluestacks(蓝叠)模拟器

    Windows

    4.4.2

    arm

    adb connect 127.0.0.1:5555

    雷电模拟器

    Windows

    5.1.1

    x86

    adb connect 127.0.0.1:5555

    逍遥安卓模拟器

    Windows

    5.1.1

    x86

    adb connect 127.0.0.1:21503

    天天模拟器

    Windows

    4.4.4、6.0

    arm

    adb connect 127.0.0.1:6555

    网易MuMu安卓模拟器

    Mac、Windows(为荒野求生)

    6.0.1

    x86

    adb connect 127.0.0.1:7555

    夜神安卓模拟器

    Windows、Mac

    4.4.2

    x86

    adb connect 127.0.0.1:62001

    靠谱助手模拟器 / 猩猩助手模拟器

    Windows

    4.4.2、4.4.4、6.0

    x86、arm

    蓝叠、天天模拟器集成的

    PS:后面的测试都会基于这些模拟器的基础上做测试,并且附加条件范围内能拿到的其他Android真机

    目前市场上主流的模拟器:一种是基于Qemu,另一类是基于Genymotion

    网上现在流行用一些模拟器特征进行鉴别,比如:

    1.通过判断IMEI是否全部为0000000000格式,判断手机号码是否特殊的模拟器值,判断IMSI是否特殊值

    2.判断Build中的一些模拟器特征值

    3.匹配Qemu的一些特征文件以及属性

    4.通过获取cpu信息,将x86的给过滤掉(真机一般都是基于ARM)

    一、Android模拟器初级检测方案(基础特征值检测[原APP中只检测了部分,不够全面])

    1.已知模拟器的IMEI:“000000000000000”, “e21833235b6eef10”, “012345678912345”

    2.已知模拟器的手机号:“15555215554”, “15555215556”, “15555215558”, “15555215560”,“15555215562”, “15555215564”, “15555215566”, “15555215568”,“15555215570”, “15555215572”, “15555215574”, “15555215576”,“15555215578”, “15555215580”, “15555215582”, “15555215584”

    3.已知模拟器的IMSI:“310260000000000”

    4.已知模拟器的Build信息(可能误判):

    private static Property[] known_props = {new Property("init.svc.qemud", null),

    new Property("init.svc.qemu-props", null), new Property("qemu.hw.mainkeys", null),

    new Property("qemu.sf.fake_camera", null), new Property("qemu.sf.lcd_density", null),

    new Property("ro.bootloader", "unknown"), new Property("ro.bootmode", "unknown"),

    new Property("ro.hardware", "goldfish"), new Property("ro.kernel.android.qemud", null),

    new Property("ro.kernel.qemu.gles", null), new Property("ro.kernel.qemu", "1"),

    new Property("ro.product.device", "generic"), new Property("ro.product.model", "sdk"),

    new Property("ro.product.name", "sdk"),

    // Need to double check that an "empty" string ("") returns null

    new Property("ro.serialno", null)};

    5.特殊手机的运营商:“android”

    ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getNetworkOperatorName().toLowerCase().equals(“android”)

    [2] 检测模拟器特征文件是否存在

    “/dev/socket/qemud”,

    “/dev/qemu_pipe”,

    "/system/lib/libc_malloc_debug_qemu.so",

    “/sys/qemu_trace”,

    "/system/bin/qemu-props(不可靠,可能误判,很多真机有这项)",

    "/dev/socket/genyd",

    “/dev/socket/baseband_genyd”

    -------新版本方案-----

    (184个特征文件检测)

    // =================== 主要证据 ===================

    /**

    * 特殊的模拟器特征文件

    * 186项文件,查到一个文件就是百分百模拟器,权重最高

    *

    * 模拟器内核GoldFish

    * /data下的特征文件需要权限才可以访问,其他目录下的特征文件不需要

    * 因为模拟器的话,都是root权限,所以并不需要担心权限问题。

    * 转载请注明出处:CSDN 胖虎

    * https://blog.csdn.net/ljphhj/

    */

    static final String[] emulatorFiles = {

    // vbox模拟器文件

    "/data/youwave_id",

    "/dev/vboxguest",

    "/dev/vboxuser",

    "/mnt/prebundledapps/bluestacks.prop.orig",

    "/mnt/prebundledapps/propfiles/ics.bluestacks.prop.note",

    "/mnt/prebundledapps/propfiles/ics.bluestacks.prop.s2",

    "/mnt/prebundledapps/propfiles/ics.bluestacks.prop.s3",

    "/mnt/sdcard/bstfolder/InputMapper/com.bluestacks.appmart.cfg",

    "/mnt/sdcard/buildroid-gapps-ics-20120317-signed.tgz",

    "/mnt/sdcard/windows/InputMapper/com.bluestacks.appmart.cfg",

    "/proc/irq/9/vboxguest",

    "/sys/bus/pci/drivers/vboxguest",

    "/sys/bus/pci/drivers/vboxguest/0000:00:04.0",

    "/sys/bus/pci/drivers/vboxguest/bind",

    "/sys/bus/pci/drivers/vboxguest/module",

    "/sys/bus/pci/drivers/vboxguest/new_id",

    "/sys/bus/pci/drivers/vboxguest/remove_id",

    "/sys/bus/pci/drivers/vboxguest/uevent",

    "/sys/bus/pci/drivers/vboxguest/unbind",

    "/sys/bus/platform/drivers/qemu_pipe",

    "/sys/bus/platform/drivers/qemu_trace",

    "/sys/class/bdi/vboxsf-c",

    "/sys/class/misc/vboxguest",

    "/sys/class/misc/vboxuser",

    "/sys/devices/virtual/bdi/vboxsf-c",

    "/sys/devices/virtual/misc/vboxguest",

    "/sys/devices/virtual/misc/vboxguest/dev",

    "/sys/devices/virtual/misc/vboxguest/power",

    "/sys/devices/virtual/misc/vboxguest/subsystem",

    "/sys/devices/virtual/misc/vboxguest/uevent",

    "/sys/devices/virtual/misc/vboxuser",

    "/sys/devices/virtual/misc/vboxuser/dev",

    "/sys/devices/virtual/misc/vboxuser/power",

    "/sys/devices/virtual/misc/vboxuser/subsystem",

    "/sys/devices/virtual/misc/vboxuser/uevent",

    "/sys/module/vboxguest",

    "/sys/module/vboxguest/coresize",

    "/sys/module/vboxguest/drivers",

    "/sys/module/vboxguest/drivers/pci:vboxguest",

    "/sys/module/vboxguest/holders",

    "/sys/module/vboxguest/holders/vboxsf",

    "/sys/module/vboxguest/initsize",

    "/sys/module/vboxguest/initstate",

    "/sys/module/vboxguest/notes",

    "/sys/module/vboxguest/notes/.note.gnu.build-id",

    "/sys/module/vboxguest/parameters",

    "/sys/module/vboxguest/parameters/log",

    "/sys/module/vboxguest/parameters/log_dest",

    "/sys/module/vboxguest/parameters/log_flags",

    "/sys/module/vboxguest/refcnt",

    "/sys/module/vboxguest/sections",

    "/sys/module/vboxguest/sections/.altinstructions",

    "/sys/module/vboxguest/sections/.altinstr_replacement",

    "/sys/module/vboxguest/sections/.bss",

    "/sys/module/vboxguest/sections/.data",

    "/sys/module/vboxguest/sections/.devinit.data",

    "/sys/module/vboxguest/sections/.exit.text",

    "/sys/module/vboxguest/sections/.fixup",

    "/sys/module/vboxguest/sections/.gnu.linkonce.this_module",

    "/sys/module/vboxguest/sections/.init.text",

    "/sys/module/vboxguest/sections/.note.gnu.build-id",

    "/sys/module/vboxguest/sections/.rodata",

    "/sys/module/vboxguest/sections/.rodata.str1.1",

    "/sys/module/vboxguest/sections/.smp_locks",

    "/sys/module/vboxguest/sections/.strtab",

    "/sys/module/vboxguest/sections/.symtab",

    "/sys/module/vboxguest/sections/.text",

    "/sys/module/vboxguest/sections/__ex_table",

    "/sys/module/vboxguest/sections/__ksymtab",

    "/sys/module/vboxguest/sections/__ksymtab_strings",

    "/sys/module/vboxguest/sections/__param",

    "/sys/module/vboxguest/srcversion",

    "/sys/module/vboxguest/taint",

    "/sys/module/vboxguest/uevent",

    "/sys/module/vboxguest/version",

    "/sys/module/vboxsf",

    "/sys/module/vboxsf/coresize",

    "/sys/module/vboxsf/holders",

    "/sys/module/vboxsf/initsize",

    "/sys/module/vboxsf/initstate",

    "/sys/module/vboxsf/notes",

    "/sys/module/vboxsf/notes/.note.gnu.build-id",

    "/sys/module/vboxsf/refcnt",

    "/sys/module/vboxsf/sections",

    "/sys/module/vboxsf/sections/.bss",

    "/sys/module/vboxsf/sections/.data",

    "/sys/module/vboxsf/sections/.exit.text",

    "/sys/module/vboxsf/sections/.gnu.linkonce.this_module",

    "/sys/module/vboxsf/sections/.init.text",

    "/sys/module/vboxsf/sections/.note.gnu.build-id",

    "/sys/module/vboxsf/sections/.rodata",

    "/sys/module/vboxsf/sections/.rodata.str1.1",

    "/sys/module/vboxsf/sections/.smp_locks",

    "/sys/module/vboxsf/sections/.strtab",

    "/sys/module/vboxsf/sections/.symtab",

    "/sys/module/vboxsf/sections/.text",

    "/sys/module/vboxsf/sections/__bug_table",

    "/sys/module/vboxsf/sections/__param",

    "/sys/module/vboxsf/srcversion",

    "/sys/module/vboxsf/taint",

    "/sys/module/vboxsf/uevent",

    "/sys/module/vboxsf/version",

    "/sys/module/vboxvideo",

    "/sys/module/vboxvideo/coresize",

    "/sys/module/vboxvideo/holders",

    "/sys/module/vboxvideo/initsize",

    "/sys/module/vboxvideo/initstate",

    "/sys/module/vboxvideo/notes",

    "/sys/module/vboxvideo/notes/.note.gnu.build-id",

    "/sys/module/vboxvideo/refcnt",

    "/sys/module/vboxvideo/sections",

    "/sys/module/vboxvideo/sections/.data",

    "/sys/module/vboxvideo/sections/.exit.text",

    "/sys/module/vboxvideo/sections/.gnu.linkonce.this_module",

    "/sys/module/vboxvideo/sections/.init.text",

    "/sys/module/vboxvideo/sections/.note.gnu.build-id",

    "/sys/module/vboxvideo/sections/.rodata.str1.1",

    "/sys/module/vboxvideo/sections/.strtab",

    "/sys/module/vboxvideo/sections/.symtab",

    "/sys/module/vboxvideo/sections/.text",

    "/sys/module/vboxvideo/srcversion",

    "/sys/module/vboxvideo/taint",

    "/sys/module/vboxvideo/uevent",

    "/sys/module/vboxvideo/version",

    "/system/app/bluestacksHome.apk",

    "/system/bin/androVM-prop",

    "/system/bin/androVM-vbox-sf",

    "/system/bin/androVM_setprop",

    "/system/bin/get_androVM_host",

    "/system/bin/mount.vboxsf",

    "/system/etc/init.androVM.sh",

    "/system/etc/init.buildroid.sh",

    "/system/lib/hw/audio.primary.vbox86.so",

    "/system/lib/hw/camera.vbox86.so",

    "/system/lib/hw/gps.vbox86.so",

    "/system/lib/hw/gralloc.vbox86.so",

    "/system/lib/hw/sensors.vbox86.so",

    "/system/lib/modules/3.0.8-android-x86+/extra/vboxguest",

    "/system/lib/modules/3.0.8-android-x86+/extra/vboxguest/vboxguest.ko",

    "/system/lib/modules/3.0.8-android-x86+/extra/vboxsf",

    "/system/lib/modules/3.0.8-android-x86+/extra/vboxsf/vboxsf.ko",

    "/system/lib/vboxguest.ko",

    "/system/lib/vboxsf.ko",

    "/system/lib/vboxvideo.ko",

    "/system/usr/idc/androVM_Virtual_Input.idc",

    "/system/usr/keylayout/androVM_Virtual_Input.kl",

    "/system/xbin/mount.vboxsf",

    "/ueventd.android_x86.rc",

    "/ueventd.vbox86.rc",

    "/ueventd.goldfish.rc",

    "/fstab.vbox86",

    "/init.vbox86.rc",

    "/init.goldfish.rc",

    // ========针对原生Android模拟器 内核:goldfish===========

    "/sys/module/goldfish_audio",

    "/sys/module/goldfish_sync",

    // ========针对蓝叠模拟器===========

    "/data/app/com.bluestacks.appmart-1.apk",

    "/data/app/com.bluestacks.BstCommandProcessor-1.apk",

    "/data/app/com.bluestacks.help-1.apk",

    "/data/app/com.bluestacks.home-1.apk",

    "/data/app/com.bluestacks.s2p-1.apk",

    "/data/app/com.bluestacks.searchapp-1.apk",

    "/data/bluestacks.prop",

    "/data/data/com.androVM.vmconfig",

    "/data/data/com.bluestacks.accelerometerui",

    "/data/data/com.bluestacks.appfinder",

    "/data/data/com.bluestacks.appmart",

    "/data/data/com.bluestacks.appsettings",

    "/data/data/com.bluestacks.BstCommandProcessor",

    "/data/data/com.bluestacks.bstfolder",

    "/data/data/com.bluestacks.help",

    "/data/data/com.bluestacks.home",

    "/data/data/com.bluestacks.s2p",

    "/data/data/com.bluestacks.searchapp",

    "/data/data/com.bluestacks.settings",

    "/data/data/com.bluestacks.setup",

    "/data/data/com.bluestacks.spotlight",

    // ========针对逍遥安卓模拟器===========

    // 虚拟化网卡和pci,可能存在误判,不可靠

    // "/sys/module/virtio_net",

    // "/sys/module/virtio_pci",

    "/data/data/com.microvirt.download",

    "/data/data/com.microvirt.guide",

    "/data/data/com.microvirt.installer",

    "/data/data/com.microvirt.launcher",

    "/data/data/com.microvirt.market",

    "/data/data/com.microvirt.memuime",

    "/data/data/com.microvirt.tools",

    // ========针对Mumu模拟器===========

    "/data/data/com.mumu.launcher",

    "/data/data/com.mumu.store",

    "/data/data/com.netease.mumu.cloner"

    };

    新旧方案在模拟器上的表现:从表中可以看出,旧方案在针对一些较新的版本的模拟器时已经无效了,模拟器都无法准确识别出来,旧版本识别模拟器为30%识别率,新版本方案是100%识别率,所以旧的方案决定摒弃不再使用。

    Android模拟器名

    旧方式(imei,imsi,phonenumber,build,files)

    新特征判断(模拟器特征文件)

    Android原生模拟器

    模拟器-build,imsi,pipies,emuprops

    模拟器

    Genymotion

    模拟器-build,imei,files

    模拟器

    海马玩模拟器(Droid4X)

    真机(000000)

    模拟器

    Bluestacks(蓝叠)模拟器

    真机(000000)

    模拟器

    雷电模拟器

    真机(000000)

    模拟器

    逍遥安卓模拟器

    真机(000000)

    模拟器

    天天模拟器

    真机(000000)

    模拟器

    网易MuMu安卓模拟器

    模拟器-build

    模拟器

    夜神安卓模拟器

    真机(000000)

    模拟器

    靠谱助手模拟器 / 猩猩助手模拟器

    真机(000000)

    模拟器

    采用云测平台TestIn,测试真机309台,判断模拟器,新旧方案对比:

    旧方案:误判为模拟器的概率为18% , 新方案:误判率为0%

    对应的Excel结果表格为:

    **二、Android模拟器中级判断方案==[辅证,权重低]== **

    1.传感器判断:判断模拟器上不存在的传感器类型,而真机上普遍存在的,最后决定辅证传感器为:【计步传感器,光线传感器,距离传感器】这三个传感器的存在与否用来作为辅助验证条件。

    传感器类型

    在上述10款模拟器中检测是否可靠(模拟器上有支持 or 大部分真机上没有支持)

    TYPE_STEP_DETECTOR or TYPE_STEP_COUNTER //计步传感器(硬件)

    不完全可靠(少数机器没有)

    TYPE_LIGHT //光线传感器(硬件)

    相对可靠(300台真机仅几台没有此传感器)

    TYPE_PROXIMITY //距离传感器(硬件)

    不完全可靠(少数机器没有)

    TYPE_PRESSURE //压力传感器(硬件)

    不可靠(大部分真机没有)

    TYPE_ACCELEROMETER //加速度传感器(硬件)

    不可靠(有模拟器支持)

    TYPE_MAGNETIC_FIELD //磁场传感器(硬件)

    不可靠(有模拟器支持)

    TYPE_ORIENTATION //方向传感器(软件传感器,数据来自重力和磁场传感器)

    不可靠(有模拟器支持)

    TYPE_GYROSCOPE //陀螺仪传感器(硬件)

    不可靠(有模拟器支持)

    TYPE_GRAVITY //重力传感器(硬件或软件)

    不可靠(有模拟器支持)

    TYPE_LINEAR_ACCELERATION //线性加速度传感器(硬件或软件)

    不可靠(有模拟器支持)

    TYPE_ROTATION_VECTOR //旋转矢量传感器(硬件或软件)

    不可靠(有模拟器支持)

    TYPE_RELATIVE_HUMIDITY //湿度传感器(硬件)

    不可靠(大部分真机没有)

    TYPE_AMBIENT_TEMPERATURE or TYPE_TEMPERATURE //温度传感器(硬件)

    不可靠(大部分真机没有)

    2.CpuInfo检测CPU是否是PC

    /**

    * cat /proc/cpuinfo

    * 从cpuinfo中读取cpu架构

    */

    public static boolean isPcKernel(){

    String str = "";

    try {

    Process start = new ProcessBuilder(new String[]{"/system/bin/cat", "/proc/cpuinfo"}).start();

    StringBuffer stringBuffer = new StringBuffer();

    String str2 = "";

    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(start.getInputStream(), "utf-8"));

    while (true) {

    String readLine = bufferedReader.readLine();

    if (readLine == null) {

    break;

    }

    stringBuffer.append(readLine);

    }

    bufferedReader.close();

    str = stringBuffer.toString().toLowerCase();

    } catch (IOException e) {

    }

    if (str.contains("intel") || str.contains("amd")) {

    return true;

    }

    return false;

    }

    3.SO库确认CPU架构

    /**

    * 获取CPU架构模式,

    * -1 : so库加载失败,不能使用jni函数

    * 0 : 三种cpu架构模式都不符合(jni函数判断有误了)

    * 1 : x86

    * 2 : mips

    * 3 : arm

    * @return

    */

    public static int getCpuType(){

    if (CpuTypeHelper.successLoad){

    if (isX86Cpu()){

    return CPU_TYPE_X86;

    }else if (isMipsCpu()){

    return CPU_TYPE_MIPS;

    }else if (isArmCpu()){

    return CPU_TYPE_ARM;

    }

    return CPU_TYPE_UNKNOWN;

    }else{

    return LOAD_SO_FAILED;

    }

    }

    4.[so可能导致闪退,不采用]利用真机和模拟器(pc)的cache设计不同来区分

    大致思路:真机的cache为一级,模拟器的cache为两级(指令cache和数据cache分开), 因此执行一段相同的机器码往一个address地址中赋值,得到的结果真机和模拟器上是不会一样的

    5.System.loadlibrary加载异常检测cpu架构

    通过加载一个不存在的so库,使系统抛出异常load堆栈信息,匹配异常堆栈信息中的nativeLibraryDirectories值,arm的so会去找arm64,再寻找arm32,而x86会去lib/x86中寻找so,从堆栈中就可以得出cpu架构模式

    有些模拟器堆栈中只加载到/lib,而没有细分(如:夜神模拟器[Couldn’t load noexits_lib from loader dalvik.system.PathClassLoader[DexPathList[[zip file “/data/app/com.meiyou.demo.detector-1.apk”],nativeLibraryDirectories=[/data/app-lib/com.meiyou.demo.detector-1, /system/lib]]]: findLibrary returned null]),这样的话这个项便仅仅只能作为辅证,后端发现异常后作为一个判断参考依据。

    6.[不采用]电池电量、手机信号、Location位置(电池需要两个时间点差值检测,不方便也不靠谱,手机信号的检测7.0后检测不了,定位信息模拟器完全可以模拟器,不靠谱)

    三、Android模拟器进阶判断方案(黑产,番外篇)[以上仅仅防君子]

    XPOSED HOOK (JAVA)

    PLT and Inline Hook (Native)

    Virtual HOOK (JAVA and Native)

    自制ROM HOOK (JAVA and Native)

    展开全文
  • Android模拟器

    千次阅读 2019-07-21 15:50:45
    ” 使用Android模拟器开发和调试应用肯定比使用真机方便。但相比XCODE的IOS模拟器,Android SDK自带的AVD实在不争气,不过一些第三方的模拟器却表现不俗! 1、Android SDK自带的AVD模拟器 12年我开始接触Android...

    “工欲善其事,必先利其器。” 使用Android模拟器开发和调试应用肯定比使用真机方便。但相比XCODEIOS模拟器,Android SDK自带的AVD实在不争气,不过一些第三方的模拟器却表现不俗!

    1、Android SDK自带的AVD模拟器

    12年我开始接触Android开发时候,手头上甚至连一部低端的Android手机都没有,那时候用的是Android SDK自带的AVD模拟器,相信任何Android开发者都对这货深恶痛绝。一直以来,Android开发都有以下的毛病:

    • AVD模拟器奇卡无比;

    • 使用USB数据线链接手机经常无法设别设备,adb容易抽风;

    • Log日志输出不全;

    一直以来都想找一款能够顺畅运行APP的Android模拟器,以下就介绍几款比较给力的。

    2、Genymotion

    Genymotion是一款顺畅和容易(fast and easy-to-use)使用的Android模拟器,可以用来运行和调试你的APP。Genymotion 来自于AndroVM 这个开源项目,基于 x86 和 VirtualBox,支持 OpenGL 加速,可以用于 Mac/Win/Linux。最近发布了新版,支持了 Android2.3/4.3,新增了拖拽安装 apk,移除了 Google 市场(后面提供解决方案)。另外增加了功能更丰富的付费版,个人可以继续使用免费版。

    特点

    1. 超级流畅;

    2. 支持拖拽安装APK;

    3. 有多种Android系统版本和设备类型供选择;

    4. 能模拟手机的旋转、充电情况、GPS数据等物理数据;

    此外,Genymotion还提供了EclipseIntellij Idea(Android Studio)的插件,方便你从IDE启动模拟器,不过目前插件的功能也仅仅是用于启动模拟器。

    当然Genymotion也不是万能的,它也有一些不足之处。

    Genymotion无法启动

    Window版本的GenymotionVirtualBox的链接经常出问题,Genymotion经常无法启动,并提示VirtualBox引擎出错,关于Genymotion安装以及启动过程中出现的问题,你可以参考官方的帮助文档

    Genymotion无法安装Google Play

    前面说过,新版 Genymotion 移除了 Google 市场。实际上,对 ARM library 的支持也一并移除了:

    Both the “Google apps” and the “ARM library support” features are removed.

    有的APP用到了ARM的SO库,安装这些 App 时,会报「INSTALL_FAILED_CPU_ABI_INCOMPATIBLE」错误,比如微信。xda 论坛给出了一个解决方案,经验证确实好用。
    安装 GApps(含 Google 市场)和 ARM Translation(提供 ARM 支持)的步骤:

    1. 下载 ARM Translation Installer v1.1

    2. 下载对应系统的 GApps

    3. 安装第 1步下载到的文件(直接把 zip 文件拖进虚拟机,不要解压),安装完关闭虚拟机再打开;

    4. 安装第 2 步下载到的文件(步骤同上);

    这样,Google Play 和其他 Google App 都有了,再安装微信等应用也不会报错了。(但是此方法并不是对所有的APP都管用, Genymotion对使用了ARM的SO库的APP的支持确实不好,希望以后能改进)。

    3、电脑上也可以玩Android游戏的BlueStacks

    Android 第一個第三方的模拟器就是 Bluestacks,网络上也有許多介绍文章。最大优势是占用资源小,安装包用量大约是 182 MB 左右,同样有 Windows / Mac 版、内置Google Play 商店。

    如何使用

    首先,xp用户需先安装Windows Installer 4.5.NET Framework 2.0 SP2,否则会提示出错,我们这里也提供了下载,如果电脑上已经安装过这些软件可以跳过此步。然后到官网下载最新的安装包并安装。

    不足之处

    Bluestacks相比Genymotion,不容易出现无法启动的问题,也支持ARM Library,但不足之处也是明显的:

    1. 流畅度不如Genymotion

    2. 没有多种Android系统以及设备型号供选择;

    3. 最致命的,Bluestacks是为了游戏而不是为了开发而设计的,所以无法竖屏,不适合开发 ;

    4、最适合开发的Android模拟器Droid4X

    正如官网所介绍的,海马玩模拟器(Droid4X)是迄今为止在性能,兼容性和操控体验方面最好的安卓模拟器。通过Droid4X,用户可以在PC上享受百万移动应用和游戏带来的全新体验。

    海马玩模拟器在Android内核和图形渲染方面取得了突破性的成果,在同等PC硬件配置下,整体性能超出其他同类产品50%以上。海马玩模拟器美解决了ARM程序在X86架构下的运行问题,兼容市面现有99%以上的应用和游戏。

    Droid4X模拟器是利用VirtualBox为基础,支持滑动按键,自带ROOT权限, 启动速度快等等。相信很多朋友使用传统安卓模拟器都会遇到各种各样的问题导致使用体验差。而这款海马玩安卓模拟器(DROID4X)不仅支持双显卡的电脑 同时系统内自带资源库,让你完完全全感受原生安卓的独特魅力。使用海马玩安卓模拟器(DROID4X)能让你轻轻松松使用电脑的安卓客户端。

    特点

    1. 速度流畅,稍微不如Genymotion,但是比BlueStacks好很多;

    2. 支持横竖屏切换,支持摇动以及GPS数据模拟;

    3. 支持ARM Library,能够运行Google Play等Genymotion无法运行的APP;

    4. 支持手柄控制;

    5. 未来支持在IOS运行,也就是可以用IPHONE运行Android应用了,想想就怕;

    如何使用

    1. 下载并安装 VirtualBox;

    2. 下载并安装Droid4X

    不足之处

    Droid4X可以说得上没什么可以挑剔的地方,非要说的话,就是流畅度稍微不如Genymotion,UI不如Genymotion“接地气”,更像是为了游戏而设计的。此外,也不想Genymotion那样有众多Android系统版本可以选择,不过这些都是无关紧要的功能,毕竟我们不会用一个模拟器去作覆盖测试,是不?

    总结

    从使用经验上来看,Droid4X确实是一款值得每个Android开发汪使用的模拟器,试想一下,每次完成Coding,轻轻按一下Shift+F10,或者使用“重大事件决策按钮”,如下图,

    展开全文
  • Unity Android模拟器调试

    千次阅读 2021-05-28 05:51:59
    Unity Android模拟器调试Unity项目遇到了只会在Android上出现的问题,code review再三没有找到问题,只能想到动态调试了。Unity Android的真机调试只能使用Wi-Fi调试,它要求开发机和Android设备在同一子网下,具体...
  • Win10 Android模拟器教程

    2021-06-07 05:46:12
    Win10 Android教程教程Visual Studio Emulator for... 尽管此程序被称为Android的Visual Studio模拟器,但它不需要安装Visual Studio,即Android的Visual Studio模拟器,因为它已经是专用于Win10系统的Android模拟器...
  • Android 模拟器一直以运行速度慢著称, 本文介绍使用 Intel HAXM 技术为 Android 模拟器加速, 使模拟器运行度媲美真机, 彻底解决模拟器运行慢的问题。Intel HAXM (Hardware Accelerated Execution Manager) 使用...
  • 这个文档是教大家在Android模拟器上安装格式为apk的文件,安装成功后可以在模拟器上运行安装成功的软件。
  • Android模拟器上如何获得root权限?

    千次阅读 2021-05-26 14:35:49
    我需要在Android模拟器中获得root权限,从而使用'iptables'和'busybox'功能。尝试安装了z4root应用程序,但需要很长时间,且没有完成获取root就卡住了。有人说如果我们把系统降级到RC30以下,就可以获得root权限了。...
  • android 模拟器的使用

    千次阅读 2021-04-06 10:33:20
    目前比较火的的模拟器:夜神android模拟器和逍遥游模拟器 安装完模拟器以后,需要在模拟器上再安装es文件浏览器,这个是可以直接root,然后进行访问文件夹的 root步骤: 在主界面的左上角点击: 然后打开,如下图所...
  • Android模拟器默认的地址是10.0.2.3,默认的DNS也是10.0.2.3,对于在家里上网学习Android的人(像我)来讲,一般电脑的IP都是192.168.1.100之类的,不在同一个网段。所以就会出现电脑可以上网但是模拟器不能上网的情况...
  • android 模拟器输入中文

    千次阅读 2022-03-27 15:36:19
    点击右下角的键盘按钮 选择chinese pinyin即可
  • genymotion配置android模拟器

    千次阅读 2021-12-01 23:22:54
    查看网络适配器,virtualbox host-only ethernet adapter是否禁用,模拟器创建了三个网络适配器,保证没有#的是配置ip为192.168.56.x 不要再virtualbox中启动模拟器,使用genymotion启动即可 ...
  • Docker中的Android模拟器

    2021-06-05 02:30:43
    我试图在docker容器中启动Android模拟器,但是我收到错误:root@686d602e6ffa:~/android-sdk-linux/tools# ./emulatorERROR: 32-bit Linux Android emulator binaries are DEPRECATED, to use themyou will have to ...
  • Android Studio中运行Android模拟器

    千次阅读 2022-04-02 13:01:13
    如何设置将安卓模拟器在单独的窗口运行
  • Android-Emulator使用须知Android石家庄强化模拟器介绍和基本使用 ? 1Android石家庄强化模拟器介绍? Android中提供了一个石家庄强化模拟器来模拟ARM核的移动设备Android的石家庄强化模拟器是基于QEMU开发的QEMU是一...
  • 设置Android模拟器IP地址

    千次阅读 2021-06-03 09:55:16
    我做这个工作方式:在Android模拟器如果你使用ifconfig然后你会看到桥,为eth0 & eth1,因为网络设备。哪里网桥有10.0.2.15,因为ip和eth0是up的,但没有任何ip,eth1在没有任何ip的情况下关闭。现在在您的主机...
  • Android 逆向】修改运行中的 Android 进程的内存数据 ( 运行环境搭建 Android 模拟器安装 | 拷贝 Android 平台可执行文件和动态库到 /data/system ) ...Android 模拟器
  • android 模拟器黑屏 Cordova多平台方案

    千次阅读 2021-12-13 16:15:13
    解决android 模拟器黑屏:选Cold Boot 创建模拟器时,默认使用的是Quick boot方式启动,每次关闭时会保存模拟器的运行状态,重新启动会恢复到上次运行的状态。如果上次关闭模拟器的时候处于一个异常状态,那么重新...
  • Android模拟器启动不了解决办法

    千次阅读 2021-06-08 15:53:29
    问题描述:Windows2008中的MyEclipse项目在Windows2003中运行时无法启动模拟器.解决要点:启动模拟器管理工具,在启动中设置属性中不勾选默认尺寸显示。系统错误如下:[2013-08-26 09:14:25 - gpmedicine] ------------...
  • Android模拟器加载自定义镜像

    千次阅读 2020-10-18 16:43:13
    Android模拟器加载自定义镜像 基于AOSP编译Androiod镜像后,如果在linux下运行该镜像,我们知道只需要在AOSP根目录下执行lunch后,运行emulator即可。但是,如何让Android Studio的模拟器加载这个镜像,尤其是如何在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 142,159
精华内容 56,863
关键字:

android模拟器