Mastodon
5 dk okuma süresi

📱 Custom ROM Derleme Rehberi

Şunu belirtmem lazım custom ROM derlemek çok kolay bir iş değil ve teknik bir işlem. Yine de dünyanın en zor işlemi de değil ama başarmak için ilginizin ve isteğinizin olması kesinlikle gerek. Benim elimde redmi note 10 pro cihazı var ve bunun için custom rom derleyeceğim ama bu videodaki amacım size mantığını anlatmak böylece herhangi bir cihaz için de bu adımları takip edebilinç

Öncelikle gereksinimler ne?

  • Bir Linux makinesi (biz ubuntu 24.04 kullanacağız)
    • Mac veya WSL olmuyor. Sanal makine veya normal Linux makinesine ihtiyacınız var.
  • Basit Linux bilgisi ve git'in nasıl çalıştığını anlamak
  • İyi internet bağlantısı çünkü Android git depoları indirme boyutu 150-200 GB'ı bulabiliyor. (biz hosting dünyamın sağladığı sunucuyu kullandığımızdan 1GBPS portlara sahibiz)
  • İşlemci en azından 4 çekirdekli ve 8 threade sahip bir işlemci. Ne kadar fazla olursa o kadar iyi.
  • RAM: Minimum 16 GB olması lazım, raminiz 16ysa 32 ZRAM veya SWAP ayarlamanız şart. Bizim yine 100 GB RAM'imiz var.
  • En azından 300 GB boş alana sahip bir SSD'nizin olması güzel olur çünkü dediğim gibi Android kaynak dosyaları oldukça büyük.

Ben videoda Hosting Dünyamın bize sağladığı sunucuları kullandım. Siz de Hosting Dünyamdan bir sunucu kirlayarak derleme işlemi yapabilirsiniz.

1-) Gerekli Paketler İçin Kurulum Scripti

Şimdi bizim Android'i derlememiz için bilgisayarımızda belli başlı yazılımların kurulması lazım. Örneğin bilgisayarınızla telefonuzunun iletişime geçmesini sağlayan araç adb, dosyaları indirmenizi sağlayan curl, derleme işlemini gerçekleştirecek olan gcc ve bunun gibi onlarca yazılımın kurulması gerekli.

Bu işi kolaylaştıran bir script mevcut "Akhilnarang betiği"

İşimizi kolaylaştırması açısından bu git deposunu çekip betiği çalıştıracağız.

git clone https://github.com/akhilnarang/scripts
cd scripts && bash bash setup/android_build_env.sh # alternatif olarak arch tercih edildiyse arch-manjaro.sh

2-) Git Ayarını Yapma

ROM dosyalarını çekmeden önce iki komutla git ayarı yapmamız gerekiyor. Bunu muhtemelen git kullanıyorsanız yaptınız ama yapmayanlarınız olabilir o yüzden göstermek istiyorum.

Git yazılımına e-posta adresimizi ve ismimizi belirtiyoruz.

git config --global user.email "[email protected]"
git config --global user.name "Your Name"

3-) ROM Seçimi ve Repoyu Başlatma

Mevzu bahis hangi ROM'u kullanayım olduğunda onlarca seçeneğiniz mevcut. Bütün seçebileceğiniz Android romlarını gösteren bir liste hali hazırda var ama benim tavsiyem güncelleme almaya devam eden bir ROM'u seçmeniz olur. Örneğin en son x yıl önce güncelleme almış olan Resurruction Remix'i tercih etmeniz muhtemelen kötü.

Bu videoda en çok bilinen ve sevilen ROM'lardan birisi olan LineageOS'i tercih edeceğim ama siz listeden istediğiniz herhangi bir ROM'u seçebilirsiniz.

Burada önemli olan seçtiğiniz custom ROM'un manifest deposuna gelmek. Bu depo ROM'umuzun dosylarını içeriyor ve bunu klonlayacağız.

$ mkdir rom
$ cd rom
$ repo init -u https://github.com/LineageOS/android.git -b lineage-21.0 --git-lfs 

rom adında bir klasör açıyorum ardından içerisine girip Lineage OS'in 21.0 sürümünü klonlaması gerektiğini söylüyorum.

-b argümanı indirmek istediğimiz Lineage OS sürümünü içermesi lazım. Bizim için 21.0

--git-lfs argümanıysa gitin büyük dosyaları daha efektif çekmesini sağlıyor.

İnternet bağlantınız kötüyse "---depth=1" argümanını ekleyebilirsiniz. Bu da deponun geçmişini indirmemesini sağlayacaktır, böylece depoyu daha düşük boyutta indirmiş olacaksınız ama mümkünse tam haliyle indirmenizde fayda var.

4) Depo Senkronizasyonu

Şimdi çektiğimiz depoyu indirmeye başlayacağız bunun için aşağıdaki komutu görüyoruz.

$ repo sync -c -j $(nproc --all) --optimized-fetch --force-sync 

Argümanlarımıza bakacak olursak:

-c argümanı şu anki branchte kalması gerektiğini söylüyor.

-j kaç çekirdek ile indirme işleminin gerçekleşeceğini söylüyor. nproc —all eklediğinizde bütün çekirdeklerinizi vewrmiş oluyorsuınuz.

