2012-05-23 9 views
9

Mi objetivo es crear una versión modificada de WebView (llámalo WebViewCustom) en Android para mi uso personal en mi aplicación. WebView está basado en WebKit, así que necesito compilarlo en C por medio de NDK. Ahora no estoy interesado en participar en el proyecto de código abierto de Android, así que mi única necesidad es poder compilar la fuente C original de WebView y usarla como control personalizado en mi aplicación Android (tanto el SDK como el NDK son posibles entornos para la aplicación). Creo que es posible sin todas las cosas de GIT WebKit que no estoy interesado, pero no soy un experto en los proyectos de Android y WebKit. ¿Es posible editar y compilar el código WebView y ponerlo en mi aplicación como un nuevo control? ¿Me puede mostrar los pasos principales de esta tarea?Android NDK: compilación WebView personalizada desde la fuente

+3

¿Logró que esto funcionara? También soy interesante en este enfoque. –

Respuesta

7

Esto es ciertamente posible. La principal dificultad en la reconstrucción de android.webkit desde la fuente reside en la falta de un entorno de compilación correcto. Nunca fue pensado para ser construido fuera de la plataforma objetivo, pero un par de ataques simples alrededor de las fuentes lo hacen bastante fácil de lograr.

En primer lugar, todo el negocio de paquetes android.webkit tiene que renombrarse por razones obvias, ya que una clase android.webkit.WebView ya estaría disponible durante el tiempo de ejecución. Use sed en todos los árboles frameworks/base/core/java/android/webkit por ejemplo.

Básicamente, usted tiene que agarrar el árbol de código fuente completo, inicializar un entorno de construcción (Más información aquí http://source.android.com/source/initializing.html), make framework para que el entorno de tiempo de ejecución interna disponible, crear una nueva plataforma de desarrollo, sustituir todas las clases de framework.jar (después de la construcción es en out/target/common/obj/JAVA_LIBRARIES/framework_intermediaries/classes.jar) en android.jar de la plataforma, construya su propio paquete webkit contra esta nueva plataforma que contiene las partes internas.

Consulte https://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-1-introduction/ para obtener más información sobre cómo obtener un tiempo de ejecución interno disponible para fines de desarrollo.

También necesitará core_intermediaries, bouncycastle_intermediaries y otros con el fin de recopilar webkit, estos son todos los disponibles cuando make framework se invoca, mirar los errores en la construcción de su paquete webkit y grep la out/target/common/obj/JAVA_LIBRARIES/ de averiguar qué clases contiene los símbolos.

Eso no es todo, sin embargo, el paquete usa libwebcore.so que expone los métodos nativos al paquete android.webkit; esto debería tener todos los enlaces de métodos nativos registrados en su nuevo nombre de paquete (en external/webkit/WebKit/android/jni) y recompilarse sin vincular previamente (make libwebcore) y empaquetarse con su aplicación como una biblioteca nativa.

Después de que todo esté satisfecho, entonces usaría su propia clase WebView de su propio paquete en lugar del android.webkit. Si tiene la intención de reemplazar por completo el android.webview, deberá recompilar un framework.jar y reemplazarlo dentro de system/framework/ (se requieren privilegios de administrador).

+3

¿Funcionó esto para ustedes? –

+0

Información falsa por ahora. No tiene que compilar un framework.jar en/system /. Como veo Dolphin Browser usando su WebView personalizado basado en Android, pero no tocan el sistema. – Lazy

+0

@Lazy No dije que tuviera que compilar framework.jar para usar un WebView personalizado, solo tiene que hacerlo si tiene la intención de reemplazar el WebView predeterminado (necesita una distribución raíz o personalizada). – soulseekah