介绍真机调试中真机或模拟器需要具备的条件及如何操作模拟器满足调试的条件。讨论刷机的技巧、方法和步骤。最后论述真机获取root权限的过程。
在进行真机调试之前,一方面需要手机需要获取root权限。可以是完全root权限,也可以是不完全root权限。另一方面,在开发人员选项中开启USB调试。一般在“设置-关于手机-版本号”连续点击7下开启开发者选项。在开发人员选项中勾选USB调试选项框,即可开启USB调试功能。
对于待调试的APK文件需要满足以下两个条件中的一个。条件1:在Androidmanifest.xml文件中的Application标签中需要包含android:debugable= "true"的属性;条件2:通过adb命令控制真机的shell脚本,将路径/default.prop中的ro.debuggable值修改成1,ro.debuggable值为1表示可调试APP。
一般来说,条件1难以满足,开发者不希望自己开发的APK文件被其他人修改调试,因此通常不会存在android:debugable= "true"的情况,这个属性值通常为"false"或者不存在这个属性。可以通过反编译修改Androidmanifest.xml配置清单文件的方式来使APK文件满足该条件,修改完成之后再编译成新的APK文件,但要考虑反编译的成本和难易程度。在这个过程中可能遇到加壳的APK文件或反编译工具无法对APK实现完全反编译的情况。即使完成了对目标APK的修改和重编译,也有可能会遇到签名验证的问题。
条件2修改后,init进程会解析这个default.prop文件,然后把属性信息解析到内存中,给所有app进行访问使用。所以在init进程的内存块中是存在这些属性值的。那么这时候可以利用进程注入技术,使用ptrace注入到init进程,将内存中的这些属性值修改。只要init进程不重启,这些属性值会起作用。
对条件2进行修改,一般有两种方式,一种是直接修改文件,另外一种是修改内存。改文件需要使用刷机技术。修改内存的步骤如下:第一步,将mprop文件(工具在网盘中地址是……)拷贝到/data/目录下;第二步,利用命令./mprop ro.debuggable 1将./mprop中的ro.debuggable的值修改为1,需要可执行权限;第三步,通过getprop ro.debuggable查看此时内存中的ro.debuggable值;第四步,通过stop和start命令重启adbd进程。adbd进程是adb的组成部分之一,包括adb服务端、adb客户端和adbd进程。
因此,如果想要对真机进行调试,一般通过内存修改方式对条件2进行修改。
刷机会有一定概率使真机变成“砖头”,刷机存在风险,谨慎进行该操作。刷机不是必须的操作,其根本目的是将真机的ro.debuggable值修改成1,如果真机支持APP的调试,可以不进行刷机。
ROM(Read Only Memory,只读存储器)和 RAM(Random Access Memory,随机访问存储器)是两种常见的计算机存储器。它们的含义和区别如下:
ROM:只读存储器,是一种只能读取而不能写入的存储器。通常在生产过程中将数据写入 ROM 芯片中,并在计算机或其他设备上使用。RAM:随机访问存储器,是一种可以读取和写入的存储器。计算机内存就是一种 RAM。
从内容来看,ROM 中的数据是固定的,无法修改;RAM 中的数据可以动态修改。从可读性来看,ROM 中的数据可被计算机访问,但无法被用户修改或删除;RAM 中的数据既可被计算机访问,也可被用户修改或删除。从速度来看,ROM 的读取速度较快,但写入速度非常慢;RAM 的读取和写入速度都很快。从容量来看,ROM 的容量通常较小,最多几百 MB;RAM 的容量通常较大,最多可达数 GB。
刷机之前通常要获取ROM包,ROM包一般分为两种,一种是官方ROM包,另外一种是第三方的ROM包。一般官方ROM包刷机操作较为简单,第三方的ROM包需要进行bootloader解锁才能进行刷机。bootloder解锁可以使用刷机精灵来完成,但刷机精灵未必支持所有的手机机型。ROM包可进一步分为线刷包和卡刷包。线刷是指通过数据线连接,通过bootloader/fastboot模式刷机。卡刷是指将ROM包放至SD卡中,使用recovery模式进行刷机操作。
在卡刷的刷机之前,会使用到双清的概念,双清指清除用户数据和缓存。一般需要在recovery模式中执行双清操作。
nexus4刷机包下载地址为https://www.romzhijia.net/romlist/188_0_0_0。刷机包需要和对应的手机及型号匹配,推荐使用官方的刷机包。下面为线刷刷机的一般流程:
第一步,手机进入到fastboot模式。对于nexus4手机来说,同时按住开机按键和手机音量“下”键即可进入fastboot模式。也可通过刷机精灵进入到fastboot模式。
完成刷机之后需要安装抓xposed模块de.robv.android.xposed.installer.apk和xposed框架JustTrustMePlus-debug.apk。同时安装smzy_kingroot.apk文件依此获取真机的root权限。刷机时需要使用以下工具:fastboot.zip是对应版本的SDK-platform软件开发工具,occam-ktu84p-factory-b6ac3ad6.tgz刷机时使用的刷机包,android_bootimg文件夹即为刷机工具包。
第二步,解压刷机包和fastboot.zip。将两者的解压文件放在同一目录下,即occam-ktu84p-factory-b6ac3ad6文件夹下的occam-ktu84p文件夹下,不能存在中文路径。
第三步,双击其中的image-occam-ktu84p.zip文件,修改其中的boot.img文件。将boot.img文件放到android_bootimg文件夹下,利用解包工具booting.exe对boot.img进行修改。
第四步,在当前目录下打开cmd命令窗口,输入命令bootimg –unpack-booting对boot.img进行解包。进入到initrd文件夹下修改其中的default.prop,将其中的ro.debuggable值修改成1。最后通过cmd命令窗口输入bootimg –repack-booting,在android-booting文件夹下会增加一个boot-new.img文件,即为打包后的镜像文件。
第五步,将新生成的镜像文件boot-new.img,拖拽至image-occam-ktu84p.zip压缩包并进行替换。
第六步,双击文件夹中的flash-all.bat会自动完成进行刷机操作,最后按任意键退出。完成上述操作后,手机会自动启动。手机重启后需要进行激活,激活时不要连接wifi。当进入界面后再连接wifi。完成激活操作之后,开启开发者模式,操作同上,连接USB后选择允许调试。
第一步,利用adb命令将smzy_kingroot.apk安装到真机中。
第二步,开启网络,打开kingroot软件检测root环境是否满足要求。点击尝试root即可获取手机的root权限。
第三步,通过adb进入真机的shell窗口,输入su命令,软件会询问是否开启root,点击允许即可完成root权限的许可。
下一篇