[Miscellaneous Android Development] Shadow53:
Making flashable zip files for Android devices can be… frustrating.

For those who have never tried, here are some of the more irritations:

You use a very limited scripting language called edify to write your install scripts. So limited, that some people replace the binary (update-binary) used to parse the script (updater-script) with a normal shell script that performs the installation instead. What’s the point of having update-binary and updater-script, then?

Any app installed to /system/ with bundled libraries in the apk need to have those libraries extracted in order to not crash.

Various system files need to be created to grant certain permissions to apps by default, and you need to know the syntax of each one (usually some dialect of XML).

If the correct permissions are not set on an installed file, it can cause the system to bootloop.

The Solution:

I’ve created a program in Go that reads entries from a configuration file and builds a flashable zip for you, while taking care of the implementation for you. The name is simple: Zip Builder.

Features:

Configuration files can be written in JSON, YAML, or TOML.

Supports Android versions since 5.0 Lollipop

Automatic generation of updater-script and an addon.d persistence script.

Automatically extracts libraries from apps being installed under /system/.

Can specify different file or app sources for different versions of Android and/or CPU architectures. updater-script will only install the files for that particular system.

Validate downloaded files with md5, sha1, and/or sha256.

F-Droid interoperability: Specify the repo URL and app’s package name, and zip-builder automatically gets the rest of the app’s information from F-Droid’s repository, including a download link for the latest version of the app.

Remove any files you specify, e.g. apps that you are replacing with your own version or apps/files you just don’t want on your system.

Standalone binaries available for Mac OS X, Linux, and Windows. Android binaries (to use in a terminal app) coming soon.

Linux binaries may be usable with Termux on Android, though this is not tested or supported.

Links

Latest release announcement

Download zip-builder

Example configuration files

Complete documentation

Zips built with this tool

EmojiOne Emojis - Replace the NotoSans emojis with the ones from EmojiOne

F-Droid installer - Includes the F-Droid privileged extension, allowing F-Droid to perform automatic installs and updates.

Hacker bundle - Includes the F-Droid builds of Termux with API, Float, and Widget addons, and Hacker's Keyboard.

Google swipe libs - Includes the swipe libraries for the AOSP keyboard. One zip for all Android versions since 5.0 on all architectures.

microG - Installs the FOSS replacement for Google Play Services, microG. Optionally install the Play Store for downloading apps, using the patched version from NanoDroid.

Google Play Store - choose between the vanilla Google Play Store or the patched one from NanoDroid.

Google Sync Adapters - install the Google sync adapters for use with microG. Install contacts sync, calendar sync, or both.

UnifiedNlp - If you want network-based location without Google Play Services or microG, install this zip. Comes with the Mozilla location backend and Nominatim geocoder backend.

No GAPPS app packs - FOSS replacements for Google Apps packages, provides basic system apps for ROMs running without Google Play Services.. There are multiple tiers of zips you can download, matching the OpenGapps flavors. Click on the link to view the contents of each zip.