之前的APP逆向相关文章发出来之后,经常会有朋友来问我:“我现在没有真机,怎么选一部合适的手机做开发鸭?”,我也一直是回复的会写篇文章专门讲这事,结果一直鸽到现在…

那么今天就来好好讲一下怎么选一部合适的手机用来开发,以及我们为什么需要一部真机来做开发(肯定会有人说模拟器/虚拟机也可以用)。

纯干货文章,共4300+字符,无图,建议收藏后在PC端阅读。

如果你一定要在手机上看的话,可以只看加粗字体部分。

尽管很有可能你不会仔细看完这篇文章,但是在看还是要记得点啊!!


肯定会有人好奇,我们为什么需要买一部真机用来做开发呢?原因很多,也很简单,下面给大家简单列一下(可能会有遗漏一些不太重要的问题,无所谓了):

  1. 模拟器/虚拟机(以下统称虚拟机)占用内存过多

    相信很多人都有过打开个虚拟机内存就满了、只能关闭Chrome等程序的经历,这在内存较小的电脑上是一件很常见的事情。毕竟虚拟机一开起来就会吃掉1-2GB的内存,再加上开的一些别的像Chrome、Pycharm之类的东西,内存分分钟就被吃满了!

    如果在内存吃满的情况下使用虚拟内存的话,速度又会很慢,极度影响效率和心情!

    不使用虚拟内存的话,系统要么分分钟就帮你把占内存最大的进程给杀了,要么直接当场蓝屏(特指Windows)。

    真机可以把这一部分内存占用给转嫁到手机的硬件上,使电脑端能继续放飞自我、多线操作!

  2. 市面上常见虚拟机的系统版本较为固定

    很多Android虚拟机主要面向的是“在电脑上玩手游”的用户,而Android系统版本对他们来说并不重要,只要游戏能启动得了就行了,所以虚拟机的开发者会投入更多的精力在渲染性能优化等可以使观感效果更好的方面,系统的版本并不需要有多新(更何况魔改多了之后也不太好迁移到新版本了),于是很多游戏类虚拟机的系统版本都定格在了4.4左右。

    但对于做爬虫的我们来说,系统版本低并不一定就是件好事,毕竟有些APP会因为各种原因禁止掉在低版本系统下启动!或是在低版本系统下直接就闪退、崩溃,出现各种奇怪的问题!

  3. 市面上常见虚拟机的系统魔改过多

    游戏类虚拟机的原因基本同上;除了游戏类虚拟机以外,还存在着一些给灰黑产使用的虚拟机,这种虚拟机会被极度简化系统功能,只要能运行得了需要的那一部分东西就行了,系统会被魔改出各种虚拟硬件的功能(比如伪造GPS、直接修改IMEI等设备标识符等)用于应对需求,但并不是所有APP都能在这种虚拟机上面稳定运行的!

    这些魔改过多的系统很可能会导致部分APP出现各种闪退、崩溃等奇怪的问题!并且你要使用Frida、Xposed等工具时也可能会出现各种很诡异的情况!毕竟人家开发者根本没有往整体的稳定性方面投入太多的精力!

  4. 原生类系统的虚拟机很多是x86架构的

    x86架构的好处就是,并不需要完全虚拟一套ARM的东西、不需要进行CPU指令转换,性能会有质的飞跃。

    但是问题是,你需要搞的APP有几个是原本就针对x86架构做的?别人的APP包内有没有准备好x86架构版本的so库?如果没有x86架构版本的so库,在调用到对应so库的时候APP会当场爆炸!直接连用都没法用!还谈何逆向?

  5. 虚拟ARM架构的虚拟机即使电脑性能再好也还是卡

    因为完全虚拟出基于ARM架构的硬件会需要进行CPU指令转换,而这个转换是相当复杂的,虽然现在的硬件已经广泛支持了硬件层的虚拟化,但对于这种场景依然不够给力。

    如果虚拟机内的APP做的运算操作过于复杂,虚拟机就会占用大量的CPU资源,以至于在低配一点的电脑上会感觉到明显地卡顿;并且,由于转换指令时产生的延迟,虽然高配电脑的CPU足够强劲,但你依然会感受到一些延迟带来的卡顿感,这是目前无法避免的。

