http://github.com/hashbang/aosp-build
A build system for AOSP and AOSP-based ROMs that allows for easy customization, and automation while optimizing for reproducible builds.
By default this repo will build latest vanilla AOSP as a baseline, which also serves as the baseline E2E test.
Any third party rom project need only include their own customized version of the Makefile and config.yml from this repo, along with any desired patches.
Please join us on IRC: ircs://irc.hashbang.sh/#!mobile
- 100% Open Source and auditable
- Except for mandatory vendor blobs hash verified from Google Servers
- Automated build system:
- Completely run inside Docker for portability
- Customize builds from central config file.
- Automatically pin hashes from upstreams for reproducibility
- Automated patching/inclusion of upstream Android Sources
Device | Codename | Tested | Verifiable | Secure Boot | Download |
---|---|---|---|---|---|
Pixel 3a XL | Bonito | FALSE | FALSE | AVB 2.0 | Soon™ |
Pixel 3a | Sargo | TRUE | FALSE | AVB 2.0 | Soon™ |
Pixel 3 XL | Crosshatch | TRUE | FALSE | AVB 2.0 | Soon™ |
Pixel 3 | Blueline | FALSE | FALSE | AVB 2.0 | Soon™ |
Refer to GrapheneOS CLI install.
- Past this point if signing keys are lost, all devices are bricked. Backup!
- Go to "Settings > System > Developer options" and enable "USB Debugging"
- Reboot to recovery
adb reboot recovery
- Select "Apply Update from ADB"
- Apply Update
adb sideload crosshatch-ota_update-08050423.zip
- Go to "Settings > System > Developer options" and disable "USB Debugging"
Most of the dependencies are "contained". Only minimal software requirements exist for the controlling host that cannot be contained easily because of the bootstrapping problem:
- GNU core utilities
- GNU Make
- Python 3 dependencies: jinja2
They should be packaged by your distribution under the following names (adjust slight distro differences yourself):
coreutils make python3 python3-jinja2
- Docker 10+
- x86_64 CPU
- 10GB+ available memory
- 350GB+ available disk
make DEVICE=crosshatch
- Virtualbox 5+
- x86_64 CPU
- 12GB+ available memory
- 350GB+ available disk
make DEVICE=crosshatch BACKEND=virtualbox
- Digitalocean API token
cp config/env/digitalocean.{sample.,}env
vim config/env/digitalocean.env
make DEVICE=crosshatch BACKEND=digitalocean
On a fresh clone you will want to run the default target which will setup the backend, build the docker image, fetch sources, build the toolchain, generate signing keys, compile everything, then package a release zip.
The default backend is 'local'.
make DEVICE=crosshatch
make DEVICE=crosshatch fetch
Build tools required for generating signing keys and flashing.
make DEVICE=crosshatch tools
Each device needs its own set of keys:
make DEVICE=crosshatch keys
Build flashable images for desired device:
make DEVICE=crosshatch build release
Do basic cleaning without deleting cached artifacts/sources:
make clean
Clean everything but keys
make mrproper
- Build a given device twice from scratch and compare with diffoscope
- Future: Run Android Compatibility Test Suite
make test
Create a shell inside the docker environment:
make shell
Output all untracked changes in android sources to a patchfile:
make diff > patches/my-feature.patch
make install
- Update references to latest upstream sources.
make config
- Regenerate the git-repo XML manifest files.
make manifest
- Build all targets impacted by given change
make DEVICE=crosshatch release
- Commit changes to a PR
Patchsets that base on AOSP will carry their patchset forward using git rebase
. In case you use aosp-build you might be interested in an ongoing
review of this patchset across rebases. For this, checkout make review
.
Refer to https://github.com/ypid/android-review for one public instance of such a review.
We use the hash locked manifest that [aosp-build] produces from AOSP to whatever you have checked out.
Use at your own risk. You might be eaten by a grue.