Android NDK: custom WebView compiling from source
Moim celem jest stworzenie zmodyfikowanej wersji WebView (nazwijmy ją WebViewCustom) w Androidzie do osobistego użytku w mojej aplikacji. WebView jest oparty na WebKit, więc muszę skompilować go w C za pomocą NDK. Nie jestem zainteresowany udziałem w projekcie open-source Android teraz, więc moja potrzeba jest po prostu być w stanie skompilować oryginalne źródło C WebView i używać go jako niestandardowej kontroli w mojej aplikacji na Androida (zarówno SDK, jak i NDK są możliwymi środowiskami dla aplikacji). Myślę, że tak. możliwe bez tych wszystkich rzeczy GIT WebKit mnie nie interesuje, ale nie jestem ekspertem od projektów Android i WebKit. Czy można po prostu edytować i kompilować Kod WebView i umieścić go w mojej aplikacji jako nową kontrolę? Czy możesz mi pokazać główne kroki tego zadania?
1 answers
Jest to z pewnością możliwe. Główną trudnością w odbudowie android.webkit
ze źródła jest brak poprawnego środowiska budowania. Nigdy nie zamierzano go budować poza docelową platformą, ale kilka prostych hacków wokół źródeł sprawia, że jest to dość łatwe do wykonania.
Po pierwsze, cały pakiet android.webkit
musi zostać przemianowany z oczywistych powodów, ponieważ klasa android.webkit.WebView
byłaby już dostępna podczas uruchamiania. Użyj sed
na całym drzewie frameworks/base/core/java/android/webkit
dla przykład.
Zasadniczo musisz pobrać pełne drzewo źródłowe, zainicjować środowisko budowania (więcej informacji tutaj http://source.android.com/source/initializing.html), make framework
Aby udostępnić wewnętrzne środowisko uruchomieniowe, Utwórz nową platformę programistyczną, Zamień wszystkie klasy z framework.jar
(Po zbudowaniu w out/target/common/obj/JAVA_LIBRARIES/framework_intermediaries/classes.jar
) na android.jar
platformy, Zbuduj własny pakiet webkit
na tej nowej platformie, która zawiera wewnętrzne.
Będziesz również potrzebować core_intermediaries
, bouncycastle_intermediaries
i inne aby skompilować webkit
, wszystkie są dostępne po wywołaniu make framework
, spójrz na błędy podczas budowania pakietu webkit
i grep out/target/common/obj/JAVA_LIBRARIES/
, aby dowiedzieć się, które klasy zawierają symbole.
To nie wszystko, jednak pakiet używa libwebcore.so
, które wystawia natywne metody na pakiet android.webkit
; musiałoby to mieć wszystkie natywne powiązania metod zarejestrowane na nową nazwę pakietu (w external/webkit/WebKit/android/jni
) i być przekompilowane bez wstępnego linkowania (make libwebcore
) i spakowane z aplikacją jako natywna biblioteka.
Gdy wszystko będzie spełnione, użyjesz własnej klasy WebView
z własnego pakietu zamiast android.webkit
. Jeśli zamierzasz całkowicie zastąpić android.webview
- będziesz musiał przekompilować framework.jar
i zastąpić it inside system/framework/
(wymagane uprawnienia roota).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-26 20:53:01