Converting APK file to AAB

The process of converting an APK file to AAB is fairly simple but time-consuming,
First the required stuff, you will need
1. apktool
2. bundletool
3. aapt2
You will also need Java installed to run those stuff
Anyway, the steps are
Step 1: Decompiling APK and Recompiling APK
Decompile the APK that we want to convert with apktool, we can use the command below
java -jar /path-to/apktool.jar d app.apk
After running the command, there should be a folder called app
, which has the decompiled APK files
Then we recompile the decompiled APK with the command below
java -jar /path-to/apktool.jar b ./app
Step 2: Compiling the resources
After decompiling, you will need to compile the resource file from the decompiled APK, use the command below to do so
aapt2.exe compile --dir ./ap/res -o res.zip
After that, res.zip
will be generated in your working directory
Step 3: Linking the resources
Then after compiling the resources, we need to link them, use the command bellow
aapt2.exe link --proto-format -o base.zip -I android.jar --manifest ./app/AndroidManifest.xml --min-sdk-version 7 --target-sdk-version 30 --version-code 1 --version-name 1.0 -R res.zip --auto-add-overlay
What is happening with those command arguments?
Well, I will explain some of the arguments.-I
this specifies the path to platform’s android.jar
, You can get the jar from platform
folder in Android SDK, for example, mine is at /AppData/Local/Android/Sdk/platforms/android-32/android.jar
.--manifest
this specifies the path to the decompiled APK Manifest file.--min-sdk-version
this sets the default minimum SDK version to use.--target-sdk-version
this sets the default target SDK version to use.--version-code
this specifies the version code to use.--version-name
the same but for version name.
You can get the complete detail here aapt2 Link Options.
After running the command, you should see base.zip
in your working directory, that is the linked resources APK.
Step 4: Unzipping the base.zip
Unzip the generated base.zip
file to a separate folder, in this tutorial we will use base
as the output directory.
Step 5: Structuring folder
After unzipping, go to the output directory then you should see these files and folders
res/
AndroidManifest.xml
resources.pb
Then create a folder called manifest
and move the AndroidManifest.xml
to the manifest
folder, and you should see these in base
directory
manifest/
AndroidManifest.xml
res/
resources.pb
After that, copy the whole assets
and lib
folder from the decompiled APK directory to the base
directory, and you should see this
assets/
lib/
manifest/
res/
resources.pb
Then create another folder called root
in base
directory and move the files from unknown
folder inside the decompiled APK directory to that folder.
After that, copy kotlin
folder from the decompiled APK directory to root
folder we just created, and you should see this inside base
directory
assets/
lib/
manifest/
res/
root/
kotlin/
...
resources.pb
Then, create another folder called dex
in base
directory, and after creating that folder, move all of theclasses.dex
file to that folder we just created.
You can find all of the classes.dex
file in /build/app/
directory inside decompiled APK directory
After all of those tiring folder structuring stuff, you should see these files and folders in base
folder
assets/
dex/
lib/
manifest/
res/
root/
kotlin/
...
resources.pb
Step 6: Compressing the structured folder
Run the command below inside base
folder to compress the structured folder
jar cMf out.zip ./manifest ./dex ./res ./root ./lib ./assets ./resources.pb
then you should get out.zip
file
Step 7: Compiling to get AAB file
Compile the out.zip
file that we just compressed with the command below
java -jar bundletool.jar build-bundle --modules=out.zip --output=out.aab
And that is it, we have successfully converted APK to AAB.
You can now upload your AAB file to Google Play Store.