Ubuntu 16.04'te Android ROM'lar Nasıl Kurulur?

Giriş

Android bugün dünyanın en popüler işletim sistemidir. Yüzlerce farklı orijinal ekipman üreticisi veya OEM'i, ücretsiz, açık kaynaklı olduğu ve etrafında inşa edilmiş büyük bir uygulama ve hizmet ekosistemine sahip olduğu için cihazlarına yüklemeyi tercih ediyor. Maalesef pek çok OEM, Android için düzenli olarak OTA üzerinden yapılan güncellemeleri gerçekleştirmemektedir. Ve diğer OEM'ler yalnızca bir cihazın piyasaya sürülmesinden sonra sınırlı bir süre güncelleme sağlar. Ayrıca, OEM'ler, cihazlarının benzersiz bir görünüm ve hisse sahip olmasını sağlamak için Android'i yoğun bir şekilde özelleştirme eğilimindedir. Onların özelleştirmeleri, alternatif başlatıcıları, temalı sistem kullanıcı arayüzlerini ve önceden kurulmuş uygulamaları içerir.

Tüm bu özelleştirmeleri kaldırmak istiyorsanız veya saf Android'in en son sürümünü cihazınızda çalıştırmak istiyorsanız, kendiniz için yeni üretici yazılımı oluşturabilirsiniz. Android modding topluluğunda, bu tür yazılımlara genellikle ROM, salt okunur bellek için kısaltma denir.

Bu yazıda Android Open Source Project veya kısaca AOSP üzerine kurulu bir Android Oreo ROM oluşturacaksınız. Bu öğreticiyi cihazdan bağımsız ve genel tutmak için yalnızca AOSP öykünücüsünü hedefleyeceğiz, ancak gerçek cihazlar için de aynı teknikleri uygulayabilirsiniz.

Ön şartlar

Takip edebilmek için ihtiyacınız olan şey:

  • En az 16 GB RAM, 4 CPU ve 120 GB depolama alanına sahip bir Ubuntu 16.04 x64 sunucusu, sudo root olmayan bir kullanıcı ve bir güvenlik duvarı da dahil olmak üzere Ubuntu 16.04 başlangıç ​​sunucusu kurulum rehberini izleyerek kurmuştur. Derleme işlemi çok miktarda RAM gerektirir ve daha fazla CPU derleme süresini hızlandırır. Buna ek olarak, indirip indirdiğiniz dosyalar oldukça büyük. DigitalOcean, bu proje için büyük bir uygun olabilecek Yüksek CPU Damlacıklarına sahiptir.
  • Git, Ubuntu 16.04 üzerinde Git Nasıl Yüklenir Aşağıdakileri kullanarak yüklenir.

1. Adım – Bir Ekran Oturumunu Başlatın

Bu eğitimde uygulayacağınız komutlardan bazıları potansiyel olarak saatlerce çalışabilir. Bilgisayarınızla sunucunuz arasındaki SSH bağlantısı komutlar çalışırken kesilirse, bunlar aniden kesilirler. Böyle bir durumdan kaçınmak için, tek bir terminalde birden çok konsol oturumunu çalıştırmanıza olanak tanıyan screen yardımcı programını kullanın. Ekran ile, çalışan bir oturumu tarayabilir ve daha sonra yeniden bağlayabilirsiniz. Ekran'a yeniyseniz, bu dersin Ubuntu'daki Ekran'ı kullanma hakkında daha fazla bilgi edinin.

Yeni bir screen oturumu başlatın.

  • ekran

Ekranı ilk defa çalıştırdığınızda, bir lisans sözleşmesi sunulacaktır. Lisansı kabul etmek için Enter tuşuna basın.

Bu noktadan itibaren, SSH bağlantınız başarısız olursa, uzun süren komutlarınız arka planda çalışmaya devam edecektir. SSH bağlantısını yeniden kurduktan sonra, screen -r çalıştırarak oturumu devam ettirebilirsiniz.

Sonra, Android'i derlemek için gerekli bileşenleri kuralım.

Adım 2 – Bağımlılıkları Kurma

