Proszę wybaczyć długość tego pytania. Muszę to wszystko wyjaśnić, aby pomóc innym i uniknąć pomocnych autorów, którzy udzieliliby odpowiedzi bez pytania.
Moje wymaganie w jednym wierszu: „aby telefon z Androidem mógł poprawnie wyświetlać znaki tamilskie”.
Opracowanie: tamilski, jak każdy inny język indyjski, ma złożony system renderowania znaków. W przeciwieństwie do angielskiego lub innego skryptu łacińskiego ma glif (to, co widać na ekranie) złożony z więcej niż jednego znaku. Android nie ma możliwości renderowania tak złożonych skryptów (z wyjątkami). Moim celem jest wiedzieć, jak mogę zapewnić taką możliwość telefonowi lub tabletowi z Androidem.
Małe tło, które zebrałem do tej pory: Aby wyświetlić glif na ekranie, Android najpierw potrzebuje odpowiedniego pliku czcionek. Urządzenie z Androidem ma folder / system / czcionki, który ma kilka z nich. Najciekawszym plikiem w tym folderze jest DroidSansFallback.ttf. Jak sama nazwa wskazuje, kiedy system Android nie znajdzie znaku w czcionkach systemowych (może to być DroidSans.ttf lub DroidSans-Bold.ttf itp.), Wraca do wyszukiwania w DroidSansFallback.ttf.
Po zastąpieniu odpowiedniego pliku czcionek z komputera (Latha.ttf lub Lohit-Tamil.ttf - są to czcionki dla Tamil), a DroidSansFallback.ttf umożliwi wyświetlanie znaków tamilskich w urządzeniu. Wymiana nie jest tak łatwa i polega na zrootowaniu urządzenia i zamontowaniu systemu jako zapisywalnego.
Pomimo tych problemów, nawet jeśli DroidSansFallback.ttf zostanie zastąpiony, wyświetlane tamilskie znaki nie są poprawnie renderowane. Tamilski znak „தி” jest połączeniem dwóch znaków i zamiast być wyświetlany jako „தி”, będzie wyświetlany jako „த ி” bez spacji pomiędzy nimi. Chociaż wystarczy to do czytania krótkich wiadomości, nie można go używać do czytania książek itp.
Od Androida 4.0 na oddziałach, tamilski i kilka innych języków jest obsługiwanych przez przeglądarkę, jak wspomniano w przeglądzie API Androida 4.x, jak pokazano poniżej.
Support for Indic fonts (Devanagari, Bengali, and Tamil, including the complex
character support needed for combining glyphs) in WebView and the built-in Browser
Zwracane słowa to „w WebView i wbudowanej przeglądarce”, co oznacza, że znaki tamilskie będą doskonale renderowane, jeśli będą renderowane jako treść HTML i nie będą renderowane w inny sposób. Opera i kilka innych przeglądarek zrobiły to jeszcze przed Androidem 4.0, zastępując obraz zamiast postaci.
Zauważyłem, że na kilku urządzeniach kierowanych na rynek indyjski (np. LG Optimus One, większość telefonów i tabletów Samsung) jest w stanie poprawnie wyświetlać Tamil zarówno w przeglądarce, a nawet w miejscach poza przeglądarką, takich jak kontakty, wiadomości tekstowe, nazwy plików itp. Ku mojemu zaskoczeniu robią to nawet w systemie Android 2.3 i nowszych. Zauważyłem również, że ten sam model kierowany na kraj spoza Indii, w którym działa ta sama wersja Androida, nie obsługuje wyświetlania znaków w języku tamilskim.
To skłoniło mnie do dalszego zbadania i doszedłem do wniosku, że Android (podobnie jak inny system operacyjny oparty na Linuksie) zależy od silnika renderowania czcionek, aby wyświetlał tak złożone znaki. Dwa silniki, które spotkałem, to Skia i Harfbuzz. Zauważyłem, że LG używa skia, a Samsung używa bibliotek Harfbuzz w swoich urządzeniach, aby wprowadzić tę możliwość.
Natknąłem się na wiele stron internetowych sugerujących zastąpienie tych bibliotek i czcionek. Nie działało i powoduje zamarzanie. Na szczęście utworzyłem kopię zapasową przy użyciu clockworkmod i dlatego przywróciłem swój telefon.
Chociaż wyjaśniłem to w języku tamilskim, dotyczy to większości języków indyjskich.
Nadchodzi moje pytanie (jeśli nadal czytasz;)) Teraz jestem pewien, że plik TTF powinien być obecny w celu zapewnienia znaków, a odpowiednie biblioteki (libskia.so lub libharfbuzz.so) są wymagane do poprawnego renderowania. Czy ktoś wie, jak ci producenci są w stanie zapewnić taką możliwość? Jestem nawet gotowy do zbudowania własnej pamięci ROM z AOSP (Android Open Source Project).