Zygote işlemleri 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 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:

  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) oluşturulur. 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ü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:

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