[MAGP] Repo Aracı, manifest, local_manifest ve Diğer Kavramlar

Sponsorlu Bağlantılar

HakanSeven12

HakanSeven12

Üye
    Konu Sahibi
[MAGP] Repo Aracı, manifest, local_manifest ve Diğer Kavramlar
Artık konularıma kendi bloğumdan devam edeceğim. Bloğa alttaki resime tıklayarak ulaşabilirsiniz.



Google Repo Aracı

Bu konu AOKP rom için hazırlanmıştır. Diğer romlardada mantık aynıdır sadece dosya adları biraz değişebilir.

Repository
:
Basit anlamıyla kodların tutulduğu bulut ağlarıdır (Mega, Dropbox veya Google Drive gibi düşünebilirsiniz). Repository üzerinden başkasının hazırladığı kodları düzenleyip kendi bulutunuza aktarabilir(Siyah kutudaki gibi) ve ya kendinize güveniyorsanız kendi kodlarınızı yazabilirsiniz(Sarı kutudaki gibi). Başka kullanıcıdan aktarılan kaynakların altında "forked from link" şeklinde kopyalanan bulutun linki yer alır (Siyah kutudaki gibi).

Ayrıca kopyalanan kaynakların yanındaki simgeden de kopyalandığı anlaşılabilir.

Ekli resimleri görüntülemek için kayıt olmalısınız


Bu anlatımda kullanılmıştır. gibi başka repository siteleride vardır.

Repo aracı : repo init, repo sync gibi komutları rom derleme sırasında kullanıyoruz. Peki bu repo komutu nerden geliyor? Aşağıdaki komutu rom derleme konusundan hatırlarsınız.

Kod:
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo

Bu komut ile repo aracını indiriyoruz. Repo aracının işlevi ise bir buluttan(repository) istenilen başlık(branch) altındaki kodların alttaki kod ile çekilmesidir.

Kod:
repo sync -j4

Komut sonundaki -j4 sayısı indirmenin kaç kanaldan yapılacağını belirler internet hızınız düşükse bunu azaltabilir(-j1 veya -j2), internet hızınız yüksekse bunu arttırabilirsiniz(-j16 veya -j32).

Repo aracı kaynak indirmelerinde Default.xml veya Manifest.xml dosyasını referans alır. Manifest dosyası repo aracına hangi başlık(branch) altında hangi dosyaların indirilmesi gerektiğini anlatır. Kısaca manifest dosyası büyük bir indirilecek dosyası listesidir.

Manifest Dosyası ve Dosya Konumu

repo init komutunu kullandığınızda aşağıdakine benzer bir çıktı alırsınız.

