Android反编译、添加新的jar包、重新打包

0. 所需工具打包下载

打包下载地址

1. 反编译

  • 所需工具

    apktool

  • 方法

    在apktool目录下按住Shift键点击鼠标右键, 点击 在此处打开命令窗口,输入如下命令:

    apktool d [apkFile] -f -o [outputDir]

    d —— 代表当前操作是反编译解包

    [apkFile] —— 需要解包的apk路径, 例如C:\1.apk

    -f —— 强制覆盖,若outputDir路径已经存在,会清空outputDir指向的文件夹内的所有内容

    -o —— 指定输出目录为紧跟在-o后的路径, 即[outputDir]

    [outputDir] —— 输出的路径,例如C:\output

2. 添加新的jar包

  • 所需工具

    1. dex2jar
    2. baksmali
  • 方法

    1. 使用dex2jar工具内的d2j-jar2dex.bat,将jar包转换成dex文件

      直接拖动jar文件到d2j-jar2dex.bat的图标上即可

    2. 使用baksmali.jar工具将刚才得到的dex文件转化成smali文件

      首先得安装jdk并将jdk/bin目录添加到系统环境变量Path中, 然后打开cmd输入如下命令:

      java -jar baksmali.jar [dexFile]

      [dexFile] 即刚刚得到的dex文件的路径

    3. 将生成的存放.smali文件的文件夹(默认是baksmali.jar同一路径下的out文件夹)内的所有内容拷贝到反编译步骤生成的目录中的smali文件夹中

    4. 重复上述步骤,直到你所需要添加的jar包均添加完毕为止。

3. 重新打包

  • 工具

    apktool

  • 方法

    在apktool目录下按住Shift键点击鼠标右键, 点击 在此处打开命令窗口,输入如下命令:

    apktool b [projectDir]

    b —— 代表当前操作是build

    [projectDir] —— 需要打包的项目根目录, 即指向第一步反编译中生成的文件夹(如果你没复制到别的地方去的话)

    然后就可以看到在项目根目录下多了一个dist文件夹(其实还多了个build文件夹, 不过与我们这边讨论的东西关系不大), dist文件夹中有本次打包生成的apk文件

4. 签名

  • 工具(以下两个工具均在jdk/bin目录下)

    1. keytool
    2. jarsigner
  • 方法

    1. 生成keystore(已经有的跳过该步骤)

    打开cmd命令窗口, 输入以下命令:

    keytool -genkeypair -alias [keystoreName.keystore] -keyalg RSA -validity 100
    -keystore [keystoreName.keystore]

    [keystoreName.keystore] —— 生成的keystore的别名 例如sh.keystore

    1. 使用生成的keystore对apk进行签名

    打开cmd命令窗口, 输入以下命令:

    jarsigner -verbose -keystore [keystoreName.keystore] -signedjar [signedApkFile] [unsignedApkFile] [keystoreAliasName]

    [keystoreName.keystore] —— 生成的keystore的别名 例如sh.keystore

    [signedApkFile] —— 签名后输出的apk路径

    [unsignedApkFile] —— 上一步重新打包步骤生成的apk路径

    然后就能在指定的[signedApkFile]处看到签名好的apk了。

5. 用处

说了这么多,Android反编译、添加新的jar包、重新打包能用来干什么呢,这里,我们只讲其中一个用处,SDK打包工具的实现。

请耐心等待下一篇文章《SDK打包工具的实现——参考U8SDK》

你可能感兴趣的:(实习笔记)