Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IchthysOS

A custom Android 17 (Baklava) ROM for the Cuttlefish virtual device (aosp_cf_x86_64_phone), built by bringing the crDroid + LineageOS customization stack on top of stock AOSP.

This repository does not contain the Android source tree. AOSP, crDroid's crDroidSettings, and the bulk of the platform are downloaded from their upstreams; this repo holds only the minimal set needed to turn a stock AOSP checkout into IchthysOS:

  • patches for the AOSP subprojects we modify (frameworks/base, the Settings app, the Cuttlefish device tree) and for crDroidSettings,
  • the new source files we add (SystemUI views, framework helpers, drawables, …),
  • the lineage-sdk forward-port to Android 17,
  • the custom boot animation,
  • and an apply.sh that stitches it all onto a synced AOSP tree.

Total repo size is ~21 MB (most of it the boot animation).


Credits

IchthysOS is only a thin layer on top of an enormous amount of other people's work. All of the heavy lifting belongs to:

  • The Android Open Source Project — the entire base platform (Android 17 / Baklava, android-17.0.0_r1). Licensed under Apache 2.0.
  • LineageOSlineage-sdk (org.lineageos.platform framework, LineageSettings, the preference library and settings provider). The copy here is a forward-port of their SDK to Android 17.
  • crDroid AndroidcrDroidSettings and the framework customization patterns (TunerService prefixes, the settings keys, many of the SystemUI/framework feature implementations this ROM adapts to A17).

The IchthysOS name and boot animation (the spinning fish that resolves into the ICHTHYS symbol + "IchthysOS") are original to this project.

Please keep these credits intact and respect the upstream licenses (Apache 2.0).


Repository layout

README.md                     This file.
apply.sh                      Applies the whole IchthysOS stack onto a synced AOSP tree.
manifest/ichthysos.xml        Optional repo local-manifest (fetches crDroidSettings).
patches/
  frameworks_base.patch       Our changes to frameworks/base (tracked files).
  packages_apps_Settings.patch  Wires crDroidSettings into the Settings app, homepage tile.
  device_google_cuttlefish.patch  Product packaging + IchthysOS branding.
  crDroidSettings.patch       Our A17 fixes/additions on top of crDroid's crDroidSettings.
files/                        New files we add, mirrored by their destination path:
  frameworks/base/...           SystemUI BatteryBarView / StatusBarLogo / NetworkTraffic,
                                crDroid framework util helpers, status-bar logo drawables, …
  packages/apps/Settings/crDroidSettings/res/values/cr_forwardport.xml
  device/google/cuttlefish/shared/phone/bootanimation.zip
