下载地址: https://bitbucket.org/JesusFreke/smali/downloads
1.将apk转成smali
java -jar baksmali-2.2.6.jar disassemble 201901231140356079733.apk -o /Users/meetyou/mypojie/src
2.导入AndroidStudio
一直Next!!!
工程创建成功后,在src目录上右键并选择 Mark Directory As——Sources Root
在Module Settings中勾选一个SDK版本,进行构建
旧方法废弃~
这时候,我们要调试某个APP,按照以往的做法,我们需要先
让APP以调试的形式开起来
adb shell am start -D -n com.test.appstore/.AppStoreActivity
然后再进行tcp端口的转发:
查询端口:adb shell ps | grep com.test.appstore
u0_a110 11259 917 2346792 54944 futex_wait_queue_me 0 S com.test.appstore
进行转发:adb forward tcp:8899 jdwp:11259
然后在AS中配置这个转发的tcp端口:8899
然后运行~~~~~~~~!!!!调试,经常报错 这两种错误,你就止步于此了哈
新的调试方案:
首先思考下,我们喜欢这种Android Studio直接打了断点,然后调试的方式,但是为什么,我们现在没办法用。
因为我们用的是smali的语法文件,不是一个完整的Android项目
问题:我们在于找不到那个小虫子的按钮在哪里~
但是这个功能,Android Studio里是存在的,换个思路我们只要找到按钮能启动就行了哈。
---->这边我们从keymap 快捷键入手
设置一下快捷键:我这边是设置成这样,然后Ok即可,接下来就可以享受超级好的交互体验了。
1.一样需要启动app并且等待调试。
adb shell am start -D -n com.test.appstore/.AppStoreActivity
(当然,apk在xml里可能设置不可调试,这种情况要么用打包改xml(可能失败),要么用xposed hook掉直接改成可调试状态)
//https://github.com/deskid/XDebug 让所有进程处于可以被调试的状态
XposedBridge.hookAllMethods(Process.class, “start”, debugAppsHook);
private static final int DEBUG_ENABLE_DEBUGGER = 0x1;
private XC_MethodHook debugAppsHook = new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param)
throws Throwable {
XposedBridge.log("-- beforeHookedMethod :" + param.args[1]);
int id = 5;
int flags = (Integer) param.args[id];
if ((flags & DEBUG_ENABLE_DEBUGGER) == 0) {
flags |= DEBUG_ENABLE_DEBUGGER;
}
param.args[id] = flags;
}
};
2.按下设置好的快捷键,选中App进程,按下OK
(如果你这边是这样,那很不幸,你还需要多做一步比较复杂的操作)
一切来得这么突然~~~~~~~!