本文讲一下调试技术。
开启调试权限
要获得一个APP的调试权限,方法有两种。
开启单个APP的调试权限
APP的AndroidManifest.xml
里面,在<appilcation>
标签里面添加android:debuggable="true"
属性。这种方法只会获取这一个APP的调试权限。
<application android:allowBackup="false" android:debuggable="true" android:icon="@mipmap/running"
android:label="@string/app_name" android:roundIcon="@mipmap/running"
android:supportsRtl="true" android:theme="@style/AppTheme">
开启整个设备的调试权限
使设备的ro.debuggable
属性变为1
,也就是当你执行getprop ro.debuggable
的时候返回1
。
$ getprop ro.debuggable
1
由于ro.
开头的属性是只读属性,所以即使用root权限执行setprop ro.debuggable 1
也是无效的。
解决这个问题也有两个方法。
永久开启整个设备调试权限
这个ro.debuggable
属性是保存在/default.prop
里面的。文件内容大致如下
#
# ADDITIONAL_DEFAULT_PROPERTIES
#
ro.miui.has_cust_partition=true
ro.secureboot.devicelock=1
ro.sys.sdcardfs=1
ro.oem_unlock_supported=1
ro.secure=1
security.perf_harden=1
ro.adb.secure=1
ro.allow.mock.location=0
ro.debuggable=0
ro.zygote=zygote64_32
pm.dexopt.first-boot=interpret-only
pm.dexopt.boot=verify-profile
pm.dexopt.install=interpret-only
pm.dexopt.bg-dexopt=speed-profile
pm.dexopt.ab-ota=speed-profile
pm.dexopt.nsys-library=speed
pm.dexopt.shared-apk=speed
pm.dexopt.forced-dexopt=speed
pm.dexopt.core-app=speed
dalvik.vm.image-dex2oat-Xms=64m
dalvik.vm.image-dex2oat-Xmx=64m
dalvik.vm.dex2oat-Xms=64m
dalvik.vm.dex2oat-Xmx=512m
ro.dalvik.vm.native.bridge=0
dalvik.vm.usejit=true
dalvik.vm.usejitprofiles=true
dalvik.vm.appimageformat=lz4
debug.atrace.tags.enableflags=0
persist.sys.timezone=Asia/Shanghai
#
# BOOTIMAGE_BUILD_PROPERTIES
#
ro.bootimage.build.date=Wed Nov 22 20:39:25 CST 2017
ro.bootimage.build.date.utc=1511354365
ro.bootimage.build.fingerprint=Xiaomi/sagit/sagit:7.1.1/NMF26X/V9.0.6.0.NCACNEI:user/release-keys
persist.sys.usb.config=none
这个文件不是位于正常的文件系统,要真正的修改这个文件只能修改boot.img
。boot.img
也可以用前面提到的APKDB
进行解压及压缩。

解压后,更改default.prop
中的ro.debuggable = 0
为ro.debuggable = 1
。然后再使用APKDB
进行压缩。

压缩后会产生一个boot-new.img
文件。将手机重启为fastboot
模式,然后使用fastboot flash boot boot-new.img
命令将boot-new.img
刷到手机上。
这种方法会使ro.debuggable
永久的变为1。重启后仍然有效。
暂时开启整个设备调试权限
可以看到上面的方法比较烦,而且一直开启调试权限好像有点不太安全。另一种方法是使用mprop工具,用root权限执行./mprop
,然后在执行setprop ro.debuggable 1
,就生效了,这种方法不用修改boot.img
,但是在手机重启之后ro.debuggable
会恢复为0。
不管用什么方法,获取了调试权限就可以了。
开始调试
调试需要用到Android Studio和smalidea插件。
安装插件
开始调试
- 数据线连接好,准备好微信的反编译代码。
- 打开Android Studio,点击
File/New/Import Project
,导入反编译好的代码。
- 在Android Studio中,点击
Tools/Android/Android Device Monitor
。可以看到如下图,记住8700
,这是调试端口。
- 在Android Studio中,点击
Run/Edit Configurations
,创建一个Remote
调试配置,并把端口改为8700
。

接下来就可以设置断点,然后开始调试了。
