zoukankan      html  css  js  c++  java
  • 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是绕不过去的

  • 相关阅读:
    Beautifulsoup模块
    Tronado自定义Form组件
    5分钟入门Tornado
    Django-组件拾遗
    mvc Area(区域)相关技术
    制作web安装程序
    MVC
    Asp.net MVC中repository和service的区别
    关于ASP.NET MVC+Repository+Service架构的一些思考
    MVC引入SERVICE层 提高代码重用性 沟通CONTROL和MODEL
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/12692064.html
Copyright © 2011-2022 走看看