Rover12421's Blog

The End.

RsApktool:项目编译

        1.同步项目:

git clone https://github.com/rover12421/RsApktool.git

        2.进入项目目录使用Gradle编译项目

cd RsApktool
./gradlew fatjar

        3.测试jar是否生成
ls brut.apktool/apktool-cli/build/libs/                            
apktool-cli-2.0.0-Beta1.jar
java -jar brut.apktool/apktool-cli/build/libs/apktool-cli-2.0.0-Beta1.jar

       可以看到jar已经生成,java测试jar也正常.当然这个jar名字是不固定的.windows下.ls换成dir即可.
       接下来是把项目导入到Eclipse:
       1.打开Eclipse,点击导入Import.在导入选项里选择 Gradle Project
Import Gradle Project
        2.在导入选项界面选择Git同步的RsApktool项目目录,然后点击 Build Model ,Build完成之后点完成.这个时候会根据个人情况和网络情况不同,Eclipse会弹出一个界面.等着就是了.
Build Grodle Project
        3.等待一段时间之后,项目就成功导入到Eclipse了.
Import Final
        
        导入完成,可以看到一个错误,其实这是一个测试项目的错误,不管他也没事.但是如果你没按我的步骤,在导入Eclipse之前用Gradle编译一次,那就不只测试项目有问题了,整个smali项目都会受到影响的.至于为啥受印象.和怎么解决,我接下会以这个Test类的错误进行说明.
Test class error
        仔细看下这测试类,会发现,这是一个词法分析的测试类,具体错误是找不到导入包(这里实际是一个类),为啥会找到这个类呢?这是因为smali的词法分析是用Antlr和Flex写的,而这个需要导入的类是由Antlr自动生成的,既然是自动生产的,那当然没必要包含到git,同步到库里了.但是我们怎么让他再次自动生成呢?
        打开smali项目的gradle配置文件看看.
smali gradle profile
        这里我高亮了3个gradle的目标task,其中 generateTestAntlrSource 就是生成我们现在看到的这个Test类缺少的导入类的task.其他两个task就是为smali生成词法分析的类的.
        回到命令行下,执行下面的命令,来重新生成test所需要的类:

./gradlew generateAntlrSource

        回到Eclipse里,在smali项目上点右键,刷新下,就可以看到错误没有了.如果不想回到命令行下,在Eclipse里也是可以做到的,在smali上点右键, Run As --> Gradle Build...
Gradle Build Test
        然后Eclipse会列出所有的task,选择需要的 generateAntlrSource ,再点运行即可.
        那么如果没做第一步,在命令行下编译jar包,在Eclipse里应该怎么做呢?
        这次需要在apktool-cli项目上点右键, Run As --> Gradle Build... 
Gradle fatjar
        在列出的task中选择 fatjar ,点击run ,然后等待一会就可以看到编译完成.
        可能有同学会问,为啥是apktool-cli, cli 即 Command Line Interface 命令行接口的缩写,apktool真正的对外Main入口也是在这个项目里,最最关键的是,fatjar这个Task就是写在这个项目下的build.gradle里,其他项目没有,哈哈
        RsApktool的Main入口是:bruk.apktool.Main.main
        能正常编译之后,接下来就可以自由发挥了....

Comments