AOSP kaynak kodu birkaç farklı Git depolarına yayılmıştır. Kullanıcıların bu depoları daha kolay indirmesini sağlamak için AOSP topluluğu repo adlı bir komut satırı aracı oluşturdu.

Aracın en son sürümünü wget kullanarak indirip ~/bin dizininde saklayacağız. Önce, ~/bin dizini oluşturun:

  • mkdir -p ~ / bin

Sonra repo komut dosyasını indirin:

  • wget 'https://storage.googleapis.com/git-repo-downloads/repo' -P ~ / bin

Not : Başka bir siteden indirdiğiniz bir komut dosyasını makinenizde çalıştırmanın güvenlik konusunda endişeleriniz varsa, komut dosyasının içeriğini inceleyin:

  • daha az ~ / bin / repo

Komut dosyasının içeriğine rahatlıkla baktığınızda, bu öğreticiye devam edin.

Mevcut kullanıcıya repo çalıştırma iznini vermek için chmod kullanın.

  • chmod + x ~ / bin / repo

repo aracı dahili olarak Git'i kullanır ve kullanıcı adınızı ve e-posta adresinizi belirten bir Git yapılandırması oluşturmanızı gerektirir. Bunu yapmak için şu komutları uygulayın:

  • git config --global kullanıcı.name "sizin adınız"
  • git config --global kullanıcı.email "sizin_ alan_adiniz@alan_adiniz.com"

Android'in kaynak kodu öncelikle Java, C ++ ve XML dosyalarından oluşur. Kaynak kodunu derlemek için OpenJDK 8, GNU C ve C ++ derleyicileri, XML ayrıştırma kitaplıkları, ImageMagick ve diğer birçok ilgili paketleri yüklemeniz gerekir. Neyse ki, hepsini apt kullanarak kurabilirsiniz. Bunu yapmadan önce, sunucunuzun paket listelerini güncellediğinizden emin olun.

  • sudo apt-get güncelleme

Listeler güncellendiğinde, bağımlılıkları yükleyin:

  • sudo apt-get install openjdk-8-jdk android-tools-adb bc bison build-gerekli curl flex g ++ - multilib gcc-multilib gnupg gperf imagemagick lib32ncurses5-dev lib32devre-dev lib32d5-dev libesd0-dev liblc4-tool libncurses5-dev libsdl1 .2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs araçları xsltproc yasm zip zlib1g-dev

Bağımlılıklar indirildikten sonra, Android kaynağını almak için repo komut dosyasını kullanabiliriz.

Adım 3 – Kaynak Kodunu İndirme

repo komut dosyasını, çalışma alanımızı hazırlamak için birkaç görevi yerine getirmek için kullanacağız. İndirilecek olduğunuz Android kaynağını depolamak için yeni bir dizin oluşturun:

  • mkdir -p ~ / aosp / oreo

Bu dersin geri kalanında bu dizinde çalışacaksınız, bu yüzden şu an geçiş yapın:

  • cd ~ / aosp / oreo

Dizin, birlikte AOSP kod tabanı oluşturan tüm diğer Git depoları yollarını belirten bir default.xml adlı bir XML dosyası içeren özel bir Git depoyu AOSP bildirim deposu ile başlatılmalıdır.

AOSP kod ağacının tümüyle çalışmak hantal olabilir. Bu nedenle, ilgilendiğiniz spesifik bir revizyonun veya şubenin adını ayrıca belirtmeniz gerekir. Bu yazıda, bir Oreo ROM oluşturduğumuz için, yapı kimliğini OPD1.170816.025 olan android-8.0.0_r33 dalını OPD1.170816.025 . AOSP'nin resmi Codenames, Tags ve Build Numbers sayfasından tüm mevcut yapı ID'lerini ve şube adlarını öğrenebilirsiniz.

Ayrıca, bu öğreticide kod ağacının tüm taahhüt geçmişine ihtiyaç duymayacaksınız. Geçmişin derinliğini 1 keserek hem zamanı hem de saklama alanını kaydedebilirsiniz.

