Zygote, Android işletim sisteminde aynı uygulama ikili arabirimine (ABI) sahip tüm sistem ve uygulama süreçlerinin kökü olarak işlev gören bir süreçtir.
Pixel 7 ve sonraki modeller gibi modern cihazlarda 64 bit Zygote işlemi vardır. Ayrıca, birincil ABI için WebView Zygote da vardır. Bu, WebView'leri çalıştıran işlemlere özgü kitaplıklar ve kaynaklar içeren özel bir Zygote'tur.
Zygote'un gerçekleştirdiği görevler şunlardır:
init daemon, Android işletim sistemi başlatıldığında Zygote işlemini oluşturur. Bazı çift mimari sistemlerde iki Zygote işlemi (64 bit ve 32 bit) oluşturulur. Bu sayfada yalnızca tek mimarili sistemler ele alınmaktadır.
Zygote, uzmanlaşmamış uygulama işlemleri (USAP) adı verilen işlemleri hemen oluşturabilir veya uygulamaların ihtiyaç duyduğu işlemleri oluşturmak için bekleyebilir. Önceki seçenek, bir sistem özelliği veya Android hata ayıklama köprüsü komutu aracılığıyla etkinleştirilmelidir. Zygote'u işlemleri hemen oluşturacak şekilde yapılandırma hakkında daha fazla bilgi için Özelleştirilmemiş uygulama işlemleri 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 adı soketi kullanır. Sistem sunucusu, sürecin kimliğini (PID), cgroup'u ve diğer bilgileri değiştirerek USAP'nin uygulama kullanımı için önceden yapılandırılmasını ister.
- USAP ön yapılandırmayı 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 kaldığında Zygote, havuza yeni USAP'ler ekler.
Zygote'unuz tembel değerlendirme kullanarak işlemler oluşturuyorsa:
- Sistem sunucusu, bir uygulamanın işleme ihtiyacı olduğuna dair bir komut alır.
- Sistem sunucusu, uygun Zygote'a komut göndermek için bir Unix alan soketi kullanır.
- Zygote, işlemi çatallandırır ve 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_enabledsistem özelliğinitrueolarak 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 uygulamadan bağımsız kısımlarını gerçekleştiren, çatallanmış işlemlerden oluşan bir havuz tutar.
Zygote ile ilgili sorunları giderme
Bu bölümde, Zygote ile ilgili sorunların çözümleri yer almaktadır.
Zygote kilitleniyor
Cihazınız düzgün şekilde yeniden başlatılmıyorsa ve günlüklerinizde veya kilitlenme raporlarınızda Zygote ile ilgili sorunlar gösteriliyorsa bunun nedeni, initd'nin veya sistem sunucusunun kilitlenmesine neden olan yeni bir değişiklik yapmış olmanızdır. Kodunuzu düzeltmek sorunu da düzeltecektir.
SELinux reddetmeleri veya G/Ç hataları
Zygote, işlem sınırları arasında dosya tanımlayıcı hijyeni konusunda titizdir. Çatal oluşturma sırasında dosya tanımlayıcıları mevcutsa ancak izin verilenler listesinde değilse önbelleğe alınmış dosya tanımlayıcılarının yeni açılan dosyalara erişmek için yanlışlıkla kullanılmasını önlemek amacıyla dup sistem çağrısını /dev/null için kullanırız.
Kaynakları Zygote'a yüklemeyi denemeyi içeren çerçeve değişiklikleri yapıyorsanız ve SELinux reddetmeleri veya G/Ç 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_ignorevektörüne ekleyin.Adlandırılmış dosya tanımlayıcıları için:
WORKING_DIRECTORY/frameworks/base/core/jni/fd_utils.cpppaketini düzenleyin.- Açık dosyalar için izin verilenler listesine yolu ekleyin.