Kod:
akshat@vaio:~$ mkdir -p kang
akshat@vaio:~$ cd kang
akshat@vaio:~/kang$ repo init -u https://github.com/AOKP/platform_manifest.git -b jb-mr1
Get https://gerrit.googlesource.com/git-repo
remote: Counting objects: 101, done
remote: Finding sources: 100% (101/101)
Receiving objects: 100% (2526/2526), 1.69 MiB | 67 KiB/s, done.
remote: Total 2526 (delta 1442), reused 2526 (delta 1442)
Resolving deltas: 100% (1442/1442), done.
From https://gerrit.googlesource.com/git-repo
* [new branch]      maint      -> origin/maint
* [new branch]      master     -> origin/master
* [new branch]      stable     -> origin/stable
* [new tag]         v1.0       -> v1.0
* [new tag]         v1.0.1     -> v1.0.1
* [new tag]         v1.0.2     -> v1.0.2
* [new tag]         v1.0.3     -> v1.0.3
* [new tag]         v1.0.4     -> v1.0.4
* [new tag]         v1.0.5     -> v1.0.5
* [new tag]         v1.0.6     -> v1.0.6
* [new tag]         v1.0.7     -> v1.0.7
* [new tag]         v1.0.8     -> v1.0.8
* [new tag]         v1.0.9     -> v1.0.9
* [new tag]         v1.1       -> v1.1
* [new tag]         v1.10.0    -> v1.10.0
* [new tag]         v1.10.1    -> v1.10.1
* [new tag]         v1.10.2    -> v1.10.2
* [new tag]         v1.10.3    -> v1.10.3
* [new tag]         v1.10.4    -> v1.10.4
* [new tag]         v1.11.0    -> v1.11.0
* [new tag]         v1.11.1    -> v1.11.1
* [new tag]         v1.12.0    -> v1.12.0
* [new tag]         v1.12.1    -> v1.12.1
* [new tag]         v1.12.2    -> v1.12.2
* [new tag]         v1.2       -> v1.2
* [new tag]         v1.3       -> v1.3
* [new tag]         v1.3.1     -> v1.3.1
* [new tag]         v1.3.2     -> v1.3.2
* [new tag]         v1.4       -> v1.4
* [new tag]         v1.4.1     -> v1.4.1
* [new tag]         v1.4.2     -> v1.4.2
* [new tag]         v1.4.3     -> v1.4.3
* [new tag]         v1.4.4     -> v1.4.4
* [new tag]         v1.5       -> v1.5
* [new tag]         v1.5.1     -> v1.5.1
* [new tag]         v1.6       -> v1.6
* [new tag]         v1.6.1     -> v1.6.1
* [new tag]         v1.6.10    -> v1.6.10
* [new tag]         v1.6.10.1  -> v1.6.10.1
* [new tag]         v1.6.10.2  -> v1.6.10.2
* [new tag]         v1.6.2     -> v1.6.2
* [new tag]         v1.6.3     -> v1.6.3
* [new tag]         v1.6.4     -> v1.6.4
* [new tag]         v1.6.5     -> v1.6.5
* [new tag]         v1.6.6     -> v1.6.6
* [new tag]         v1.6.7     -> v1.6.7
* [new tag]         v1.6.7.1   -> v1.6.7.1
* [new tag]         v1.6.7.2   -> v1.6.7.2
* [new tag]         v1.6.7.3   -> v1.6.7.3
* [new tag]         v1.6.7.4   -> v1.6.7.4
* [new tag]         v1.6.7.5   -> v1.6.7.5
* [new tag]         v1.6.8     -> v1.6.8
* [new tag]         v1.6.8.1   -> v1.6.8.1
* [new tag]         v1.6.8.10  -> v1.6.8.10
* [new tag]         v1.6.8.11  -> v1.6.8.11
* [new tag]         v1.6.8.2   -> v1.6.8.2
* [new tag]         v1.6.8.3   -> v1.6.8.3
* [new tag]         v1.6.8.4   -> v1.6.8.4
* [new tag]         v1.6.8.5   -> v1.6.8.5
* [new tag]         v1.6.8.6   -> v1.6.8.6
* [new tag]         v1.6.8.7   -> v1.6.8.7
* [new tag]         v1.6.8.8   -> v1.6.8.8
* [new tag]         v1.6.8.9   -> v1.6.8.9
* [new tag]         v1.6.9     -> v1.6.9
* [new tag]         v1.6.9.1   -> v1.6.9.1
* [new tag]         v1.6.9.2   -> v1.6.9.2
* [new tag]         v1.6.9.3   -> v1.6.9.3
* [new tag]         v1.6.9.4   -> v1.6.9.4
* [new tag]         v1.6.9.5   -> v1.6.9.5
* [new tag]         v1.6.9.6   -> v1.6.9.6
* [new tag]         v1.6.9.7   -> v1.6.9.7
* [new tag]         v1.6.9.8   -> v1.6.9.8
* [new tag]         v1.7       -> v1.7
* [new tag]         v1.7.1     -> v1.7.1
* [new tag]         v1.7.2     -> v1.7.2
* [new tag]         v1.7.3     -> v1.7.3
* [new tag]         v1.7.3.1   -> v1.7.3.1
* [new tag]         v1.7.4     -> v1.7.4
* [new tag]         v1.7.4.1   -> v1.7.4.1
* [new tag]         v1.7.4.2   -> v1.7.4.2
* [new tag]         v1.7.4.3   -> v1.7.4.3
* [new tag]         v1.7.5     -> v1.7.5
* [new tag]         v1.7.6     -> v1.7.6
* [new tag]         v1.7.6.1   -> v1.7.6.1
* [new tag]         v1.7.7     -> v1.7.7
* [new tag]         v1.7.7.1   -> v1.7.7.1
* [new tag]         v1.7.7.2   -> v1.7.7.2
* [new tag]         v1.7.7.3   -> v1.7.7.3
* [new tag]         v1.7.7.4   -> v1.7.7.4
* [new tag]         v1.7.7.5   -> v1.7.7.5
* [new tag]         v1.7.7.6   -> v1.7.7.6
* [new tag]         v1.7.8     -> v1.7.8
* [new tag]         v1.7.8.1   -> v1.7.8.1
* [new tag]         v1.7.8.2   -> v1.7.8.2
* [new tag]         v1.8.0     -> v1.8.0
* [new tag]         v1.8.1     -> v1.8.1
* [new tag]         v1.8.2     -> v1.8.2
* [new tag]         v1.9.0     -> v1.9.0
* [new tag]         v1.9.1     -> v1.9.1
* [new tag]         v1.9.2     -> v1.9.2
* [new tag]         v1.9.3     -> v1.9.3
* [new tag]         v1.9.4     -> v1.9.4
* [new tag]         v1.9.5     -> v1.9.5
* [new tag]         v1.9.6     -> v1.9.6
Get https://github.com/AOKP/platform_manifest.git
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0
curl: (22) The requested URL returned error: 404 Not Found
Server does not provide clone.bundle; ignoring.
remote: Counting objects: 1722, done.
remote: Compressing objects: 100% (1012/1012), done.
remote: Total 1722 (delta 839), reused 1552 (delta 709)
Receiving objects: 100% (1722/1722), 249.52 KiB | 50 KiB/s, done.
Resolving deltas: 100% (839/839), done.
From https://github.com/AOKP/platform_manifest
* [new branch]      ics        -> origin/ics
* [new branch]      jb         -> origin/jb
* [new branch]      jb-mr1     -> origin/jb-mr1
* [new tag]         Build-2    -> Build-2
* [new tag]         Build-3    -> Build-3
* [new tag]         Build-4    -> Build-4
* [new tag]         Build-5    -> Build-5
* [new tag]         Milestone-1 -> Milestone-1
* [new tag]         jb-mr1_build-1 -> jb-mr1_build-1
* [new tag]         jb-mr1_build-4 -> jb-mr1_build-4
* [new tag]         jb-mr1_build-6 -> jb-mr1_build-6
* [new tag]         jb-mr1_milestone-1 -> jb-mr1_milestone-1

