Congratulations & welcome to the Evolution X team! 
This page will walk you through the new device maintainer onboarding process!
References to “us” or “we” mean Joey or
Anierin in the
#maintainers
channel of the Evolution X Discord server .
The usage of codename should be replaced with your device’s codename
throughout this process.
1. Device repositories & initial installation images
Once you’ll be accepted as an official maintainer, please provide us:
- Your SourceForge username
- Your GitHub username
Specify the repositories you need created or access to under the Evolution X Devices GitHub organization
Once these repositories are created, and you have been granted access and pushed, please delete lineage.dependencies (if existing) and set up evolution.dependencies in each applicable repository for device source syncing via roomservice .
Additionally, provide a list of image names required to be flashed in order to boot Evolution X recovery (initial installation images) coming from the stock ROM of your device. (E.g boot, recovery etc)
You MAY NOT substitute Evolution X recovery with TWRP or any of its derivatives (OFOX/PBRP)
Example message using panther:
# Device:
Device name: Google Pixel 7
Device codename: panther
# Usernames:
GitHub Username: AnierinBliss
SourceForge Username: anierin
# Device Repositories:
1. Repository Name: device_google_panther
Repository Description: Roomservice & scripts support
2. Repository Name: device_google_pantah
Repository Description: Device tree for the Google Pixel 7 & 7 Pro
3. Repository Name: device_google_gs201
Repository Description: Board tree for Google Tensor G2 devices
4. Repository Name: device_google_gs101
Repository Description: Board tree for Google Tensor G1 devices
5. Repository Name: device_google_gs-common
Repository Description: Common interfaces & sepolicies for tensor-based Google Pixel devices
6. Repository Name: packages_apps_PixelParts
Repository Description: Parts application for tensor-based Google Pixel devices
# Initial installation images (required to boot Evolution X recovery when coming from the stock ROM):
1. boot
2. dtbo
3. vendor_kernel_boot
4. vendor_bootRoomservice chain
Here is an example of how to setup the roomservice chain (mentionned in lunch guide.) We’ll use Panther again as an example.
device_google_panther :
[
{
"repository": "device_google_pantah",
"target_path": "device/google/pantah"
}
]As previously said in lunch guide, we can see that Panther has only 1 dependency, which is Pantah. Pantah contains the dependencies for building Pantah and Panther.
device_google_pantah :
{
"repository": "device_google_gs201",
"target_path": "device/google/gs201"
},
{
"repository": "device/google/pantah-kernel",
"target_path": "device/google/pantah-kernel",
"remote": "aosp-pantah"
}
]But we can see that Pantah itself has a dependency, device_google_gs201, common to both devices.
device_google_gs201 :
[
{
"repository": "device_google_gs101",
"target_path": "device/google/gs101"
}
]And again, this tree has an other dependencies:
device_google_gs101 :
[
{
"repository": "device_google_gs-common",
"target_path": "device/google/gs-common"
},
{
"repository": "packages_apps_PixelParts",
"target_path": "packages/apps/PixelParts"
}
]Now you understand why this is called a roomservice chain. All the dependencies are +- linked.
2: Setting up the environment
This part assume you’ve read Setting up the environment before.
Since you are now an official maintainer, you have to make sure your builds are official too.
In order to set it up, you only have to
export EVO_BUILD_TYPE=OfficialIn order to set it up, you only have to
To make sure it’s applied every time, you can add it at the end of your ~/.bashrc file:
echo 'export EVO_BUILD_TYPE=Official' >> ~/.bashrc
source ~/.bashrc3: Signed Releases
Maintainers are required to sign all releases with our private keys .
Note that it has already been explained here.
There are no manual signing steps required.
Just clone the repository to $ANDROID_BUILD_TOP/vendor/evolution-priv/keys/ and compile.
Releases not signed by these keys will be removed from sourceforge without warning.
Please keep these keys CONFIDENTIAL. Be cautious, especially if you’re using a shared server!
ANY INTENTIONAL OR ACCIDENTAL LEAK WILL RESULT IN IMMEDIATE REMOVAL FROM THE PROJECT, AND YOU WON’T BE ALLOWED BACK.
4: Upload to SourceForge
Maintainers are responsible for uploading releases and initial installation images to SourceForge .
Example using Panther:
ROM uploading :
scp EvolutionX-14.0-20240724-panther-v9.2-Official.zip anierin@frs.sourceforge.net:/home/frs/p/evolution-x/panther/14/boot.img uploading :
scp EvolutionX-14.0-20240724-panther-v9.2-Official.zip anierin@frs.sourceforge.net:/home/frs/p/evolution-x/panther/14/dtbo.img uploading :
scp dtbo.img anierin@frs.sourceforge.net:/home/frs/p/evolution-x/panther/14/dtbo/vendor_kernel_boot.img uploading :
scp vendor_kernel_boot.img anierin@frs.sourceforge.net:/home/frs/p/evolution-x/panther/14/vendor_kernel_boot/vendor_boot.img uploading :
scp vendor_boot.img anierin@frs.sourceforge.net:/home/frs/p/evolution-x/panther/14/vendor_boot/All these commands assume you already have the corresponding folder created on sourceforge.
5: Create an XDA thread
Create an XDA forums thread using the $ANDROID_BUILD_TOP/evolution/XDA/generate_xda_thread.sh script found in the XDA repository .
croot && cd evolution/XDA/ && . generate_xda_thread.shPlease be aware that you will need to manually update the installation instructions to reflect the procedure specific to your device. The ability to automatically update these instructions during the generation script will be added in the future.
6: Add your device to OTA
Fork the OTA repository and add your device using the json located at $ANDROID_BUILD_TOP/out/target/product/codename/codename.json.
The contents must match that of the uploaded build! If the device is not currently in the OTA repository, your codename.json will look similar to the example below.
it is up to you to fill out the unpopulated fields and create a codename.txt changelog.
Subsequent jsons in $ANDROID_BUILD_TOP/out/target/product/codename/codename.json will be fully populated using $ANDROID_BUILD_TOP/evolution/OTA/codename.json after your initial commit to OTA has been merged, allowing you to directly copy/paste.
Please respect the format when making a PR for OTA ! Examples: Adding
a device : OTA: Add Google Pixel 7 (panther) Updating single device:
Panther: 08/24/2024 Update Updating multiple device:
Panther/Cheetah/Lynx: 08/24/2024 Update
Example codename.json name using panther :
{
"response": [
{
"maintainer": "Anierin Bliss",
"oem": "Google",
"device": "Pixel 7",
"filename": "EvolutionX-14.0-20240825-panther-v9.3-Official.zip",
"download": "https://sourceforge.net/projects/evolution-x/files/panther/14/EvolutionX-14.0-20240825-panther-v9.3-Official.zip/download",
"timestamp": 1724548829,
"md5": "4e9f1d05510efd85d2b24d06ad496371",
"sha256": "b27e481a476d094972d4d6380cc31972f3384b4702b7453f0405a7011bbffc57",
"size": 2697824926,
"version": "9.3",
"buildtype": "Release",
"forum": "https://xdaforums.com/t/rom-14-0-0_r53-official-evolution-x-9-2-08-01-2024.4546503/",
"firmware": "",
"paypal": "https://PayPal.me/AnierinB",
"telegram": "https://telegram.me/AnierinB",
"github": "AnierinBliss",
"initial_installation_images": [
"boot",
"dtbo",
"vendor_kernel_boot",
"vendor_boot"
]
}
]
}If needed, super_empty image has to be put on top of the list !
Example :
"initial_installation_images": [
"super_empty",
"recovery",
"other image..."
]When done, commit, push, and submit a pull request via comparing forks with the main OTA repository; we will review and merge it at our earliest convenience.