Buna göre, dizini başlatmak ve şu seçenekleri belirlemek için repo init komutunu kullanın:

  • repo init -u https://android.googlesource.com/platform/manifest -b android-8.0.0_r33 --depth = 1

Renkli ekranı etkinleştirmek isteyip istemediğiniz sorulduğunda Y'ye ve ardından Enter'a basın.

Son olarak, repo sync komutunu çalıştırarak gerçek depolarından gerçek AOSP dosyalarını indirin:

  • repo senkronizasyonu

Yukarıdaki komut 30 GB'ın üstünde veri indirir, tamamlandığında sabırlı olun. İşlem tamamlandıktan sonra, derlemeyi hızlandırmak için bir önbellek oluştururuz.

Adım 4 – Bir Derleyici Önbellek Hazırlama

Yapılarınızı hızlandırmak için bir derleyici önbellek kullanabilirsiniz. Adından da anlaşılacağı üzere, bir derleyici ön belleği, zaten derlenmiş ROM bölümlerini derlemeyi önlemenize yardımcı olur.

Derleyici önbellek kullanımını etkinleştirmek için USE_CCACHE adlı bir ortam değişkeni USE_CCACHE .

  • USE_CCACHE ihracat = 1

Boş disk alanınız yoksa, önbelleğin çok büyük olmasını istemezsiniz, bu nedenle boyutunu sınırlayabilirsiniz. ROM'unuzu tek bir cihaz için oluşturuyorsanız, 15 GB ile sınırlayabilirsiniz. Bunu yapmak için ccache komutunu kullanın.

  • prebuilts / misc / linux-x86 / ccache / ccache -M 15G

Bu değişikliği gerçekleştirdiğinizi onaylayan çıktıyı görürsünüz:

OutputSet cache size limit to 15.0 Gbytes

Derlemeden önce yapmamız gereken bir optimizasyon daha var. Şimdi bunu yapalım.

Adım 5 – Jack'i Yapılandırma

ROM'taki Java tabanlı bölümlerin çoğundan sorumlu Jack sunucusu çok fazla bellek gerektirir. Bellek ayırma hatalarını önlemek için, Jack'in ne kadar bellek kullanmasına izin verildiğini belirtmek için ANDROID_JACK_VM_ARGS adlı bir ortam değişkeni kullanabilirsiniz. Genellikle, sunucunuzun RAM'inin yaklaşık% 50'sini ayırmanız yeterlidir. Bu ortam değişkeni, diğer derleme ayarlarını da belirtir.

Jack sunucusuna 8 GB RAM ayırmak ve Jack'in ihtiyaç duyduğu varsayılan derleme seçeneklerini korumak için aşağıdaki komutu çalıştırın:

  • dışa aktar ANDROID_JACK_VM_ARGS = "- Xmx8g -Dfile.encoding = UTF-8 -XX: + TieredCompilation"

Artık Android ROM'unuzu oluşturmaya hazırsınız.

6. Adım – Yapının Başlatılması

AOSP kod ağacı, envsetup.sh ilişkin pek çok yardımcı fonksiyona sahip envsetup.sh adlı bir betik içerir. mm , mma ve mmm gibi yardımcı işlevlerin birçoğu make komutu için kısayollar işlevi görürken, lunch gibi diğer şeyler önemli ortam değişkenlerini belirleyerek diğer şeylerin yanında ROM'un CPU mimarisi ve türlerini belirler. inşa.

Yardımcı fonksiyere erişmek için komut dosyasını kaynaklayın.

  • kaynak yapısı / envsetup.sh

Outputincluding device/asus/fugu/vendorsetup.sh
including device/generic/car/car-arm64/vendorsetup.sh
including device/generic/car/car-armv7-a-neon/vendorsetup.sh
including device/generic/car/car-x86_64/vendorsetup.sh
including device/generic/car/car-x86/vendorsetup.sh
including device/generic/mini-emulator-arm64/vendorsetup.sh
including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh
including device/generic/mini-emulator-mips64/vendorsetup.sh
including device/generic/mini-emulator-mips/vendorsetup.sh
including device/generic/mini-emulator-x86_64/vendorsetup.sh
including device/generic/mini-emulator-x86/vendorsetup.sh
including device/google/dragon/vendorsetup.sh
including device/google/marlin/vendorsetup.sh
including device/google/muskie/vendorsetup.sh
including device/google/taimen/vendorsetup.sh
including device/huawei/angler/vendorsetup.sh
including device/lge/bullhead/vendorsetup.sh
including device/linaro/hikey/vendorsetup.sh
including sdk/bash_completion/adb.bash

