apktool+smali/baksmali 源码编译

来源:互联网 发布:招聘淘宝美工 编辑:程序博客网 时间:2024/05/06 10:16

   自己做的东西需要修改smali/baksmali源码,但是只编译smali/baksmali再放到apktool里使用时会报错,因此只好编译整个apktool


     1. 从github上下载 apktool源码 和 smali源码(apktool里原本是没有smali部分源码的,需要添进去),安装gradle

              apktool:https://github.com/iBotPeaches/Apktool

              smali:https://github.com/JesusFreke/smali

              gradle:https://downloads.gradle.org/distributions/gradle-2.3-bin.zip

                     gradle安装:解开压缩包,将文件夹中的bin目录添加到系统环境变量,打开控制台,输入 gradle -v, 若能显示gradle相关信息说明安装成功

     

      2. 将压缩包解开,在apktool的目录下创建brut.apktool.smali目录,将smali解压缩后的文件夹内容全部复制到brut.apktool.smali目录下

              

      3. 修改apktool目录下的 settings.gradle:

<span style="font-size:12px;">include 'brut.j.common',        'brut.j.util',        'brut.j.dir',        'brut.apktool:apktool-lib',        'brut.apktool:apktool-cli',<span style="color:#FF0000;">'brut.apktool.smali:util',        'brut.apktool.smali:dexlib2',        'brut.apktool.smali:baksmali',        'brut.apktool.smali:smali',        'brut.apktool.smali:dexlib2:accessorTestGenerator'</span></span>

      4. 修改brut.apktool\apktool-lib\build.gradle

<span style="color:#000000;">dependencies {    compile("junit:junit:4.10") {        exclude(module: 'hamcrest-core')    }    compile project(':brut.j.dir'),            project(':brut.j.util'),            project(':brut.j.common'),            <span style="color:#FF0000;">project(':brut.apktool.smali:baksmali'),            project(':brut.apktool.smali:smali'),    project(':brut.apktool.smali:util'),    project(':brut.apktool.smali:dexlib2'),</span>            depends.snakeyaml,            depends.xmlpull,            depends.guava,            depends.commons_lang    testCompile depends.xmlunit}</span>
 

     5.  修改brut.apktool.smali\baksmali\build.gradle

dependencies {    compile project(<span style="color:#FF0000;">':brut.apktool.smali:util</span>')    compile project(<span style="color:#FF0000;">':brut.apktool.smali:dexlib2</span>')    compile depends.commons_cli    compile depends.guava    testCompile depends.junit    testCompile project(<span style="color:#FF0000;">':brut.apktool.smali:smali'</span>)}

     6.  修改brut.apktool.smali\dexlib2\build.gradle

dependencies {    compile project(<span style="color:#FF0000;">':brut.apktool.smali:util</span>')    compile depends.findbugs    compile depends.guava    testCompile depends.junit    accessorTestGenerator project(<span style="color:#FF0000;">':brut.apktool.smali:dexlib2:accessorTestGenerator'</span>)    dx depends.dx}

      7.   修改brut.apktool.smali\dexlib2\accessorTestGenerator\build.gradle

dependencies {    compile project(<span style="color:#FF0000;">':brut.apktool.smali:util'</span>)    compile 'com.google.code.findbugs:jsr305:1.3.9'    compile 'com.google.guava:guava:13.0.1'    compile 'org.antlr:ST4:4.0.7'    testCompile 'junit:junit:4.6'}

     8.   修改brut.apktool.smali\smali\build.gradle

dependencies {   <span style="color:#FF0000;"> compile project(':brut.apktool.smali:util')    compile project(':brut.apktool.smali:dexlib2')</span>    compile depends.antlr_runtime    compile depends.stringtemplate    compile depends.commons_cli    testCompile depends.junit    antlr depends.antlr    jflex depends.jflex}

    9.   修改brut.apktool.smali\settings.gradle

include<span style="color:#FF0000;"> ':brut.apktool.smali:util', ':brut.apktool.smali:dexlib2', ':brut.apktool.smali:baksmali',       ':brut.apktool.smali:smali',':brut.apktool.smali:dexlib2:accessorTestGenerator'</span>

   10.  尝试在baksmali代码中加一句输出

public class baksmali {    public static boolean disassembleDexFile(DexFile dexFile, final baksmaliOptions options) {System.out.println("has changed!!");                ..............

   11.   打开控制台,进入apktool目录,输入gradlew.bat fatJar, 开始进行编译(第一次的话会去下载相应版本的gradle,让它下好了,不管它)


   12.   出现build successful说明成功编译,相应的在Apktool-master\brut.apktool\apktool-cli\build\libs下生成apktool-cli.jar文件



    13.  用该jar文件去反编译apk,看到我们加入的语句输出了!



1 0
原创粉丝点击