Android-sovelluksen arkkitehtuuri
Android-sovelluksen toteutus on jaettu useisiin komponentteihin:
- jaettu Android/OpenHarmony-toteutus
servoshell:lle (ports/servoshell/egl) - Android-spesifinen
servoshell-integraatio (ports/servoshell/egl/android.rs) - pääaktiviteetti (
support/android/apk/servoapp/src/main/java/org/servoshell) - ServoView-komponentti (
support/android/apk/servoview/src/main/java/org/servo/servoview)- Android SurfaceView (
ServoView.java) - Servo-moottorin wrapper (
Servo.java) - JNI servoshell-integraatio (
JNIServo.java)
- Android SurfaceView (
Ohjauskulku
Upottaja -> Servo
Sovelluksen sisällä alkavat tapahtumat käynnistyvät joko natiivin sovellus-UI:n toimesta (esim. URL:n lataus) tai osana ServoView-komponenttia (esim. kosketussyöte). Kaikki natiivi sovellus-UI määritellään pääaktiviteetissa ja käyttää ServoView-komponentin julkista API:a vuorovaikutukseen taustalla olevan Servo-instanssin kanssa.
ServoView on vastuussa koordinoinnista kahden säieen välillä — GL-säie, joka ajaa varsinaista Servo-instanssia, ja UI-säie. Se on myös vastuussa syöte-tapahtumien välittämisestä moottorille ja alustatapahtumien, kuten pinnan koon muutoksen, käsittelystä.
Servo -> Upottaja
Moottorin sisällä alkavat tapahtumat täytyy saada upotussovelluksen eri kerroksiin.
Alin taso on Servo-moottorin wrapper, joka toteuttaa JNIServo.Callbacks-rajapinnan.
Nämä callbackit mahdollistavat moottorin wrapperin käynnistää callbackit UI- ja GL-säieillä tarvittavan toiminnon mukaan.
UI-säieellä tapahtuvat toiminnot sisältävät kehotteen näyttämisen ja näppäimistön käynnistämisen, kun taas GL-säie-toiminnot sisältävät Servo-tapahtumasilmukan pyörittämisen ja GL-renderöintitoiminnot.
Servo-komponentti altistaa Client-rajapinnan UI-säie-toiminnoille, mahdollistaen viestinnän upotussovelluksen ylimpien kerrosten kanssa.
JNI-integraatio
Jokainen JNIServo-luokan native-jäsen on toteutettu android.rs-tiedostossa #[unsafe(no_mangle)]-funktiona, jolla on vastaava nimi.
jni-rs-craten dokumentaatio sisältää lisätietoa tästä integraatiosta.