原文:
看我blog的人都知道,我不会纯转。与时俱进(截止2022年3月12号为止)的使用方式一般都是我自己现版本摸索出来的。所以步骤如下:
1. 下载 smalidea
https://bitbucket.org/JesusFreke/smalidea/downloads
在Android studio的插件仓库中没有找到这个插件,需要下载本地安装
File -> Settings -> Plugins -> Install plugin from disk 选择下载的插件,重启后生效。
2. apktool 输出源码文件
Releases · iBotPeaches/Apktool · GitHub
java -jar apktool_2.2.0.jar d -f xx.apk -o xx
如果正常的将输出 smali 源码文件
3. Android Studio 导入源码
File -> New -> import project 选择刚才导出的xx文件夹
4. 以调试模式启动应用(非必须,你完全可以手工点开app,然后在as里以attach进程的方式调试).
adb shell am start -D -n aa.bb/.activity
如果你以调试方式启动,那你去看文章顶部的链接。反正我试了,我水平不到位,没有成功。
5. 以attach方式启动调试,直接下断点就了。
小提示:F8单步 F7步进 F9运行到断点
注意:系统或者apk必须可调试,以下方式必须有2个之中的一个
getprop | grep
ro.debug [ro.debuggable]: [1]
或者:
APK 中AndroidManifest.xml 的Application有这句 android:debuggable=true
后话:
为什么忽然想起来调试apk这个功能,是因为有个客户用的uvcCamera 拔掉摄像头后app会卡住。用户抵死不认是app的问题。当然,最后我确认是uvcCamera有bug。但是客户不愿意按我的补丁改,说改了以后容易不稳定。我曹,你试都没试,改都改不动,这个2015年到现在没更新的工程你也敢用?抵死要改系统,说别人家的就不会卡,行吧。我觉得改系统风险挺大的。
奇葩在于:我自己用自带的例子修改出来的uvcCamera预览例子不卡(系统无修改的情况下)。一度陷入扯皮僵局。这时候我肯定认为是app写的有问题阿。而客户有不肯给源码,哪怕去掉业务逻辑,只给camera预览的逻辑的源码也都不给。然后我就在framework层各种加堆栈打印,再次吐曹这种客户,连个调试信息都懒得加给我们,卡在什么调用都不说,讲真,系统加打印和调用堆栈是效率极低的行为。此处耗费3天,最后确认是某个调用卡住了。但不知道是什么调用,因为反编出来的是乱码。又僵住了。于是弃掉这个问题,去修改别的问题了。
过了几天,灵机一动,想起来apk可以动态调试,那不就知道卡哪个语句了吗?
最后各种调,果然是uvcCamera的stoppreview有问题。然并卵,我当然可以在uvc层改好,但人家不肯用(我修改过的疑似有bugso),只好在系统层解决。至于怎么解决的,商业机密,就不说了。
我只想说:这个问题属于uvcCamera的bug。再次奉劝,没有能力修改uvcCamera库的人,遇到了问题,不要赖系统。当你用一个你不熟悉的库,又遇到了一种用android api没有的bug。那就是你自己的问题。你应该请你的老板炒了你,而不是抱怨系统有问题。系统当然有很多bug,但能在app层自己解决的问题,为什么要系统来解决?系统是单单为你uvcCamera服务的吗?从来都是app适配系统,没有说系统适配app的。这也就是小厂的悲哀了吧。。此处无语3000字