Your identity is: akshatshenoy <[email protected]>
If you want to change this, please re-run 'repo init' with --config-name

repo has been initialized in /home/akshat/kang

Yukarıdaki çıktıda son satırda reponun /kang klasörü içinde başlatıldığını söylüyor. Bilgisayarın ana dizinindeki kang klasörü açılıp CTRL+H ile görünmez dosyaları görünür yapı CTRL+L ilede sadece gizli dosyaları listelersek alttaki ekranı görürüz.

Ekli resimleri görüntülemek için kayıt olmalısınız

Ekli resimleri görüntülemek için kayıt olmalısınız


.repo klasöründeki manifest.xml dosyasını açtığımızda indirilecek repoların listesini göreceksiniz.

AOKP JB-MR1 için bu dosya şu şekildedir:

Rom derleme sırasında kullandığımız şu kodu anımsarsak:

Kod:
repo init -u https://github.com/AOKP/platform_manifest.git -b jb-mr1

linkindeki default.xml dosyasına bakarsanız bilgisayarınızdaki .repo klasöründeki manifest.xml dosyasıyla aynı içeriğe sahip olduğunu görebilirsiniz.

repo sync komutuyla resimde görüldüğü gibi kaynak kod indirilmeye başlar.

Ekli resimleri görüntülemek için kayıt olmalısınız


İşaretlenmiş satıra bakarsanız manifest.xml dosyasında indirilecek 415 repo olduğunu görürsünüz. İndirme işlemi tamamlandığında inin dosyaları rom klasörünüzde görüntüleyebilirsiniz.

manifest Dosyasını Anlamak

Ekli resimleri görüntülemek için kayıt olmalısınız


1) remote(uzak sunucu) etiketi :

Kod:
<remote  name=" herhangi bir isim "
           fetch="uzak websitesi/hosting/sunucu url'si "
            review="kod inceleme reposu url'si :isteğe bağlı: " />

Bilgisayarın indirmeyi yapacağı uzak sunucunun takma adı, adresi ve repoları incelemek isterseniz kod inceleme reposu url'sini içerir.

Örnekler

Kod:
<remote  name="github"
           fetch="https://github.com/" />

<remote name="bitbucket" fetch="https://bitbucket.org"/>

  <remote  name="aokp"
           fetch="https://github.com/"
           review="gerrit.aokp.co" />

Bu şekilde farklı repo sunucuları ekleyip kullanılabilir.

2) default(varsayılan) etiketi :

Kutu içinde gördüğünüz gibi bir varsayılan(default) sunucu ekleyerek project etiketlerinde her defasında remote(uzak sunucu) ve revision(bölüm) tanımlaması yapmaktan kurtulabilirsiniz. Resimde (2) ve (3) numaralı satırlarda görüldüğü gibi.

Kod:
<remote  name=" herhangi bir isim "
           fetch="uzak websitesi/hosting/sunucu url'si "
            review="kod inceleme reposu url'si :isteğe bağlı: " />

<default revision="bölüm"
           remote="önceden tanımlanmış uzak sunucu adı"
           sync-j="x" />

x repo sync komutunda -j ile işlemin kaç kanaldan yapılacağı belirtilmezse kullanılacak varsayılan değerdir. Çoğu rom geliştiricisi varsayılan olarak AOSP sunucusunu kullanır. Böylece kendi repolarını boyutunu daha küçük tutarlar. Sadece kendi düzenlemelerini yaptıkları dosyalar için ayrı bir sunucu tanımlamaları gerekir.

Varsayılan sunucu örneği

Kod:
<remote  name="aosp"
           fetch="https://android.googlesource.com/"
           review="https://android-review.googlesource.com/" />

   <default revision="refs/tags/android-4.2.2_r1.2"
           remote="aosp"
           sync-j="4" />

3) project(proje) etiketi :

project etiket satırında remote ve revision etiketleri tanımlanmamışsa varsayılan uzak sunucu üzerinden indirme işlemi yapar. Fakat bu etiketler tanımlıysa o zaman etiketlerin belirttiği sunuculara bağlanır ve istenen paketleri çeker. Aralarındaaki farkı resimdeki (2) ve (3) numaralı satırlarda görebilirsiniz.

Kod:
<project path=" /reponun indirileceği dosya dizini" name="/varsayılan sunucudaki repo adı" />

Örnekler

Kod:
<project path="abi/cpp" name="platform/abi/cpp" />
<project path="bootable/diskinstaller" name="platform/bootable/diskinstaller" />

4) diğer project(proje) etiketi :

Varsayılan sunucu dışında indirilmesi gereken repolar için kullanılır. Uzak sunucu(remote) ve bölüm(revision) etiketlerinin tanımlanması gerekir.

Kod:
<project path="/reponun indirileceği dosya dizini" name="/sunucudaki repo adı" remote="önceden tanımlanmış sunucu adı" revision="bölüm" />

Kod:
<project path="bootable/recovery" name="CyanogenMod/android_bootable_recovery" remote="cm" revision="cm-10.1" />

İpucları

Bir repo linki iki kısımdan oluşur. Bunlar; uzak sunucu url'si + repo adı.

Mesela

Kod:
https://github.com/ + CyanogenMod/android_bootable_recovery

#repo linki

https://github.com/CyanogenMod/android_bootable_recovery