最后我们简单地概括一下吧:因为用虚拟机容易出现卡顿、崩溃以及各种奇奇怪怪的问题,所以我们能用真机操作还是尽量用真机,又省心又省事!


看完了上面的部分之后,你是不是觉得确实应该专门买一部真机来做开发了?那么我们应该怎么在市面上那么多的手机中挑选出一部合适、性价比高的用来做开发呢?

我们可以从四个角度上来考虑这个问题

  • 刷机相关

    首先最关键的当然是刷机,如果买了一部不能随便刷机的手机,那如果自带的系统就是那种重度魔改的,不就跟买了个垃圾一样吗?

    所以首先我们得看看选择的手机刷机是否方便,而这个角度是有一个快速筛选方法的。

    很简单,只需要挑一些公认好刷机的品牌购买就好了,像小米、一加这种基本上都是公认可以随便刷机的,特别适合”搞机“用户,而像华为这种直接锁死了Bootloader,还不给你官方解锁渠道的,显然不太适合。

    除了品牌以外,还有一些小细节可能会影响到刷机操作的复杂性,建议也注意一下

  1. 是否A/B分区的?

    像Essential Phone和Google的Pixel系列就是A/B分区的,A/B分区本来是为了在OTA(系统更新)的时候能让用户省去等待安装更新的时间而设计的,除此之外如果OTA失败了还能有一个可回滚的低版本系统,对正常使用的普通用户来说是一个很方便的东西。

    但这东西在你要刷别的系统的时候就不那么友好了,你需要经过[选择好一个分区->将新系统刷进去->覆盖另一个分区]的操作之后才能真正刷完。

    如果你在刷机的时候没有覆盖另一个分区,而重启后又一不小心进了另一个分区的话就会看起来跟没刷机一样;

    而即使你在刷机的时候已经覆盖好另一个分区了,但后续安装Xposed、ROOT之类的操作时没有覆盖另一个分区,当进错了分区的时候也还是会出现和上面一样的困惑,因为你会发现你刚弄的东西没了。

    所以对于不怎么了解A/B分区的人来说,这玩意就极易导致操作中出现奇怪的问题,而且你还很难找到原因,所以如果是A/B分区的手机,我是不建议你买来做开发机的。

  2. 是否需要登录一段时间才能解BL(Bootloader)锁?

    举个例子,小米的解锁机制就是这种,如果不是内测组成员你就需要在手机上登录你的账号一段时间(好像是一星期)后才能解锁,但内测组成员据说是可以拿到新机直接解锁的。

    这个问题就还算好,只是对时间方面有点影响。但是如果在等着用的时候买了部需要过一段时间才能解BL锁的手机,而且手机自带的系统还是经过重度魔改的,还很有可能不能ROOT,这就会很难受了。

  3. 是否需要购买解锁码之类的才能解BL锁?

    所有需要解锁码才能解BL锁的通常在万能的某宝都能找到对应的解锁服务,这类解锁服务都是已经破解了官方的解锁码算法的,直接算出解锁码帮你解锁。

    但是…像华为这种以前有官方解锁码,但现在关闭了解锁通道的情况,你就只能在某宝买对应的解锁服务来解手机的BL锁了(指旧款手机,新的不是搞个解锁码这么简单)。

  4. 一不小心刷成砖了有没有救砖方案?

    使用高通CPU的手机都有一个工程模式下的串口刷机方案,通常被称为9008刷机,这种方式刷机虽然很暴力(因为可以绕过Bootloader、Recovery直接覆盖分区),但是不同手机的操作方法不一样,有些可以通过USB连接+组合按键轻松进入工程模式,而有些却需要拆机后对特定触点进行短接或是飞线后通过串口连接,相当麻烦。

    所以这个救砖方案有的话当然是极好的,毕竟如果一不小心刷成砖了还能抢救得回来,但没有或者是不方便使用的话也没关系,一般不会砖到连Fast Boot和Recovery都进不去的程度。

  • 系统相关

    系统方面相比刷机而言就简单很多了,因为我们需要的原生类系统可选项挺多的,如果实在没有就自己编译一个AOSP用吧,但是太麻烦了,还是找现成的、已经完善好的来用比较方便,这里我推荐大家使用Lineage OS,在足够原生的基础上多了一些方便的小设置,而且因为比较多人用的关系,支持的手机型号也挺多的,很方便。

    然后同样是有一些小细节可以注意一下

  1. 支持的系统版本是否足够多

    有些时候我们可能会用到低版本的系统(4-5),但平时用的可能是高版本的(7-8),如果有现成的已经移植好了的低版本和高版本的系统,那么在特殊场景下就会方便很多,当然你直接另外买一部可以刷低版本系统的手机也可以。

  2. 第三方适配的系统有没有一些影响使用的BUG

    这个很关键,有些人在论坛上发的个人维护、适配的系统会出现奇怪的BUG,而且很可能还无力修复或是懒得修复。

    这些BUG一般存在两种情况:一种是时不时就莫名其妙地自己重启了之类的软性BUG,一种是相机不能用了这种硬性BUG。

    虽然不是作为日常使用的手机,但万一碰上了这种影响使用的BUG的话还是挺烦人的,所以建议找个比较稳定的用。

  3. 系统会不会太原生了

    一般用Lineage OS这种系统就可以不需要考虑这个问题了,主要是AOSP没有一些比较方便的设置,有时候会不太方便,仅此而已。

  • 硬件相关

    硬件方面就主要看个人喜好了,但如果不是群控用的话建议买新不买旧(指特别长时间以前出的手机),因为新一些的手机性能通常会更高,用起来不容易卡顿。

    太低配的话万一碰到个像淘宝这样的全家桶APP,操作起来都卡,那还买真机做什么,买真机的一个主要原因不就是为了操作起来舒服吗?

    当然买的时候考虑一下其他小细节也没啥问题,主要看个人喜好,比如说有没有快充、USB口是不是Type-C、能不能无线充电等。

  • 性价比相关

    对于需要向公司申请或是自己手头比较紧的情况,可能就需要考虑一下性价比了,可以看一些发售时间比较长了的手机,通常可以买到二手或翻新的,价格也不高。

