[Anlatım] System.New.Dat ve Eski Yöntemle Lolipop Romları Kurmak

SmiLeToLiFe

Administrator
#1
Arkadaşlar merhaba,

Bildiğiniz gibi lolipop romlar yeni bir dosya formatında '' dat '' olarak iyice sıkıştırılmış ve boyutu düşürülmüş şekilde oluşturuluyor. Eskiden kitkat ve jellybean romlarda system klasörleri açık bir şekilde ve düzenlenebiliyordu. Fakat bu yeni dosyalama formatında ise bu mümkün değil :) Dat dosyasındaki klasörleri görmeniz için birkaç işlem yapmanız gerekiyor. Konu şu anda bu olmadığı için anlatmayacağım. Buradaki konuda android 5.0 ve üzeri romların yapısı ve nasıl eski yöntemle kurulabileceğini anlatacağım.  

andorid lolipop romların zip içerğinde aşağıda yazılanlar bulunmaktadır:

META-INF = update-binary ve updater-script --- > Romun nasıl yükleneceğine ilişkin komutları recoverye ileten dosyalar
Boot.img ---> kernel
system.new.dat ---> press edilmiş system klasörü
system.transfer.list ---> system klasöründeki liblerin, apk ların vb .... dosyaların hangi izinlerle nereye yazılacağını belirtmektedir.

Bu yeni sistemde eskiden olduğu gibi updater-script te setdata ve symlink kodları yok. Aksine aşağıdaki kod bulunmaktadır: 

PHP:
block_image_update("system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat");
Bu kod recoverye verdiği komutla kapalı image dosyası yazdırıyor ve dosyaları transfer edeceği noktaya gerekli izinleri system.transfer.list dosyasından olarak yazıyor.  Bu şekilde yapılan yazdırma işleminde eskisi gibi kafa karıştıran birçok kodlardan arındırılmış ve boyutu küçültülmüş bir rom yapısı oluşturuluyor.

Peki biz lolipop romları eskisi gibi nasıl kurarız ya da neden buna ihtiyaç duyuyoruz? '' Dat '' formatındaki romları açmak kapamak bir hayli zor iş. Çünkü bazı şeyler için linux a ihtiyacınız olacak. Tüm işlemleri windows üzerinde yapmak mümkün fakat pek sağlıklı sonuçlar verdiği söylenemez. Aksine linux da da doğru sonuçları %100 elde edeceğinizin garantisini veremem. Bu sebeple ben eski yöntemle romları kuruyorum ;)

Lolipop romlar için çalışan ve size gerçekten zaman tasarrufu ettireceğine inandığım yöntemi anlatayım: 

1. Eski yöntemle kurabilmek için gerekli dosyalar ---> Cihazınız için hazırlanmış bir meta-inf klasörü ( en önemlisi  cihazınızın için updater-script içinde setdata ve symlink kodlarının olması )

Neyden bahsediyorsun arkadaşım diyenler varsa: 


2. Eski yöntemle kurabilmek için gerekli kodlamalar ---- > Her romun yapısına uygun symlink oluşturmak

Birincisinin elinizde olduğu varsayıyorum ve ikinci aşamaya geçiyorum. Hani anlatımın ilk başında demiştim ya recovery kapalı image yazılımı yapıyor ve gerekli klasör ve lib izinlerini system.transfer.list dosyasından alıyor. İşte bu noktada mecburen bu kodlamaları biz yaparak updater-script e eklememiz gerekiyor.

Peki bu kodlamayı nasıl yapacağız? ---> Burası tamamıyla sizin bilginize ve öğrenme kabiliyetinize kalmış. 

Ben cihazım için çalışan meta-inf klasörü buldum. Anlattığınız kodlamaları yapmadan META-INF klasörü , boot.img ve system klasörünü zipleyip romu kursam çalışmaz mı, kurulmaz mı? ---> Büyük ihtimalle kurulur. Romunuz açılır fakat bazı hatalarla karşılaşırsınız ve kullanamazsınız.

Kodlamaları yapmazsam ne gibi hatalar çıkar ? --- > VoiceCommand durdu, Bluetooth durdu, FmRadio durdu vb ... hatalar alırsınız ve romu kullanamazsınız.

Bu hataların sebebi romda bulunan apk içindeki liblerden kaynaklanmaktadır. Apk ların doğru çalışması için varsa liblerine gerekli izinlerin verilmesi gerekiyor. Benim cihazım 64 bit olduğu için burada 3 farklı durum oluşuyor.
 
  1 . romun app klasöründe bulunan bazı apk ların libleri olması ve aynı liblerin system/lib ya da system/lib64 klasöründe de bulunması
  2 . romun priv-app klasöründe bulunan bazı apk ların libleri olması ve aynı liblerin system/lib ya da  system/lib64 klasöründe de bulunması
  3.  romun app ya da priv-app klasöründe bulunan bazı apk ların liblerinin olması

