Zygote işlemleri hakkında

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 ö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 işletim sistemi başlatıldığında Zygote işlemini oluşturur. Bazı çift mimarili sistemlerde iki Zygote işlemi (64 bit ve 32 bit) oluşturulur. Bu sayfada yalnızca tek mimar sistemler ele alınmaktadır.

  2. 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. İ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 Özelleşmemiş uygulama işlemleri 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 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.
      2. USAP ön yapılandırmayı 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 kaldığında Zygote, havuza yeni USAP'ler ekler.
    • Zygote'unuz tembel değerlendirme kullanarak işlemler oluşturuyorsa:

      1. Sistem sunucusu, bir uygulamanın işleme ihtiyacı olduğuna dair bir komut alır.
      2. Sistem sunucusu, uygun Zygote'a komut göndermek için bir Unix alan soketi kullanır.
      3. Zygote, işlemi çatallandırır ve 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 iletir.

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 içinde 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 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, yakın zamanda initd'nin veya sistem sunucusunun kilitlenmesine neden olan bir değişiklik yapmış olmanızdır. Kodunuzu düzeltmek sorunu giderecektir.

SELinux reddetmeleri veya G/Ç hataları

Zygote, işlem sınırları arasında dosya tanımlayıcı hijyeni konusunda hassastır. Ç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ı kullanırız./dev/null

Kaynakları Zygote'a yüklemeyi deneme gibi ç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_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 paketini düzenleyin.
    2. Açık dosyalar için izin verilenler listesine yolu ekleyin.