2012-05-23 20 views
9

Mein Ziel ist es, eine modifizierte Version von WebView (nennen Sie es WebViewCustom) in Android für meine persönliche Verwendung in meiner Anwendung. WebView basiert auf WebKit, daher muss ich es in C mittels NDK kompilieren. Ich bin jetzt nicht daran interessiert, am Open-Source-Android-Projekt teilzunehmen. Daher besteht mein Bedarf darin, die ursprüngliche C-Quelle von WebView zu kompilieren und sie als benutzerdefinierte Steuerung in meiner Android-Anwendung zu verwenden (sowohl SDK als auch NDK sind mögliche Umgebungen) für die Anwendung). Ich denke, dass es ohne all die GIT WebKit-Sachen möglich ist, an denen ich nicht interessiert bin, aber ich bin kein Experte für die Android- und WebKit-Projekte. Ist es möglich, den WebView-Code einfach zu bearbeiten, zu kompilieren und als neues Steuerelement in meine Anwendung zu übernehmen? Können Sie mir die wichtigsten Schritte dieser Aufgabe zeigen?Android NDK: benutzerdefinierte WebView kompilieren von Quelle

+3

Haben Sie das geschafft? Ich bin auch in diesem Ansatz interessant. –

Antwort

7

Dies ist sicherlich möglich. Die Hauptschwierigkeit bei der Wiederherstellung von android.webkit aus der Quelle liegt in dem Fehlen einer korrekten Build-Umgebung. Es war nie dazu gedacht, außerhalb der Zielplattform gebaut zu werden, aber ein paar einfache Hacks um die Quellen machen es ziemlich einfach zu erreichen.

Zuerst muss das gesamte android.webkit Paketgeschäft aus offensichtlichen Gründen umbenannt werden, da eine android.webkit.WebView Klasse bereits zur Laufzeit verfügbar sein würde. Verwenden Sie zum Beispiel sed auf allen frameworks/base/core/java/android/webkit Baum.

Grundsätzlich müssen Sie den vollständigen Quellbaum greifen, initialisieren eine Build-Umgebung (Weitere Informationen hier http://source.android.com/source/initializing.html), make framework die interne Laufzeitumgebung zur Verfügung zu stellen, erstellen Sie eine neue Entwicklungsplattform, ersetzen Sie alle Klassen von framework.jar (nach dem Bau ist es in out/target/common/obj/JAVA_LIBRARIES/framework_intermediaries/classes.jar) in android.jar der Plattform, bauen Sie Ihr eigenes webkit Paket gegen diese neue Plattform, die die Interna enthält.

Weitere Informationen zum Abrufen einer internen Laufzeit für Entwicklungszwecke finden Sie unter https://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-1-introduction/.

Sie werden auch core_intermediaries benötigen, bouncycastle_intermediaries und andere, um webkit zu kompilieren, sind diese alle zur Verfügung, wenn make framework aufgerufen wird, sucht die Fehler bei, wenn Ihr webkit Paket bauen und grep die out/target/common/obj/JAVA_LIBRARIES/, um herauszufinden, welche Klassen die Symbole enthalten.

Das ist nicht alles, aber das Paket verwendet libwebcore.so, die native Methoden zu dem android.webkit Paket verfügbar macht; Dazu müssten alle nativen Methodenbindungen für Ihren neuen Paketnamen registriert sein (in external/webkit/WebKit/android/jni) und ohne vorherige Verknüpfung (make libwebcore) neu kompiliert und mit Ihrer Anwendung als native Bibliothek verpackt werden.

Nachdem alles erfüllt ist, würden Sie dann Ihre eigene WebView Klasse aus Ihrem eigenen Paket anstelle des android.webkit verwenden. Wenn Sie beabsichtigen, android.webview vollständig zu ersetzen - müssen Sie einen framework.jar neu kompilieren und es in system/framework/ (root-Berechtigungen erforderlich) ersetzen.

+3

Hat das für jemanden von euch funktioniert? –

+0

Falsche Informationen für jetzt. Sie müssen keine framework.jar in/system/kompilieren. Wie ich Dolphin Browser mit seinem benutzerdefinierten WebView basierend auf Android sehen, aber sie nicht System berühren. – Lazy

+0

@Lazy Ich habe nicht gesagt, dass Sie framework.jar kompilieren müssen, um ein benutzerdefiniertes WebView zu verwenden, Sie müssen es nur tun, wenn Sie das Standard-WebView ersetzen wollen (benötigt root oder benutzerdefinierte Distribution). – soulseekah

Verwandte Themen