Şimdi bu durumlara örnek vereyim: 

1. durum için 

Elephone P7000 Stock romunda system/app klasöründe Bluetooth isminde klasör var. Bu klasöründe içinde Bluetooth.apk ve lib dosyası var. Lib dosyasının içinde ise arm klasörü ve onun içinde ise libbluetooth_jni.so libi var.

symlink("/system/lib/libbluetooth_jni.so", "/system/app/Bluetooth /lib/arm/libbluetooth_jni.so");

Yukarıdaki kod için kısa açıklama yapayım:

lib --- > yazdığım bu libin aynı zamanda system/lib klasöründe de olduğunu belirtiyor

libvie_jni.so ---> libin ismi

app --- > apk nın app klasöründe olduğunu belirtiyor

Bluetooth---> apk nın bulunduğu klasörün ismi

lib --- > Bluetooth klasöründeki libin bulunduğu klasörün ismi

arm ---> Bluetooth klasöründenin içindeki lib klasörünün içinde bulunan klasörün ismi

libbluetooth_jni.so ---> libin ismi


2. durum için

Elephone P7000 stock romunun system/priv-app klasöründe LatinIME isimi bir klasör var. İçinde lib klasörü ve LatinIME.apk var. Lib klasörünün içinde ise arm64 isimli klasör ve onun içinde libjni_latinime.so libi var.

symlink("/system/lib64/libjni_latinime.so", "/system/priv-app/LatinIME/lib/arm64/libjni_latinime.so");

lib64 ---> yazdığımız bu libin aynı zamanda lib64 klasöründe de olduğunu belirtiyor

libjni_latinime.so ---> libin ismi

priv-app ---> apk nın priv-app klasörde olduğunu belirtiyor

LatinIME ---> apk nın bulunduğu klasörün bulunduğu ismi

lib ---> LatinIME klasöründeki libin bulunduğu klasörün ismi

arm64 ---> LatinIME klasöründeki lib klasörünün içindeki klasörün ismi

libjni_latinime.so ---> libin ismi


3. durum için

Elephone P7000 Stock romunun app klasöründe elephone nin kendi geliştirmiş olduğu launcher var. Bu klasörün adı XLauncher ve içinde XLauncher.apk ve lib klasörü var. Lib klasörünün içinde ise arm ve onun içinde 2 farklı lib var ( liblocSDK3.so ve libmasonsdkjni.so) Fakat bu libler  system/lib klasöründe ve system/lib64 klasöründe yok. Sadece apk nın bulunduğu klasördeki lib klasörünin içinde var.

symlink("/system/app/XLauncher/lib/arm/liblocSDK3.so");

symlink("/system/app/XLauncher/lib/arm/libmasonsdkjni.so");

app ---> apk nın app klasöründe olduğunu belirtiyor

XLauncher ---> apk nın bulunduğu klasörün bulunduğu ismi

lib ---> Xlauncher klasöründeki ve apk ya ait liblerin içinde bulunduğu klasörün ismi

arm ---> lib klasörünün içinde bulunan ve apk ya ait liblerin içinde olduğu klasörün ismi

liblocSDK3.so ve libmasonsdkjni.so ---> liblerin isimleri

Siz de yukarıda verdiğim örneklere bakarak hangi apk larda lib varsa ve hangilerine symlink verilmesi gerekiyorsa örneğin yapısına uyan apk lar için symlink verin. 

Bazen apk nın kendisi app de fakat libi lib64 te olabiyor buna benzer durumlara dikkat etmeniz gerekiyor.


İçinde lib bulunan tüm apk lara symlink kodu oluşturmalı mıyım?  ---> Klasöründe libi bulunan tüm apk lara lib vermek zorunda değilsiniz. Fakat  Romu kurarsınız. Bakarsınız nelerin hata verdiğine ki zaten klasörlerinde libi olan apk ların birçoğu hata verecektir. Onların isimlerini bir yere not alın ve yukarıdaki örneklere bakarak symlink oluşturup updater-script in içine yapıştırın ;)

İçinde lib bulunan bir apk içinde 10 (örnek) tane lib varsa 10 (örnek) tanesine de lib varsa hepsine symlink kodu oluşturmam gerekiyor mu? ---> Evet gerekiyor.


Örnek updater -script:


Umarım bu uzun anlatımla gözünüzü korkutmamışımdır. Her şeyi açıklamaya çalıştığım için biraz uzun oldu. Herkese iyi forumlar dilerim ... ;) Bu arada bebeler bu konulara bakıp öğrenip romlarınızda uygulayıp sonra biz yaptık diye peydahlanmayın ortalıkta ;)
 
Üst