Çoğu rom geliştirici repolarını dosya dizini adlarıyla kaydederek diğer geliştiricilere kolaylık sağlarlar. Örnek olarak vendor/aokp dizinine inecek dosyalar uzak sunucuda github.com/AOKP/vendor_aokp reposunda tutulur. Resimlerdede görebilirsiniz.

Ekli resimleri görüntülemek için kayıt olmalısınız

Ekli resimleri görüntülemek için kayıt olmalısınız


Sizde kendi manifest dosyanızı oluşturup kullanabilirsiniz. Örneğin

Kod:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>

<remote  name="red-devil"
         fetch="https://github.com/red-devil" />

<project path="Cherrypicking/frameworks/base" name="AeonROM/android_frameworks_base" remote="red-devil" revision="master" />
<project path="Cherrypicking/frameworks/native" name="AeonROM/android_frameworks_native" remote="red-devil" revision="master" />
<project path="Cherrypicking/frameworks/av" name="AeonROM/android_frameworks_av" remote="red-devil" revision="master" />

</manifest>

local manifests Dosyasını Anlamak

local_manifest.xml : manifest dosyasının özel bir hali gibidir. Bu dosya manifest dosyasındaki proje(project) repolarının üzerine yazmaya, silmeye, düzenlemeye ve eklemeye yarar. Her repo sync komutunuzda bu dosya içindeki repolarda kendini günceller.

Dosya konumuna ulaşmak için
  1. .repo klasörünü açın ( klasör gizliyse CTRL + H yapın ).
  2. local_manifests adlı bir klasör oluşturun.
  3. linkteki sayfayı indirin. local_manifest.xml olarak adlandırın ve /.repo/local_manifests/ dizinine atın.
Ekli resimleri görüntülemek için kayıt olmalısınız

Ekli resimleri görüntülemek için kayıt olmalısınız


local manifests Dosyasının İşlevleri

local_manifest dosyası normal manifest dosyasıyla benzerdir. Farkı ise projelerde ekleme çıkarma yapabilmemizdir.

> remove-project(proje kaldırma) etiketi :

HTC Explorer için AOKP JB-MR1 derleniyorsa diğer cihazların cihaz kaynak kodları kaldırılabilir. Alttaki resimde gereksiz repoları görebilirsiniz.

Ekli resimleri görüntülemek için kayıt olmalısınız

Tüm bunları indirmek için internet kotası ve zaman harcamaktansa bunları kaldırmak daha mantıklıdır. peki neden direk manifest.xml dosyasını düzenlemiyoruz diye düşünebilirsiniz. Eğer direk manifest dosyasını düzenlerseniz o zaman repo sync komutunda sizdeki ve buluttaki manifest dosyaları uyuşmadığı için hata alırsınız.

Bu yüzden uzak sünücüdaki manifest dosyasını düzenlemeniz gerekir ki buna yetkiniz olması için repository hesabinin size ait olması gerekir. sunucu hesabı sizin olsa bile sizin sunucunuzu kullanan diğer geliştiricilerin işini zorlaştırmış olursunuz. Bu yüzden en iyi çözüm local_manifest dosyası kullanmaktır.

Kod:
<remove-project name="kaldırılacak proje adı" />

Örneğin

<remove-project name="AOKP/device_samsung_d2att" />
<remove-project name="AOKP/device_samsung_d2tmo" />

Böylece üstteki resimde gösterilen ilk iki cihazı kaldırmış olduk. Eğer diğer tüm cihazlar içinde kaldırma komutu eklersek sonuçta indirilecek paket sayısının 415 den 362 ye düştüğünü görebiliriz.

Ekli resimleri görüntülemek için kayıt olmalısınız


Böylece daha az paketin inmesini sağlamış olduk ve repo sync işlemini daha hızlı gerçekleştirebiliriz.

>proje(projects) ekleme :

Proje ekleme işlemi manifest dosyasıyla aynı şekilde yapılır.

Kod:
<remote  name=" herhangi bir isim "
           fetch="uzak websitesi/hosting/sunucu url'si "
            review="kod inceleme reposu url'si :isteğe bağlı: " />

<project path="/reponun indirileceği dosya dizini" name="/sunucudaki repo adı" remote="önceden tanımlanmış sunucu adı" revision="bölüm" />

Örneğin

Kod:
<project path="device/htc/pico" name="android_device_htc_pico_aokp" remote="red-devil" revision="master"/>
<project path="kernel/htc/pico" name="android_kernel_htc_pico" remote="red-devil" revision="cm-10.1" />

Sonuç olarak elinizde alttakine benzer bir local_manifest dosyası olacaktır.