Daha sonra, lunch çalıştırın ve cihazınızın kod adını, eng , userdebug veya user olabilen bir yapı türü ile sonlandırılmış olarak verin. eng ve userdebug yapı türleri, sınama amacıyla en uygun userdebug neden olurken, user oluşturma türü, üretim için önerilir.

AOSP ARM öykünücüsünde çalışabilen bir test ROM'u oluşturmak için aosp_arm-eng lunch komutuna:

  • öğle yemeğinde aosp_arm-eng

Ortam ayarlarını gösteren bu çıktıyı görürsünüz:

Output============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=8.0.0
TARGET_PRODUCT=aosp_arm
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_PLATFORM_VERSION=OPD1
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a
TARGET_CPU_VARIANT=generic
TARGET_2ND_ARCH=
TARGET_2ND_ARCH_VARIANT=
TARGET_2ND_CPU_VARIANT=
HOST_ARCH=x86_64
HOST_2ND_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-4.4.0-104-generic-x86_64-with-Ubuntu-16.04-xenial
HOST_CROSS_OS=windows
HOST_CROSS_ARCH=x86
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=OPD1.170816.025
OUT_DIR=out
AUX_OS_VARIANT_LIST=
============================================

Son olarak, kurulumu başlatmak için make komutunu çalıştırın. make paralel işleri destekler; böylece -j seçeneğini kullanarak paralel işlerin sayısını sunucuda bulunan CPU sayısına eşit olarak ayarlayarak make önemli ölçüde hızlandırabilirsiniz.

Kaç tane işlemci kullandığınızı görmek için nproc komutunu kullanın:

  • nproc

Komut, CPUS sayısını döndürür:

Output8

Paralel yürütmeyi belirtmek make ile bu numarayı kullanabilirsiniz:

  • -j8 yapmak

8 CPU'lu olsa bile, sunucunuzda etkin olan başka CPU yoğun bir süreç olmadığı sürece, kurulumun tamamlanması için bir saatten fazla beklemek zorunda kalacaksınız. Oluşturma süresi, RAM miktarı ve sahip olduğunuz CPU sayısıyla doğru orantılıdır. Daha hızlı yapılar isterseniz, 32 CPU ve 48 GB'a kadar bellek destekleyen özel Yüksek CPU Damlacıkları kullanmayı düşünün.

Not: Oluşturma sırasında birçok uyarı mesajı üretilir. Onları güvenle yok sayabilirsiniz.

ROM hazır olduğunda, yapının başarıyla tamamlandığını söyleyen bir ileti görmelisiniz. Yapının kesin süresini de görebilirsiniz.

Output...
Creating filesystem with parameters:
Size: 2147483648
Block size: 4096
Blocks per group: 32768
Inodes per group: 8192
Inode size: 256
Journal blocks: 8192
Label: system
Blocks: 524288
Block groups: 16
Reserved block group size: 127
Created filesystem with 2266/131072 inodes and 178244/524288 blocks
[100% 63193/63193] Install system fs i... out/target/product/generic/system.img
out/target/product/generic/system.img+ maxsize=2192446080 blocksize=2112 total=2147483648 reserve=22146432

#### make completed successfully (01:05:44 (hh:mm:ss)) ####

Onların doğru yaptıklarından emin olalım.

7. Adım – Yapının Doğrulanması

Oluşturma işleminin çıktısı, birlikte ROM oluşturan birden fazla dosya sistemi görüntüsünden oluşur. Bunları out/target/product/generic/ dizininde bulabilirsiniz.

  • ls -l dışarı / hedef / ürün / genel / *. img

