Zygote, Android işletim sistemindeki bir işlemdir. Aynı uygulama ikili arayüzü (ABI) olan tüm sistem ve uygulama işlemlerinin kökü olarak çalışır.
Pixel 7 ve sonraki modeller gibi modern cihazlarda 64 bit Zygote işlemi bulunur. Ayrıca, birincil ABI için WebView Zygote vardır. Bu, WebView'leri çalıştıran işlemlere özel kitaplıklar ve kaynaklar içeren özel bir Zygote'tur.
Zygote'un gerçekleştirdiği görevler şunlardır:
init daemon, Android OS başlatılırken Zygote sürecini oluşturur. Bazı çift mimarili sistemlerde iki Zygote işlemi (64 bit ve 32 bit) oluşturulur. Bu sayfa yalnızca tek mimarili sistemleri kapsar.
Zygote, uzmanlaşmamış uygulama işlemleri (USAP) adlı işlemleri hemen oluşturabilir veya uygulamaların ihtiyaç duyduğu işlemleri oluşturmayı bekleyebilir. İlk seçenek, bir sistem özelliği veya Android Debug Bridge komutu aracılığıyla etkinleştirilmelidir. Zygote'u, işlemleri hemen oluşturacak şekilde yapılandırma hakkında daha fazla bilgi için Uzmanlaşmamış uygulama işlemi havuzunu etkinleştirme başlıklı makaleyi inceleyin.
Cihazınızda USAP havuzu etkinse:
- Sistem sunucusu, havuzdaki kullanılabilir bir USAP'ye bağlanmak için Unix alan yuvası kullanır. Sistem sunucusu, işlemin kimliğini (PID), grup grubunu ve diğer bilgilerini değiştirerek USAP'nin uygulama kullanımı için önceden yapılandırılmasını ister.
- USAP ön yapılandırma işlemini tamamladığında sistem sunucusuna PID ile yanıt verir.
- Bir uygulama bu USAP'lerden birini kullandığında USAP artık havuzun bir parçası olmaz. Havuzda bir veya daha az USAP olduğunda Zygote, havuzu yeni USAP'lerle doldurur.
Zygote'unuz tembel değerlendirme kullanarak işlemler oluşturuyorsa:
- Sistem sunucusu, bir uygulamanın işleme ihtiyacı olduğuyla ilgili bir komut alır.
- Sistem sunucusu, uygun Zygote'a komut göndermek için Unix alan soketi kullanır.
- Zygote, işlemi çatallayarak PID, cgroup ve diğer bilgileri değiştirir.
- İşlem tamamlandığında PID, Zygote'a geri gönderilir. Zygote da PID'yi sistem sunucusuna geri gönderir.
USAP havuzunu etkinleştirme
USAP havuzunun kullanımını etkinleştirmek için aşağıdakilerden birini yapın:
/build/make/target/product/runtime_libart.mk
'dedalvik.vm.usap_pool_enabled
sistem özelliğinitrue
olarak ayarlayın.Aşağıdaki komutu çalıştırın:
adb shell am broadcast -a \"com.google.android.gms.phenotype.FLAG_OVERRIDE\" --es package \"com.google.android.platform.runtime_native\" --es user \"\*\" --esa flags \"usap_pool_enabled\" --esa values \"true\" --esa types \"string\" com.google.android.gms
Bu özellik etkinleştirildiğinde her Zygote, uygulama başlatma sürecinin uygulamaya bağlı olmayan bölümlerini gerçekleştiren çatallanmış işlemlerden oluşan bir havuz bulundurur.
Zygote sorunlarını giderme
Bu bölümde, Zygote ile ilgili sorunların çözümleri yer almaktadır.
Zygote çöküyor
Cihazınız düzgün şekilde yeniden başlatılmıyorsa ve günlükleriniz veya kilitlenme raporlarınızda Zygote ile ilgili sorunlar gösteriliyorsa bunun nedeni, yakın zamanda initd veya sistem sunucusunun kilitlenmesine neden olan bir değişiklik yapmış olmanızdır. Kodunuzu düzelterek sorunu çözebilirsiniz.
SELinux retleri veya G/Ç hataları
Zygote, işlem sınırları boyunca dosya tanımlayıcısı temizliği konusunda titizdir. Dosya tanımlayıcıları çatallanma sırasında mevcutsa ancak izin verilenler listesinde değilse, yeni açılan dosyalara erişmek için önbelleğe alınmış dosya tanımlayıcılarının yanlışlıkla kullanılmasını önlemek amacıyla /dev/null
için dup
sistem çağrısı kullanırız.
Zygote'a kaynak yüklemeyi denemeyi içeren çerçeve değişiklikleri yapıyorsanız ve SELinux reddetme veya IO hataları alıyorsanız:
Adlandırılmamış dosya tanımlayıcıları için
Restat
çağrıldığında dosya tanımlayıcılarınıfds_to_ignore
vektörüne ekleyin.Adlandırılmış dosya tanımlayıcıları için:
WORKING_DIRECTORY/frameworks/base/core/jni/fd_utils.cpp
öğesini düzenleyin.- Açık dosyaların yolunu izin verilenler listesine ekleyin.