项目地址:Boxgit
为何要作 Box
? 其实源于开发过程当中一些很小的需求,也许并不常见,可是每次碰到都要费一些功夫。因此想着写一个小应用,集成一些经常使用功能,给开发带来一些便利。下面这些小需求,你也遇到过吗?github
看到别人优秀的 UI 界面想借鉴一下如何实现?看到别人的应用实现了本身不知道如何实现的功能?反编译了别人的 apk 殊不知道去哪找代码?常常作逆向的同窗应该常常碰到这些问题。首先,你确定得找到当前 Activity
的名称,才能顺路找到相应的代码。那么,如何查看当前 Activity
的名称呢?常见的作法是经过 adb
命令:shell
adb shell dumpsys activity activities | grep mFocusedActivity
复制代码
执行结果以下:bash
无奈记性很差,常常忘记命令,每次都得去搜一下,顺便推荐一个 adb 命令集合。再来看一下 Box
中这一功能是什么效果:微信
经过悬浮窗实时显示当前 Activity
,简单便捷。实现原理也很简单,经过 无障碍服务 监听窗口变化并获取当前 Activity
名称。悬浮窗没有本身造轮子了,使用了开源项目 FloatWindow。有段时间没更新了,顺便也改了几个 bug。app
某天忽然看上了手机里的某个 App,想拖到 jadx
里面看一看,如何快速的获取到安装包文件呢?咱们都知道对于已安装的应用,系统都备份了安装包,存储在 /data/app/[packageName]
目录下,通常文件名为 base.apk
。若是是具备 root 权限的手机,咱们能够直接拿到文件。对于非 root 手机,仍是有读权限的,能够经过文件 API 直接读取。Box
中界面以下所示:异步
安装包文件会复制到手机根目录 /Box/apk/应用名
文件夹下。工具
AndroidManifest.xml
包含了应用的基本信息,如何快速的查看应用的清单文件?以前有一个开源工具,AXmlPrinter.jar
,能够直接解析安装包中的二进制清单文件。本想直接把 jar 包拿过来用,但是用的不是那么随心应手。加上以前亲手解析过 AndroidManifest.xml
文件,详见 Android逆向(一) —— AndroidManifest.xml 二进制解析。索性就用了本身的代码,顺便也修复了一些解析过程当中遇到的 bug。具体效果以下:post
主要功能都在上面了,另外还加了一块 本机信息
,包括内容以下:spa
Box
使用 kotlin
开发,简单的使用了 协程
来进行异步任务,如复制 Apk 并更新进度等。界面设计很通常,实在是很为难我这么一个理科生。图片基本上都是 Android Studio
里面自动生成的,logo
暂时尚未,有合适的能够 push
一个。
第一个版本功能比较简单,后面再遇到开发中的痛点需求,还会加进来,持续更新。有 bug 或者好的想法,欢迎 issue 、 pr 砸过来!
项目源码: Box
文章首发微信公众号:
秉心说
, 专一 Java 、 Android 原创知识分享,LeetCode 题解,欢迎关注!