那么看完了这四大项之后,你是不是觉得有点选择困难症了?有没有更直接、更快速的选择方法呢?答案是有的,而且不止一种:

  1. 打开Lineage OS的设备支持页(https://download.lineageos.org/),找到公认好刷机的几个品牌,选择好自己喜欢的那个品牌,然后直接找到最新的的那一款购买。(注意看一下系统版本,别太高,最高8.1就好了,用太高的版本容易踩坑)

  2. 直接买跟我一样的,我主要用的是小米 5s和Nexus 6,小米 5s作为高版本设备,Nexus 6作为低版本设备,后面如果需要的人多的话会专门写几篇基于这两个设备的环境搭建指南,跟着做就完全不会踩坑了。

差不多就是这些,如果对你有用,记得在看、留言、双击666!!!


这个时代各种东西变化太快,而网络上的垃圾信息又很多,你需要有一个良好的知识获取渠道,很多时候早就是一种优势,还不赶紧关注我的公众号并置顶/星标一波~

如何挑选一款合适的手机用于开发呢?相关推荐

  1. 手机照片局部放大镜_如何为不识字的老年人挑选一款合适的智能手机

    奶奶最近学会了打电话,有事没事儿叫我一声,一接通就能听到她想压又压不住的笑声,好似得了个什么新奇玩意儿.仅仅是学会了打电话这么件事儿,就让她开心得像个小孩.这当然要归功于新买的手机,以前的手机奶奶总学 ...

  2. android手机怎么选择,手机选择指南:如何挑选一款高性价比手机?

    手机选择指南:如何挑选一款高性价比手机? 2020-06-09 10:20:23 5点赞 1收藏 0评论 618马上就要到了,这就意味着新的一波换机高峰期即将来临,我相信会有不少读者朋友们会选择在这段 ...

  3. 如何挑选一款合适的移动硬盘

    如何挑选一款合适的移动硬盘    我的表弟今年刚上大学,当他军训结束之后回家的时候,找到我说,他觉得就带个U盘已经不能满足日常的学习需求了.他想买个移动硬盘,问我应该如何挑选.对于经常泡在数码产品世界 ...

  4. 如何挑选一款合适的POE工业级交换机?

    由于工业级交换机能够耐受各种比较苛刻的作业环境,而且产品系列多,端口装备灵敏,能够满足各种工业操控范畴的运用需求,因此在电力.冶金.石化.环保.交通.建筑等行业领域应用非常的广泛,各行各业信息化的建造 ...

  5. 5 款傻瓜式手机 APP 开发工具

    Google推出的App Inventor Android App开发工具可以让你仅通过拖拉式的简单操作就可以创建自己的Android App.对于那些为了特定目的想要动手尝试开发一个简单应用的用户, ...

  6. 手机安装linux发行版,为亲朋好友挑选一款合适的Linux发行版

    这辈子没有多少事情比试图为亲朋好友提供技术支持更令人沮丧的.如果你正在读这篇文章,很可能碰到过这种事.现在我要指出的是,没有哪一种操作系统完全没有软件错误(bug).即便那些牢牢锁定的设备,比如平板电 ...

  7. 产品经理——如何挑选一款高效的原型工具?

    客观来讲,每种工具能满足的任务和需求各有不同,"最适合"才是原型工具选择的黄金法则 . 每当设计一个新的App或网站时,作为对原型设计有一定了解的人来说,我们会倾向于选择那些&qu ...

  8. 如何为Android上的产品设计一款合适的图标

    如 果你已经完成了你的app,你一定会马上向其它人宣布这件事情.但是你需要注意一个很重要的问题,那就是app的图标.你的图标可能在项目启动之 前就已经设计好了,但我不喜欢这样,如果app没有完成实际上 ...

  9. 巴比特 | 元宇宙每日必读:HTC 宣布推出首款元宇宙手机,售价约2700元人民币,都有哪些新玩法?...

    摘要:据<台湾经济日报 >6 月 28 日报道,宏达电(HTC)宣布推出首款应用于元宇宙平台 VIVERSE 的全新智能手机 - HTC Desire 22 Pro,配备 5 G 高速行动 ...

最新文章

  1. Oracle初始化参数含义
  2. android智能刷新smart,Android横向智能刷新框架-SmartRefreshHorizontal
  3. hibernate 表关系映射详解之继承关系
  4. IDC:2015年全球专用备份一体机市场稳健增长
  5. 如何制作可以在 MaxCompute 上使用的 crcmod 1
  6. Kettle之数据抽取、转换、装载
  7. datagridview列 值提取_Pandas中的缺失值处理
  8. python代码示例-Python numpy.cov()用法及代码示例
  9. SAP中程序从服务器下载所对应的文件
  10. Java基础学习之画板1
  11. 社交网络影响力最大化——线性阈值模型(LT模型)算法实现(Python实现)
  12. sqlserver 触发器 mysql_SQLServer触发器实例
  13. 电脑常用良心软件推荐!!!
  14. 联合查询(union)——MySQL
  15. matlab的发展历史,仿真的发展历程以及目前现状
  16. ROS:launch规范及用法
  17. 思科ASA防火墙:控制防火墙不让访问指定网站
  18. Mysql 创建表时报错1103:Incorrect table name【问题记录】
  19. 高数-数列极限与函数极限
  20. ML / SML 常见错误解决办法

热门文章

  1. 学术期刊论文写作和研读相关体系
  2. Java面试指北!13个认证授权常见面试题/知识点总结!| JavaGuide
  3. 导航上显示某个地点已关闭什么意思_8款手机GPS导航横向对比测评(留存备用)科技美学...
  4. PHP getimagesize(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL rou
  5. Maven 报错:Cannot resolve plugin org.apache.maven.plugins:maven-resources-plugin:2.6
  6. 世界首家《VOGUE》旗下婚纱店开业
  7. Android视频滤镜添加硬解码方案
  8. XP 小技巧( 隐藏文件、mp3转换WMA )
  9. 36氪WISE 2017:融云斩获年度最具影响力奖
  10. iPhone 6 图像渲染揭秘