Kod:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote  name="red-devil"
           fetch="https://github.com/red-devil/" />
  <project path="device/htc/pico" name="android_device_htc_pico_aokp" remote="red-devil" revision="master"/>
  <project path="kernel/htc/pico" name="android_kernel_htc_pico" remote="red-devil" revision="cm-10.1" />
  <remove-project name="AOKP/device_acer_a510" />
  <remove-project name="AOKP/device_asus_tilapia" />
  <remove-project name="AOKP/device_htc_evita" />
  <remove-project name="AOKP/device_htc_s4-common" />
  <remove-project name="AOKP/device_lge_iprj-common" />
  <remove-project name="AOKP/device_lge_mako" />
  <remove-project name="AOKP/device_lge_p930" />
  <remove-project name="AOKP/device_lge_su640" />
  <remove-project name="AOKP/device_lge_vs920" />
  <remove-project name="AOKP/device_motorola_maserati" />
  <remove-project name="AOKP/device_motorola_omap4-common" />
  <remove-project name="AOKP/device_motorola_solana" />
  <remove-project name="AOKP/device_motorola_spyder" />
  <remove-project name="AOKP/device_motorola_targa" />
  <remove-project name="AOKP/device_motorola_umts_spyder" />
  <remove-project name="AOKP/device_samsung_aries-common" />
  <remove-project name="AOKP/device_samsung_d2-common" />
  <remove-project name="AOKP/device_samsung_celox-common" />
  <remove-project name="AOKP/device_samsung_d2att" />
  <remove-project name="AOKP/device_samsung_d2tmo" />
  <remove-project name="AOKP/device_samsung_d2usc" />
  <remove-project name="AOKP/device_samsung_d2vzw" />
  <remove-project name="AOKP/device_samsung_galaxys2-common" />
  <remove-project name="AOKP/device_samsung_hercules" />
  <remove-project name="AOKP/device_samsung_i605" />
  <remove-project name="AOKP/device_samsung_i9100" />
  <remove-project name="AOKP/device_samsung_i9100g" />
  <remove-project name="AOKP/device_samsung_i9300" />
  <remove-project name="AOKP/device_samsung_l900" />
  <remove-project name="AOKP/device_samsung_maguro" />
  <remove-project name="AOKP/device_samsung_manta" />
  <remove-project name="AOKP/device_samsung_msm8660-common" />
  <remove-project name="AOKP/device_samsung_msm8960-common" />
  <remove-project name="CyanogenMod/android_device_samsung_omap4-common" />
  <remove-project name="AOKP/device_samsung_smdk4412-common" />
  <remove-project name="CyanogenMod/android_device_samsung_smdk4412-qcom-common" />
  <remove-project name="AOKP/device_samsung_t0lte" />
  <remove-project name="AOKP/device_samsung_t0lteatt" />
  <remove-project name="AOKP/device_samsung_t0ltetmo" />
  <remove-project name="AOKP/device_samsung_toro" />
  <remove-project name="AOKP/device_samsung_toroplus" />
  <remove-project name="AOKP/device_samsung_tuna" />
  <remove-project name="AOKP/device_samsung_vibrantmtd" />
  <remove-project name="AOKP/device_sony_hayabusa" />
  <remove-project name="AOKP/device_sony_mint" />
  <remove-project name="AOKP/device_sony_odin" />
  <remove-project name="AOKP/device_sony_tsubasa" />
  <remove-project name="AOKP/device_sony_yuga" />
  <remove-project name="AOKP/device_sony_blue-common" />
  <remove-project name="AOKP/device_sony_fusion3-common" />
  <remove-project name="CyanogenMod/android_device_sony_qcom-common" />
  <remove-project name="AOKP/device_sony_common" />
  <remove-project name="AOKP/packages_apps_Torch" />
</manifest>

repo sync dediğinizde ise toplam proje sayısının 364 olduğunu görebilirsiniz.

Ekli resimleri görüntülemek için kayıt olmalısınız


İpucları

#1) local_manifest ile Neler Kaldırılabilir?

Altta belirtilen paketlerin hepsini local_manifest dosyasından remove-project etiketiyle kaldırabilirsiniz. Aşağıda örnek olarak verilen kodların manifest dosyasında name(ad) etiketinde belirtilen adını kullanmalısınız.

1) Kullanmayacağınız cihaz kaynak kodlarını kaldırabilirsiniz.

Kod:
android_device_htc_cihazkodadı
android_device_sony_cihazkodadı
android_device_samsung_cihazkodadı

Eğer HTC cihazınız yoksa HTC cihaz kaynak kodu repolarına da ihtiyacınız yoktur. Aynı şekilde diğer cihaz üreticileride buna dahil... android_device_common gibi genel repoları ve sahip olduğunuz cihazın (mesela Sony için device/sony/common) genel repolarını silmeyin.Ayrıca cihazınızın cihaz(device) kaynak kodları yoksa cihazınıza donanımsal olarak benzer özellikteki repoları silmezseniz kendi cihazınızın kodlarını hazırlarken bunlardan faydalanabilirsiniz.

2) Kullanmayacağınız kernel kaynak kodlarını kaldırabilirsiniz.

Kod:
kernel/asus/grouper
kernel/lge/mako
kernel/oneplus/msm8974

Bu repoların çoğu boyut olarak büyük dosyalardır. Kullanmadıklarınızı kaldırmanız işinizi hızlandırır.

3) Kullanmayacağınız üretici kaynak kodlarını kaldırabilirsiniz.

Kod:
vendor_htc
vendor_lge
vendor_samsung
vendor_motorola

Nexus cihazlar TheMuppets üretici adını kullanır.

4) Kullanmayacağınız paket programları kaldırabilirsiniz.

Mesela telefonunuzda flaş yoksa ozaman torch.apk(el feneri) uygulamasınada ihtiyacınız yoktur. Ayrıca gereksiz canlı duvar kağıtları ve diğer istemediğiniz programlarıda kaldırabilirsiniz.

Kod:
packages_apps_uygulamaadı
android_packages_wallpapers_duvarkağıdıadı

5) Macintosh üzerinde derleme yapmayacaksanız darwin derleyicilerini kaldırın.