Output-rw-r--r-- 1 sammy sammy 69206016 Jan 5 18:51 out/target/product/generic/cache.img
-rw-rw-r-- 1 sammy sammy 1699731 Jan 5 19:09 out/target/product/generic/ramdisk.img
-rw-r--r-- 1 sammy sammy 2147483648 Jan 5 19:10 out/target/product/generic/system.img
-rw-r--r-- 1 sammy sammy 576716800 Jan 5 19:09 out/target/product/generic/userdata.img

ROM'u test etmek için, emulator komutunu çalıştırarak bir emülatörü onunla önyüklemeyi deneyebilirsiniz. GUI olmayan bir ortamdaysanız, -noaudio -no-window ve -noaudio bayraklarını ona -noaudio emin olun.

  • emülatör -no-pencere -noaudio> / dev / null 2> & 1 &

Öykünücünün başarıyla önyüklenip açılmadığını kontrol etmek için bir dakika bekleyin ve öykünücünün üzerinde bir kabuk açmak için Android hata ayıklama köprüsü aracını ( adb kullanın.

  • adab kabuğu

ROM'da herhangi bir sorun yoksa, emülatörde çalışan bir kabuktan bir komut istemini görürsünüz.

Output* daemon not running; starting now at tcp:5037
* daemon started successfully
generic:/ #

Bu kabuktan exit ENTER yazarak veya CTRL+D tuşlarına basarak exit .

Not: Kabuk açılmadan önce emülatör açılmaya çalışılırsa, size emülatörün çevrimdışı olduğunu bildiren bir hata mesajı görürsünüz. Kısa bir süre bekleyin ve tekrar deneyin.

Sorun giderme

Oluşturma başarısız olursa, en olası nedeni bellek yetersizliği. Bunu düzeltmek için önce aşağıdaki komutu çalıştırarak Jack sunucusunu öldürün:

  • jack-admin kill-server

Ardından, yapıya yeniden başlayın, ancak izin verilen daha az paralel işle. Örneğin, paralel işlerin sayısını yalnızca 2'ye düşürebilmeniz için şunları yapabilirsiniz:

  • -j2 yap

Yetersiz disk alanı nedeniyle yapınız başarısız olursa, muhtemelen önceki yapıların sonuçlarını temizlemeden birden çok kez inşa etmeye çalışıyorsunuz demektir. Önceki yapıların sonuçlarını atmak için aşağıdaki komutu çalıştırabilirsiniz:

  • Clobber yap

Alternatif olarak, DigitalOcean'ın Blok Depolama Alanını kullanarak Damlacıkıza daha fazla disk alanı ekleyebilirsiniz.

Sonuç

Bu yazıda Android Oreo için AOSP tabanlı bir ROM oluşturdunuz. Bugün öğrendiğiniz teknikler, Lineage OS ve Resurrection Remix OS gibi AOSP'nin tüm çatallarına da uygulanabilir. Android uygulamaları geliştirme konusunda tecrübeniz varsa, ROM'unuza kişisel bir dokunuş vermek için AOSP kod tabanının küçük bölümlerini değiştirmeyi düşünebilirsiniz.

AOSP kaynak kodunu oluşturma hakkında daha fazla bilgi edinmek için Google Grupları'ndaki Android Yapı forumuna göz atın.

Bir önceki yazımız olan ProxySQL, Ubuntu 16.04 üzerinde MySQL için Yük Dengeleyici Olarak Nasıl Kullanılır başlıklı makalemizi de okumanızı öneririz.

About This Author

Uzun yıllardır yazılım ile uğraşıyorum. PHP ile başladığım yazılım hayatıma şu an PHP'nin yanında Swift ve Python ile devam ediyorum. Bu güne kadar bir çok proje geliştirdim ve yeni projeler geliştirmeye de devam ediyorum. Bu sitede yazılımseverlere faydalı bilgiler vermeye, yazılım geliştirmeye, öğrendiklerimi paylaşmaya, yeni başlayanlara yol göstermeye ve onlara yardımcı olmaya çalışıyorum.

Comments are closed

%d blogcu bunu beğendi: