亦辰 發表於 2021-9-14 21:57:00

Android开发androidstudio调试smali代码

<h4 id="android开发androidstudio调试smali代码">Android开发androidstudio调试smali代码</h4>
<ol>
<li>
<p>Android Studio安装smalidea插件,方便查看smali代码</p>
<blockquote>
<p>1)smalidea插件下载地址:https://bitbucket.org/JesusFreke/smalidea/downloads/</p>
<p>2)smalidea github地址:https://github.com/JesusFreke/smalidea</p>
<p>3)AS中【Android Studio--&gt;Preferences--&gt;Plugins--&gt;Install plugin from desk...】,安装插件</p>
</blockquote>
</li>
<li>
<p>apktool反编译apk得到smali代码</p>
<blockquote>
<p>1)apktool下载和安装地址:https://ibotpeaches.github.io/Apktool/install/</p>
<p>2)<code>apktool d 反编译Apk名字.apk -o 输出目录</code>        //反编译得到smali代码,如果反编译过程中出错但是有smali代码也不影响</p>
</blockquote>
</li>
<li>
<p>单独新建一个Android项目,拷贝smali代码到src目录下</p>
<blockquote>
<p>1)File-&gt;new-&gt;New Project-&gt;一直Next然后Finish即可完成新项目创建。新建项目package最好和反编译的项目package一样。</p>
<p>2)切换到project视图,删掉app/src下的所有代码,也就是保留src文件夹,让src文件夹为空</p>
<p>3)复制上面反编译出来的所有smali目录以及代码和AndroidManifest.xml文件到src文件夹下</p>
<p>4)这时肯定是没法直接运行的,我们点击EditConfigurations添加一个运行配置</p>
</blockquote>
</li>
<li>
<p>EditConfigurations添加Remote JVM Debug</p>
<blockquote>
<p>1)点击EditConfigurations</p>
<p>2)点击+加号,添加一个Remote JVM Debug,name起个名字</p>
<p>3)随便写一个未被占用的端口比如8700,Use model classpath下拉选择项目名称,最后点击Apply和OK即可</p>
</blockquote>
</li>
<li>
<p>attach进程,开始调试</p>
<blockquote>
<p>1)看了网上是通过 <code>adb shell am start -D -n packageName/activityName</code> 方式启动app</p>
<p>然后通过 <code>adb shell ps | grep packageName</code> 找到app的进程pid,代码打上断点</p>
<p>然后 <code>adb forward tcp:8700 jdwp:&lt;pid&gt;</code> ,最后在AS里面使用Run-&gt;Attach to Process附上进程开始调试的</p>
<p>​        注意:这个8700和上面的EditConfigurations时写的端口一致,pid是进程pid通过<code>adb shell ps </code>查看</p>
<p>2)而我的方式是:正常手动打开一次app让进程出现先,然后直接Run-&gt;Attach to Process附上进程,</p>
<p>然后代码打上断点,再关闭app,这时进程还活着,最后再次手动打开app就会停在断点处,开始调试。</p>
</blockquote>
</li>
<li>
<p>需要修改手机的ro.debuggable=1才能attach到进程,而修改手机的ro属性手机需要root</p>
<blockquote>
<p>具体如何修改ro属性可以参考:https://www.cnblogs.com/yongfengnice/p/15268235.html</p>
</blockquote>
</li>
<li>
<p>进入调试模式后就可以Android Studio的Variables观察属性值等待,和常规调试app方法一样</p>
</li>
</ol>
<p>=================================================================================</p>
<p>1.window查看8700端口并杀死进程</p>
<blockquote>
<p><code>netstat -ano | findstr 8700</code>        //查看8700端口状态<br>
<code>taskkill /pid 8888 /f</code>:杀掉占用8700端口的8888进程,这个进程通过上面一句找到</p>
</blockquote>
<p>2.apk静态分析反编译工具GUI</p>
<blockquote>
<p>jadx github地址:https://github.com/skylot/jadx</p>
</blockquote>
<p>3.adb shell命令获取当前页面top activity</p>
<blockquote>
<p>window环境:adb shell dumpsys activity | findstr "mFocused"<br>
linux环境:adb shell dumpsys activity | grep "mFocused"</p>
</blockquote><br><br>
来源:https://www.cnblogs.com/yongfengnice/p/15269847.html
頁: [1]
查看完整版本: Android开发androidstudio调试smali代码