Kod:
<project path="prebuilts/gcc/darwin-x86/arm/arm-eabi-4.6" name="platform/prebuilts/gcc/darwin-x86/arm/arm-eabi-4.6" groups="pdk,darwin,arm" />
<project path="prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.6" name="platform/prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.6" groups="pdk,darwin,arm" />
<project path="prebuilts/gcc/darwin-x86/mips/mipsel-linux-android-4.6" name="platform/prebuilts/gcc/darwin-x86/mips/mipsel-linux-android-4.6" groups="pdk,darwin,mips" />
<project path="prebuilts/gcc/darwin-x86/x86/i686-linux-android-4.6" name="platform/prebuilts/gcc/darwin-x86/x86/i686-linux-android-4.6" groups="pdk,darwin,x86" />

Yukardaki satırlar dışındaki darwin araçlarını kaldırmayın.

6) Diğer gereksiz repoları kaldırın.

Örneğin Qualcomm(manifest dosyasında qcom diye yazar) cihaz kullanıyorsanız Exynos repolarına ihtiyacınız yoktur.

Not: Ne işe yaradığını bilmediğiniz paketleri kesinlikle kadırtmayın.

#2) Yeni Kaynak Kod İndirmeden Önce Referans Noktası Kullanın!

Kod:
repo init --reference=/daha/önce/indirilen/romun/dizini -u kaynak_kod_baglanti_adresi -b bolum

Diyelim ki Cyanogenmod kaynak kodunu alttaki kodla indiridiniz ve kullandınız.

Kod:
repo init -u git//www.github.com/CyanogenMod/android.git -b cm-10.1
repo sync -j4

Ekli resimleri görüntülemek için kayıt olmalısınız


Fakat bir süre sonra bundan sıkıldınız ve başka bir ROM denemeye karar verdiniz. Mesela AOKP... Tekrar bir 15GB daha indirme yapacağınızı düşünebilirsiniz ama buna gerek yok. Önceki indirdiğiniz ROM'un kodlarını referans nokta alarak kullanıp indireceğiniz veri miktarını düşürebilirsiniz. Resimde kodun kullanımını görebilirsiniz.

Ekli resimleri görüntülemek için kayıt olmalısınız


Bu kod referans olarak gösterilen konumdaki dosyalar ile buluttakileri karşılaştırıp eksik veya farklı dosyaları indirir. Böylece veri ve zaman tasarrufu sağlamış olursunuz.

#3) Derleme Yaparken CCACHE Kullanın

CCACHE : Türkçesi önbellektir. Derleyici önbelleği(compiler cache) olarakda söylenir. Kullanılma amacı ise derleme işleminin süresini kısaltmaktır.

CCACHE kullanmak için;

1) Ucbirim(terminal) açın. (CTRL+ALT+T)
2) gedit.bashrc yazıp enterlayın.
3) Alttaki kodu ekleyin.

Jellybean için;

Kod:
export USE_CCACHE=1
export CCACHE_DIR=/source-directory/prebuilts/misc/linux-x86/ccache

ICS ve daha eski sürümler için;

Kod:
USE_CCACHE=1
export CCACHE_DIR=/source-directory/prebuilt/linux-x86/ccache/ccache

Bu işlemi yaptıktan sonra ucbirimden(terminal) kaynak kodun tutulduğu dizine girip alttaki kodu yazın.

Kod:
prebuilts/misc/linux-x86/ccache/ccache -M 50G

ICS ve daha düşük versiyonlar CCACHE'yi buna göre ayarlarlar.

50 G ---> 50 GB CCACHE demektir. İdeali 50-100 arasıdır. İsterseniz 40 civarıda ayarlayabilirsiniz.

CCACHE derleme esnasında çalışan C ve C++ programlarının çıktılarını önbelleğe alır. İlk derlemeden sonra yapılan derlemelerde aynı programın tekrar çalıştığını algılarsa kaydettiği çıktı verilerini yollayarak programın tekrar çalışmamasını sağlar. Bu sayede derleme zamanından tasarruf sağlar.

#4) Özel Toolchain(Derleyici) Kullanın

ROM veya kernel derlerken linaro gibi özel toolchain(derleyici) kullanarak %20-30 daha fazla performans elde edebilirsiniz.

Bu linkten linaro derleyicisini indirebilirsiniz.

ROM için;
İndirdiğiniz dosyayı resimde gösterilen dizine çıkarın.

Ekli resimleri görüntülemek için kayıt olmalısınız


build/envsetup.sh dosyasında altta gösterilen iki satırı linaro derleyici(toolchain) içindeki /bin klasörünü gösterecek şekilde düzenleyin.

Ekli resimleri görüntülemek için kayıt olmalısınız


Kernel için;
İndirdiğiniz dosyayı /prebuilt/linux-x86/toolchains/ dizinine çıkarın.

Ekli resimleri görüntülemek için kayıt olmalısınız


Cihaz kaynak kodu dizinindeki(device/üretici/cihazkodadı) BoardConfig.mk dosyasında aşağıda gösterilen satırı düzenleyip derleyici klasörünün adını yazın.

Ekli resimleri görüntülemek için kayıt olmalısınız


Bunun dışında ek düzenlemeler yapılması gerekebilir. Cihazınız için internette araştırma yaparak bunu bulabilirsiniz.

#5) Cherry-picking(Kiraz toplama)

