You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

dex文件反编译后如何重新编译为dex并重建APK?

反编译源码重新编译为DEX并重建APK步骤

一、准备工具

确保你已安装以下工具:

  • Android SDK Build Tools(包含javac、d8/dx、apksigner)
  • Kotlin编译器(kotlinc,适配目录中的Kotlin源码)
  • Apktool(用于APK资源的打包与反打包)

二、编译源码为Class文件

1. 编译Java源码

在源码目录下执行命令,注意替换为你的实际路径:

# 创建存放class文件的目录
mkdir -p output/classes
# 编译所有Java文件,classpath需包含android.jar及各类依赖jar(如dagger、okhttp3、androidx等)
javac -d output/classes -cp "/path/to/android-sdk/platforms/android-xx/android.jar:/path/to/dependencies/*.jar" $(find . -name "*.java")

2. 编译Kotlin源码

同样指定依赖与输出目录:

# 编译所有Kotlin文件,需添加kotlin-stdlib依赖
kotlinc -d output/classes -cp "/path/to/android-sdk/platforms/android-xx/android.jar:/path/to/kotlin-stdlib.jar:/path/to/dependencies/*.jar" $(find . -name "*.kt")

三、将Class文件转换为DEX文件

推荐使用Android官方的d8工具(支持Java 8+特性):

d8 output/classes/**/*.class --lib /path/to/android-sdk/platforms/android-xx/android.jar --output output/classes.dex

若需兼容低版本Android,可使用旧版dx工具:

dx --dex --output output/classes.dex output/classes/

四、重建并签名APK

1. 获取原APK的资源文件

若仅保留了源码,需用Apktool反编译原APK提取资源:

apktool d original.apk -o apk-resource-dir

2. 替换DEX文件

将生成的output/classes.dex复制到apk-resource-dir目录下,替换原有的classes.dex(若原APK有多DEX文件,需对应替换修改后的模块DEX)。

3. 重新打包APK

apktool b apk-resource-dir -o unsigned-rebuilt.apk

4. 签名APK

未签名的APK无法安装,使用apksigner签名(可使用Android SDK自带的debug密钥):

apksigner sign --ks /path/to/debug.keystore --ks-key-alias androiddebugkey unsigned-rebuilt.apk

默认debug密钥密码为android,密钥库密码同样为android。

注意事项

  • 依赖完整性:编译时必须将所有用到的第三方库(如okhttp3、dagger、androidx等)的jar包加入classpath,否则会出现编译错误。
  • 混淆兼容:若原APK经过混淆,修改源码时需注意混淆后的类名、方法名,避免破坏调用逻辑。
  • 多DEX处理:若原APK包含多个DEX文件,需确认修改的代码属于哪个DEX模块,针对性替换。

内容的提问来源于stack exchange,提问作者user19926715

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:20:34