--optimized-fetch gitten veri çekme operasyonlarını optimize ediyor.

--force-sync gite göndermediğiniz değişiklikleri silip uzaktaki depoyla birebir aynı olacak şekilde depoyu indiriyor.

Bu adım internetinize, işlemcinize ve disk hızınıza bağlı olarak 30 dakika ile 5 saat arası sürebilir. Bizim dedicated sunucumuzda yaklaşık 35 dakika sürdü.

5) ROM Derleme Ortamının Ayarlanması

Şimdi ROM'u derleyebilmek adına değişkenlerin ayarlanması gerekiyor. Bunun için aşağıdaki scripti çalıştırıyoruz.

$ source build/envsetup.sh

6) Cihaz Kaynaklarının Ayarlanması

İşte herkeste değişkenlik gösterecek bir adıma geldik. Bu adım önemli. Cihaz ağacınızı ve vendor dosyalarınızı bulup rom klasörüne eklemeniz gerekli.

Cihaz ağacınız cihazınız hakkında donanımsal bilgileri içeren dosyaları barındırıyor. Vendor dosyaları ise yine donanımsal bilgileri barındırıyor ama genelde kapalı kaynaklı dosyaları barındırıyor.

Her cihazın kendi cihaz ağacı ve vendor dosyası farklı, basit bir Google aratmasıyla bunları bulabilmeniz lazım ama olur da sizin cihazınız için bir cihaz ağacı eksikse o zaman kendinize cihaz ağacı yazmanız lazım. Bu da oldukça zor bir iş ve bu videonun konusunun dışına çıkar.

Ben bu videoda Lineage OS derleyeceğim ve cihazım resmi olarak Lineage tarafından destekleniyor. Dolayısıyla breakfast sweet komutunu girdiğimde benim için cihaz ağacını çekecek yalnız vendoru çekmeyecek çünkü vendorda kapalı kaynak dosyalar mevcut.

Olur da cihazımız resmi olarak desteklenmeseydi, .repo klasörünmün altında oluşan localmanifest klasörüne bir xml dosyası oluşturacaktım ve aşağıdaki içeriği girecektim.

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <project path="device/xiaomi/sweet" remote="github" name="xiaomi-sm6150/android_device_xiaomi_sweet" revision="lineage-21" />
  <project path="device/xiaomi/sm6150-common" remote="github" name="xiaomi-sm6150/android_device_xiaomi_sm6150-common" revision="lineage-21" />
  <project path="kernel/xiaomi/sm6150" remote="github" name="xiaomi-sm6150/android_kernel_xiaomi_sm6150" revision="lineage-21" />
  <project path="vendor/xiaomi/sweet" remote="github" name="xiaomi-sm6150/android_vendor_xiaomi_sweet" revision="lineage-21" />
  <project path="vendor/xiaomi/sm6150-common" remote="github" name="xiaomi-sm6150/android_vendor_xiaomi_sm6150-common" revision="lineage-21" />
  <project path="hardware/xiaomi" remote="github" name="xiaomi-sm6150/android_hardware_xiaomi" revision="lineage-21" />
</manifest>

7) Derleme İçin Hedef Belirleme

Derleme işlemine başlamadan önce derlemenin amacını belirtmemiz gerekiyor. Bunu da lunch komutu kullanarak yapıyoruz.

İlk kısımda rom adımız yazıyor, ikinci kısımda cihaz kodadımız yazıyor son kısımdaysa stabil sürüm mü yoksa geliştirici sürümü mü olduğuınu belirtiyoruz.

$ lunch rom-ismi_code-name-userdebug # durumuna bağlı olarak stable bir build için user veya aşırı ekstra debuglamak için eng ek'i kullanılabilir 

8) Derlemeyi Başlatıyoruz

Şimdi bütün adımları gerçekleştirdik ve ROM'u derlemeye hazırız.

$ brunch sweet

Sistemimiz ROM'u derlemeye başlayacak. Sisteminizin ne kadar güçlü olduğuna bağlı olarak bu süre çok uzun olabilir. 58 çekirdekli işlemci ve 94 GB RAM'li bir sistemde bizim için bir buçuk saat civarı sürüyor. Sizin sisteminiz daha güçsüzse 24-48 saat gibi sürelerri bekleyebilirsiniz.

Derleme bittiğinde out/target/product/kod-adı dizininde bir zip dosyası bulacaksınız. Bu zip dosyasını flashladığınızda ROM'unuz kurulmuş olacak.

9) Ek Bilgiler

Eğer ki Google servislerini kullanmak istiyorsanız GAPPS yazılımını flashlamanız gerekecek, bunun için bir çok hali hazırda internette servis mevcut. Mesela MindTheGAPPS zip dosyasını flashlayabilirsiniz.

Eğer ki Google'ın safetynetinden geçmek istiyorsanız derlediğiniz romu bir de imzalamanız gerekecek. Lineage OS'in bu konuda makalesi var. Çok zor bir şey değil adım adım anlatılanları takip ederseniz çok kısa sürede ROM'unuzu imzalayabilirsiniz.