commits : küçük kod paketleridir. Rom geliştiricilerin bulut hesaplarında gördüğünüz her commits çeşitli dosyalarda düzeltmeler içerir. Tek başlık altında yapılan değişikliklerin tamamı bir commit eder.

Github üzerinde örnek kod paketleri(commits) listesi :

Github üzerinde örnek kod paketi(commit) :

Cerry-pickingi romun hatalarını gidermek veya roma yeni özellikler(kilit ekranı veya holo bildirimler gibi) kazandırmak için kullanabilirsiniz. Örnekte sadece tek bir kod paketi eklenmiştir. Fakat genellikle bir özellik eklemek için 2-8 arası kod paketini ROMa entegre etmek gerekebilir.

Mesela ROM derleme işleminden sonra cihazınıza kurdunuz ve bazı hatalar gördünüz. Biraz araştırdınız ve Cyanogenmod geliştiricilerinin sizinkiyle benzer bir cihazda bu sorunu çözdüğünü gördünüz. Bu kod paketlerini(commits) elle bilgisayarımızdaki kaynak koda uygulayabiliriz. Bu sıkıcı ve insan hatasına açık bir iş olur. Adının Türkçesi garip gelsede cherry-picking(kiraz toplama) işlemiyle bu işi otomatikleştirebiliriz.

İlk olarak kod paketini(commits) uygulayacağınız dizine girin. Örnek olarak HTC Explorerın(kodadı pico) cihaz kaynak kodunda düzenleme yapacaksak ;

Kod:
cd device/htc/pico

Diyelimki bu linkteki resimde mavi kutuyla gösterilen kod paketini çekmek istiyoruz.

İlk olarak github adresine bağlanmamız lazım bunun için alttaki gibi bir kod oluşturmalıyız.

Kod:
git remote add isim url

Kod:
git remote add pico git://github.com/TeamPico/android_device_htc_pico.git

isim- repoya verebileceğiniz herhangi bir isim. Bu ismi fetch komutunda kullanıcaz.
url- reponun bağlantı adresi

Kod:
git fetch isim

Kod:
git fetch pico

Ekli resimleri görüntülemek için kayıt olmalısınız

Şimdi kod paketini(commit) çekebiliriz. Bunu için ya üstte kırmızı kutu içindeki butonu tıklayarak yada kod paketinin içine girip alttaki resimde gösterilen kırmızı kutu içindeki kod paketi numarasını kopyalayıp alttaki kodun sonuna yazmalısınız.

Kod:
git cherry-pick kod-paketi-numarası

Kod:
git cherry-pick 61718c8fe3d11151a4c3b8364cca14b430c23c04

Ekli resimleri görüntülemek için kayıt olmalısınız


İşlem bitince kod paketini roma eklemiş oldunuz. Eğer aşağıdaki gibi bir hata kodu gelirse;

Kod:
akshat@vaio:/media/akshat/HD/android/kang/device/htc/pico$ git cherry-pick aa39fd899e321395f3c08c9a7f606ac458bbbd1b
error: could not apply aa39fd8... cut out debugging
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

Kod paketi romunuzla uyumlu değil demektir. Eksik satır veya kod çakışması olmuş olabilir. Hatanın nerden kaynaklandığını bulmak için alttaki kodu kullanın.

Kod:
git status

Yeşil dosyalarda sorun olmadan kod eklenmiş/çıkartılmıştır. Kırmızılar ise sorunludur. Kırmızı dosyaları açıp tek tek elle düzeltmek gerekir. İlk olarak alttaki kodla bozuk kodun bulunduğu dosyayı açın.(Dosya dizinindende açabilirsiniz.)

Kod:
gedit kırmızıyla-yazan-dosya-dizini

Hatalı yer alttaki şekilde görünecektir.

Kod:
<<<<<HEAD
<Orjinal Kod>
=======
<Cherry-pick kodu>
>>>>>Cherry Pick Kodunun Adı

Ekli resimleri görüntülemek için kayıt olmalısınız


Bozuk kısmı githubdaki kod paketiyle karşılaştırıp gerekli düzenlemeleri yapın. Githubda kırmızı ile gösterilen satırlar silinen yeşil ile gösterilen satırlarsa eklenen satırlardır. Githubda eklemek istediğiniz kod paketini açıp kırmızı/yeşile dikkat ederek kendi kodlarınızı elle düzenleyebilirsiniz. "<<<<", "=====" ve ">>>>>" satırlarını silin. Sonuç olarak alttaki gibi düzenlememizi yapmış olduk.

Ekli resimleri görüntülemek için kayıt olmalısınız


Düzenlediğimiz dosyayı cerry-pickinge ekleyip başka hata varmı diye kontrol ediyoruz.

Kod:
git add kırmızıyla-yazan-dosya-dizini

Kod:
git status

Bütün satırlar yeşilse işlemi bitiriyoruz.

#6) Kaynak Koda APK Dosyası Ekleme

Kaynak kodun cihazınıza ait dizinini açın ve APKnızı bu dizine kopyalayın. (Örneğin Moto G için device/motorola/falcon)

Alttaki satırları android.mk dosyasına ekleyin.
include $(CLEAR_VARS)
LOCAL_MODULE := İsim
LOCAL_SRC_FILES := İsim.apk
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := .apk
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MODULE_PATH := $(TARGET_OUT)/app
include $(BUILD_PREBUILT)

