Zygote süreçleri hakkında

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 vardır. Buna ek olarak, birincil ABI için WebView Zygote vardır. Zygote, WebView çalıştıran işlemlere özel kitaplık ve kaynaklar içeren özel bir Zygote'dir.

Zygote'un gerçekleştirdiği görevler şunlardır:

  1. 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) ortaya çıkar. Bu sayfa yalnızca tek mimarili sistemleri kapsar.

  2. 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:

      1. 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.
      2. USAP ön yapılandırma işlemini tamamladığında sistem sunucusuna PID ile yanıt verir.
      3. 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:

      1. Sistem sunucusu, bir uygulamanın işleme ihtiyacı olduğuyla ilgili bir komut alır.
      2. Sistem sunucusu, uygun Zygote'a komut göndermek için Unix alan soketi kullanır.
      3. Zygote, işlemi çatallayarak PID, cgroup ve diğer bilgileri değiştirir.
      4. İş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'de dalvik.vm.usap_pool_enabled sistem özelliğini true 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üzeltmek sorunu düzeltecektir.

SELinux retleri veya G/Ç hataları

Zygote, işlem sınırlarının ötesinde dosya tanımlayıcı hijyeni konusunda özellikle hassastır. Dosya tanımlayıcıları çatal sırasında mevcut olduğunda ancak izin verilenler listesinde olmadığında, önbelleğe alınan dosya tanımlayıcılarının yeni açılan dosyalara erişmek amacıyla yanlışlıkla kullanılmasını önlemek için /dev/null için dup sistem çağrısı kullanırız.

Zygote'a kaynak yüklemeyi de içeren çerçeve değişiklikleri yapıyor ve SELinux retleri veya IO hataları alıyorsanız:

  • Adsız 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:

    1. WORKING_DIRECTORY/frameworks/base/core/jni/fd_utils.cpp öğesini düzenleyin.
    2. Açık dosyaların yolunu izin verilenler listesine ekleyin.