Android开发androidstudio调试smali代码
Android开发androidstudio调试smali代码
-
Android Studio安装smalidea插件,方便查看smali代码
1)smalidea插件下载地址:https://bitbucket.org/JesusFreke/smalidea/downloads/
2)smalidea github地址:https://github.com/JesusFreke/smalidea
3)AS中【Android Studio-->Preferences-->Plugins-->Install plugin from desk...】,安装插件
-
apktool反编译apk得到smali代码
1)apktool下载和安装地址:https://ibotpeaches.github.io/Apktool/install/
2)
apktool d 反编译Apk名字.apk -o 输出目录
//反编译得到smali代码,如果反编译过程中出错但是有smali代码也不影响 -
单独新建一个Android项目,拷贝smali代码到src目录下
1)File->new->New Project->一直Next然后Finish即可完成新项目创建。新建项目package最好和反编译的项目package一样。
2)切换到project视图,删掉app/src下的所有代码,也就是保留src文件夹,让src文件夹为空
3)复制上面反编译出来的所有smali目录以及代码和AndroidManifest.xml文件到src文件夹下
4)这时肯定是没法直接运行的,我们点击Edit Configurations添加一个运行配置
-
Edit Configurations添加Remote JVM Debug
1)点击Edit Configurations
2)点击+加号,添加一个Remote JVM Debug,name起个名字
3)随便写一个未被占用的端口比如8700,Use model classpath下拉选择项目名称,最后点击Apply和OK即可
-
attach进程,开始调试
1)看了网上是通过
adb shell am start -D -n packageName/activityName
方式启动app然后通过
adb shell ps | grep packageName
找到app的进程pid,代码打上断点然后
adb forward tcp:8700 jdwp:<pid>
,最后在AS里面使用Run->Attach to Process附上进程开始调试的 注意:这个8700和上面的Edit Configurations时写的端口一致,pid是进程pid通过
adb shell ps
查看2)而我的方式是:正常手动打开一次app让进程出现先,然后直接Run->Attach to Process附上进程,
然后代码打上断点,再关闭app,这时进程还活着,最后再次手动打开app就会停在断点处,开始调试。
-
需要修改手机的ro.debuggable=1才能attach到进程,而修改手机的ro属性手机需要root
具体如何修改ro属性可以参考:https://www.cnblogs.com/yongfengnice/p/15268235.html
-
进入调试模式后就可以Android Studio的Variables观察属性值等待,和常规调试app方法一样
=================================================================================
1.window查看8700端口并杀死进程
netstat -ano | findstr 8700
//查看8700端口状态
taskkill /pid 8888 /f
:杀掉占用8700端口的8888进程,这个进程通过上面一句找到
2.apk静态分析反编译工具GUI
jadx github地址:https://github.com/skylot/jadx
3.adb shell命令获取当前页面top activity
window环境:adb shell dumpsys activity | findstr "mFocused"
linux环境:adb shell dumpsys activity | grep "mFocused"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库