# Java / Kotlin

## Tabla de conversión de archivos

| Archivo de origen | Archivo resultante |         Herramienta        |
| :---------------: | :----------------: | :------------------------: |
|        .apk       |        .dex        | unzip (desempaquetar .apk) |
|        .dex       |        .jar        |           dex2jar          |
|        .jar       |       .class       |           JD-GUI           |
|        .apk       |       .smali       |           Apktool          |
|        .dex       |       .smali       |          baksmali          |
|        .apk       |       .class       |            jadx            |

## Desempaquetar APK

```shell
cp application.apk application.zip
unzip application.zip -d app-unpacked
```

## Apktool

* Desde `.apk` a `.smali`

### Descompilar APK <a href="#apktool-descompilar-apk" id="apktool-descompilar-apk"></a>

```shell
apktool d application.apk -o app-decompiled
```

### Compilar APK <a href="#apktool-compilar-apk" id="apktool-compilar-apk"></a>

```shell
apktool empty-framework-dir

# General
apktool b app-decompiled -o app-compiled.apk

# AAPT2 (Android Asset Packaging Tool)
apktool b --use-aapt2 app-decompiled -o app-compiled.apk
```

## APKLab

* <https://apklab.surendrajat.xyz/>

## baksmali

* Desde `.dex` a `.smali`

```shell
java -jar baksmali.jar d <file.dex>
cd out
```

## dex2jar

* Desde `.apk` a `.jar` o `.dex` a `.jar`

```shell
# Desempaquetar APK
cp app.apk app.zip
unzip app.zip -d app-unpacked

# .dex a .jar
cd app-unpacked
d2j-dex2jar <file.dex>

# .apk a .jar
d2j-dex2jar app.apk -o app.jar
```

## jadx

```shell
jadx -d $(pwd)/app-decompiled $(pwd)/<file>
jadx-gui $(pwd)/<file>
```

* \<file> = `.apk`, `.dex`, `.jar`, `.class`, `.smali`, `.zip`, `.aar`, `.arsc`.

## JD-GUI

* Desde `.jar` a `.class`

```shell
java -jar jd-gui.jar <file.jar>
```