Örnek Wallpaperz.apk için

Kod:
include $(CLEAR_VARS)
LOCAL_MODULE := Wallpaperz
LOCAL_SRC_FILES := Wallpaperz.apk
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_SUFFIX := .apk
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MODULE_PATH := $(TARGET_OUT)/app
include $(BUILD_PREBUILT)

device.mk içine alttaki kodu ekleyin.

Kod:
PRODUCT_PACKAGES += \
İsim

Eklediğiniz APK başka dosyalarında ROM içinde bulunmasını gerektiriyorsa alttaki kodla kaynak koddaki bir dosyayı ROMa taşıtabilirsiniz.

Kod:
PRODUCT_COPY_FILES += \
dosyanın-kaynak-kod-klasörü-içindeki-yeri:ROM.zip-içindeki-yeri

Örnek (libjackpal-androidterm3.so ve libjackpal-androidterm4.so dosyalarının ikisinide taşıtmak için)

Kod:
PRODUCT_COPY_FILES += \
device/lge/geeb/libjackpal-androidterm3.so:system/lib/libjackpal-androidterm3.so \
device/lge/geeb/libjackpal-androidterm4.so:system/lib/libjackpal-androidterm4.so

#7) Uygulama Kaynak Kodlarını Ekleme

Altta Gallery2 uygulamasının kaynak kodunun ROMunuzun kaynak koduna eklenmesini göstereceğim.(Bu uygulama zaten ROMunuzda var ben sadece örnek olsun diye gösteriyorum.)

Uygulamanın kaynak kodunu /packages/uygulama-adı dizinine kopyalayın. Örnek /packages/Gallery2. Uygulamanın kaynak kod klasörüne gürün ve android.mk dosyasını açın. LOCAL_PACKAGE_NAME satırında yazan uygulama adını kopyalayın.

Kod:
LOCAL_AAPT_FLAGS := --auto-add-overlay
LOCAL_PACKAGE_NAME := Gallery2
LOCAL_OVERRIDES_PACKAGES := Gallery Gallery3D GalleryNew3D

device içinde cihazınızın kodlarının bulunduğu dizine girin. Örneğin device/motorola/falcon. device.mk dosyasını açıp alttaki satırları yapıştırın.

Kod:
PRODUCT_PACKAGES += \
Gallery2


 

Ekli dosyalar

Son düzenleme:


metrixx02

Üye
hocam efsanesiniz geri donduğunuz için çok teşekkür ederim hangoutsdan size yazıyorum ama ulaşamıyorum yardımcı olursanız çok sevinirim sizi tekrar görmek çok guzel .Ellerinize sağlık
 
HakanSeven12

HakanSeven12

Üye
    Konu Sahibi
Rica ederim :) hangoutsu bu akşam açarım tekrar
 

metrixx02

Üye
Kod:
target thumb C++: libRSCpuRef <= frameworks/rs/cpu_ref/rsCpuScript.cpp
target thumb C++: libRSCpuRef <= frameworks/rs/cpu_ref/rsCpuRuntimeMath.cpp
frameworks/rs/cpu_ref/rsCpuIntrinsics_neon_Blur.S: Assembler messages:
frameworks/rs/cpu_ref/rsCpuIntrinsics_neon_Blur.S:1429: Error: unexpected end of file in irp or irpc
clang: error: assembler command failed with exit code 1 (use -v to see invocation)
make: *** [/home/proxy13/RS/cm12.1/out/target/product/e975/obj/SHARED_LIBRARIES/libRSCpuRef_intermediates/rsCpuIntrinsics_neon_Blur.o] Error 1
make: *** Bitmemiş işler için bekliyor....(waiting for not finished works)
proxy13@proxy13-NP510R:~/RS/cm12.1$

Arkadaşlar konu altına ekliyorum bu hatayı alıp çözümünü bulan olursa lütfen bana ulaşsın 1 aydır burada takıldım ne yaptıysam sonuç alamadım
 

semdoc

Üye
Kod:
target thumb C++: libRSCpuRef <= frameworks/rs/cpu_ref/rsCpuScript.cpp
target thumb C++: libRSCpuRef <= frameworks/rs/cpu_ref/rsCpuRuntimeMath.cpp
frameworks/rs/cpu_ref/rsCpuIntrinsics_neon_Blur.S: Assembler messages:
frameworks/rs/cpu_ref/rsCpuIntrinsics_neon_Blur.S:1429: Error: unexpected end of file in irp or irpc
clang: error: assembler command failed with exit code 1 (use -v to see invocation)
make: *** [/home/proxy13/RS/cm12.1/out/target/product/e975/obj/SHARED_LIBRARIES/libRSCpuRef_intermediates/rsCpuIntrinsics_neon_Blur.o] Error 1
make: *** Bitmemiş işler için bekliyor....(waiting for not finished works)
proxy13@proxy13-NP510R:~/RS/cm12.1$

Arkadaşlar konu altına ekliyorum bu hatayı alıp çözümünü bulan olursa lütfen bana ulaşsın 1 aydır burada takıldım ne yaptıysam sonuç alamadım

Sistem dilini ingilizce çevirip, bilgisayarınızı başlatın. Daha sonra make clean ile yeni build başlatın.
Umarım yardımcı olur.
Sizin hatanıza, Google'da aynı hatayı aratırken ulaştık. Biz de deniyoruz...
 


Üst Alt