{"id":1824,"date":"2023-03-28T22:41:08","date_gmt":"2023-03-28T14:41:08","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=1824"},"modified":"2023-04-22T09:20:25","modified_gmt":"2023-04-22T01:20:25","slug":"android-studio-generates-asm-instrumentation-code-through-the-asm-bytecode-outline-plugin","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/03\/28\/android-studio-generates-asm-instrumentation-code-through-the-asm-bytecode-outline-plugin\/","title":{"rendered":"Android Studio\u901a\u8fc7ASM Bytecode Outline\u63d2\u4ef6\u751f\u6210ASM\u63d2\u6869\u4ee3\u7801"},"content":{"rendered":"<p>\uff081\uff09\u5728Android Studio\u4e2d\u5b89\u88c5<code>ASM Bytecode Outline<\/code>\u63d2\u4ef6<\/p>\n<p>\uff082\uff09\u5b89\u88c5\u540e\uff0c\u5728Android Studio\u4e2d\uff0c\u9009\u4e2d\u4ee3\u7801\u884c\uff0c\u70b9\u51fb\u53f3\u952e\uff0c\u9009\u62e9<code>Show Bytecode outLine<\/code><\/p>\n<p>\uff083\uff09\u5728<strong>ASM\u6807\u7b7e<\/strong>\u4e2d\u9009\u62e9<code>ASMified<\/code>\uff0c\u5373\u53ef\u5728\u53f3\u4fa7\u770b\u5230\u5f53\u524d\u7c7b\u5bf9\u5e94\u7684ASM\u4ee3\u7801\uff08\u53ef\u4ee5\u5ffd\u7565Label\u76f8\u5173\u7684\u4ee3\u7801\uff09<\/p>\n<p><!-- more --><\/p>\n<p>\u539f\u59cb\u4ee3\u7801\uff1a<\/p>\n<pre><code class=\"language-java\">Log.i(&quot;yezhou&quot;, this.getClass().getName() + &quot;: onCreate&quot;);<\/code><\/pre>\n<p>\u76f8\u5173\u4ee3\u7801\uff1a<\/p>\n<pre><code>Label l2 = new Label();\nmv.visitLabel(l2);\nmv.visitLineNumber(15, l2);\nmv.visitLdcInsn(&quot;yezhou&quot;);\nmv.visitTypeInsn(NEW, &quot;java\/lang\/StringBuilder&quot;);\nmv.visitInsn(DUP);\nmv.visitMethodInsn(INVOKESPECIAL, &quot;java\/lang\/StringBuilder&quot;, &quot;&lt;init&gt;&quot;, &quot;()V&quot;, false);\nmv.visitVarInsn(ALOAD, 0);\nmv.visitMethodInsn(INVOKEVIRTUAL, &quot;java\/lang\/Object&quot;, &quot;getClass&quot;, &quot;()Ljava\/lang\/Class;&quot;, false);\nmv.visitMethodInsn(INVOKEVIRTUAL, &quot;java\/lang\/Class&quot;, &quot;getName&quot;, &quot;()Ljava\/lang\/String;&quot;, false);\nmv.visitMethodInsn(INVOKEVIRTUAL, &quot;java\/lang\/StringBuilder&quot;, &quot;append&quot;, &quot;(Ljava\/lang\/String;)Ljava\/lang\/StringBuilder;&quot;, false);\nmv.visitLdcInsn(&quot;: onCreate&quot;);\nmv.visitMethodInsn(INVOKEVIRTUAL, &quot;java\/lang\/StringBuilder&quot;, &quot;append&quot;, &quot;(Ljava\/lang\/String;)Ljava\/lang\/StringBuilder;&quot;, false);\nmv.visitMethodInsn(INVOKEVIRTUAL, &quot;java\/lang\/StringBuilder&quot;, &quot;toString&quot;, &quot;()Ljava\/lang\/String;&quot;, false);\nmv.visitMethodInsn(INVOKESTATIC, &quot;android\/util\/Log&quot;, &quot;i&quot;, &quot;(Ljava\/lang\/String;Ljava\/lang\/String;)I&quot;, false);\nmv.visitInsn(POP);<\/code><\/pre>\n<p>\u6709\u6548\u4ee3\u7801\uff1a<\/p>\n<pre><code>mv.visitLdcInsn(&quot;yezhou&quot;);\nmv.visitTypeInsn(NEW, &quot;java\/lang\/StringBuilder&quot;);\nmv.visitInsn(DUP);\nmv.visitMethodInsn(INVOKESPECIAL, &quot;java\/lang\/StringBuilder&quot;, &quot;&lt;init&gt;&quot;, &quot;()V&quot;, false);\nmv.visitVarInsn(ALOAD, 0);\nmv.visitMethodInsn(INVOKEVIRTUAL, &quot;java\/lang\/Object&quot;, &quot;getClass&quot;, &quot;()Ljava\/lang\/Class;&quot;, false);\nmv.visitMethodInsn(INVOKEVIRTUAL, &quot;java\/lang\/Class&quot;, &quot;getName&quot;, &quot;()Ljava\/lang\/String;&quot;, false);\nmv.visitMethodInsn(INVOKEVIRTUAL, &quot;java\/lang\/StringBuilder&quot;, &quot;append&quot;, &quot;(Ljava\/lang\/String;)Ljava\/lang\/StringBuilder;&quot;, false);\nmv.visitLdcInsn(&quot;: onCreate&quot;);\nmv.visitMethodInsn(INVOKEVIRTUAL, &quot;java\/lang\/StringBuilder&quot;, &quot;append&quot;, &quot;(Ljava\/lang\/String;)Ljava\/lang\/StringBuilder;&quot;, false);\nmv.visitMethodInsn(INVOKEVIRTUAL, &quot;java\/lang\/StringBuilder&quot;, &quot;toString&quot;, &quot;()Ljava\/lang\/String;&quot;, false);\nmv.visitMethodInsn(INVOKESTATIC, &quot;android\/util\/Log&quot;, &quot;i&quot;, &quot;(Ljava\/lang\/String;Ljava\/lang\/String;)I&quot;, false);\nmv.visitInsn(POP);<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\uff081\uff09\u5728Android Studio\u4e2d\u5b89\u88c5ASM Bytecode Outline\u63d2\u4ef6 \uff082\uff09\u5b89\u88c5\u540e\uff0c\u5728And [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[202],"tags":[461],"class_list":["post-1824","post","type-post","status-publish","format-standard","hentry","category-android-build","tag-asm"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1824","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=1824"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1824\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=1824"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=1824"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=1824"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}