lineage-sdk/                  LineageOS SDK, forward-ported to Android 17 (hosted in full).
docs/
  ROM_CHANGELOG.md            Everything IchthysOS changes vs stock AOSP.
  SETTINGS_STATUS.md          Per-setting status tracker (what works / what's blocked).

1. Prerequisites

A Linux host (Ubuntu 22.04+ recommended) with, roughly:

  • ~400 GB free disk (AOSP source ~150 GB + build output ~150 GB),
  • 32 GB+ RAM (16 GB works with swap, slowly),
  • a fast SSD and a good internet connection for the initial sync.

Install the AOSP build dependencies and the repo tool:

sudo apt update
sudo apt install -y git-core gnupg flex bison build-essential zip curl zlib1g-dev \
  libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev \
  lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig openjdk-21-jdk

mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH

git config --global user.name  "Your Name"
git config --global user.email "you@example.com"

2. Sync stock AOSP

IchthysOS is built against android-17.0.0_r1 for the Cuttlefish phone target.

mkdir -p ~/aosp && cd ~/aosp
repo init -u https://android.googlesource.com/platform/manifest -b android-17.0.0_r1
repo sync -c -j$(nproc) --no-clone-bundle --no-tags

(This is the long one — expect an hour+ and a lot of bandwidth.)


3. Apply IchthysOS

Clone this repo somewhere outside the AOSP tree, then run apply.sh pointing at it:

git clone https://github.com/kusti420/IchthysOS ~/IchthysOS
~/IchthysOS/apply.sh ~/aosp

apply.sh will:

  1. copy the forward-ported lineage-sdk into the tree,
  2. clone crDroidSettings from crDroid (pinned to commit 9b9cacc, branch 16.0) into packages/apps/Settings/crDroidSettings,
  3. copy all the new files (SystemUI views, drawables, the boot animation, …),
  4. apply the four patches.

If a patch reports it "does NOT apply cleanly", AOSP has drifted from android-17.0.0_r1; re-sync to that tag, or resolve the reject manually.

Alternative for the crDroidSettings fetch: copy manifest/ichthysos.xml into ~/aosp/.repo/local_manifests/ and repo sync before running apply.sh (it will then skip the clone).


4. Build

cd ~/aosp
source build/envsetup.sh
lunch aosp_cf_x86_64_phone         # Android 17 / Baklava, eng variant
m                                  # full image (~30–60 min first time)

Useful partial builds while iterating:

m Settings     # the Settings app (incl. crDroidSettings) — installable without a reboot
m SystemUI     # SystemUI (status bar, QS, lock screen, battery bar, …)
m              # rebuild the flashable images (super.img etc.)

5. Launch the Cuttlefish VM

Note on this environment. In a plain container/VM without the cuttlefish-common host package, launch_cvd refuses to start ("vm_manager not supported"). The bypass is to create an empty /manager.sock so the sandbox check passes. On a normal Cuttlefish host you can skip the touch and just run launch_cvd.

cd ~/aosp
source build/envsetup.sh && lunch aosp_cf_x86_64_phone
touch /manager.sock                # sandbox bypass (see note above)
HOME=$HOME out/host/linux-x86/bin/launch_cvd --daemon
  • Screen: open https://localhost:8443 in a browser (self-signed cert — accept it).
  • adb: the device appears at 0.0.0.0:6520 (adb devices).

Stopping / restarting the VM:

out/host/linux-x86/bin/stop_cvd     # clean shutdown (clears the instance)
# then re-run the launch_cvd line above

Do not adb reboot this VM — in a bypassed environment the guest often does not come back (the launcher can't relaunch the guest process). Use stop_cvd + launch_cvd, or just relaunch, instead of rebooting from inside the guest.


6. Test the boot animation

The IchthysOS boot animation is a three-part bootanimation.zip:

  • part0 — the fish spins in a seamless loop for as long as boot takes,
  • part1 — when boot completes it winds down out of the spin,
  • part2 — it morphs into the ICHTHYS symbol and types out "IchthysOS", once.

You do not need to reboot to preview it. Push it (once) and drive it manually:

adb root && adb remount
adb push files/device/google/cuttlefish/shared/phone/bootanimation.zip /product/media/bootanimation.zip

# preview: fish loops, then fire the "boot complete" signal to see the finale
adb shell setprop service.bootanim.exit 0
adb shell setprop ctl.start bootanim          # fish starts looping
# ...watch it in the viewer...
adb shell setprop service.bootanim.exit 1     # winds down -> "IchthysOS" -> exits

ctl.start bootanim on its own only shows the loop; the finale plays when service.bootanim.exit flips to 1 (which the system does automatically at the end of a real boot — that's the whole point of the two c closing parts in desc.txt).

To see it during an actual boot, make sure the new zip is in the image (files/.../bootanimation.zip ships to /product/media/ via PRODUCT_COPY_FILES) and launch a fresh VM.


What's changed vs stock AOSP

See docs/ROM_CHANGELOG.md for the full, categorized list, and docs/SETTINGS_STATUS.md for a per-setting "what actually works on-device" tracker. Highlights:

  • The full crDroidSettings app, compiled into AOSP Settings, reachable from an "IchthysOS" homepage tile.
  • lineage-sdk (org.lineageos.platform, LineageSettings) forward-ported to A17.
  • A TunerService prefix system so SystemUI can observe any settings table.
  • Working backends for: status-bar clock (seconds/date/AM-PM/position), battery percent + style, a full-width battery bar, double-tap-to-sleep, extra padding, lock-screen battery info / power menu / ripple, a global disable-all-vibration toggle, selectable recents, 8.1-style Quick Settings, a horizontal volume dialog, and pitch-black theming.

License

The IchthysOS-original bits in this repo (boot animation, glue, docs) follow the same Apache License 2.0 as the AOSP / LineageOS / crDroid code they build on. Upstream files retain their original copyright headers.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages