java代码编译得到smali代码

首先用Sublime(其他文本编辑器也可)编写一个java类

class A{
    String s = new String("text");
}

第二步:使用javac命令编译java文件得到class文件

javac是JDK自带的

javac A.java

第三步:使用jar命令编译class文件得到jar文件

jar是JDK自带的

jar cvf A.jar A.class

第四步:使用dx命令将jar文件编译成dex文件

dx.bat在Android SDK/build-tools/某一个版本下..

dx --dex --output A.dex A.jar

第五步:使用baksmali命令将dex文件反编译成smali文件

baksmali.jar可以网上去下载

java -jar baksmali-2.1.3.jar A.dex

最终得到一个out文件夹,里面就是我们需要的A.smali文件

复制代码
.class LA;
.super Ljava/lang/Object;
.source "A.java"

# instance fields
.field s:Ljava/lang/String;

# direct methods
.method constructor <init>()V
    .registers 3

    .prologue
    .line 1
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    .line 2
    new-instance v0, Ljava/lang/String;

    const-string v1, "text"

    invoke-direct {v0, v1}, Ljava/lang/String;-><init>(Ljava/lang/String;)V

    iput-object v0, p0, LA;->s:Ljava/lang/String;

    return-void
.end method
复制代码

因为在热修复框架中,smali是绕不过去的

posted @   嘉禾世兴  阅读(720)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2019-04-13 心电图
2016-04-13 混合知识点
2016-04-13 BroadcastReceiver广播接受者
点击右上角即可分享
微信分享提示