【问题标题】:Android compile webkit from source and use it in an applicationAndroid 从源代码编译 webkit 并在应用程序中使用它
【发布时间】:2013-01-07 22:08:58
【问题描述】:

我构建自己的 Android webkit 的主要动机是尽量减少不同版本的 android 上不同视觉 webkit 的渲染不一致。

到目前为止我已经尝试过:

  • 下载了android 2.2的源代码并使用(make framework)制作framework.jar并用它来替换eclipse项目中android SDK中的android.jar
  • 将(external/webkit/WebKit/android/jni)中注册的所有native方法的包名由android.webkit改为我的eclipse项目(com/mycustomwebkit)的包名,然后使用(make libwebcore)创建图书馆 libwebcore.so
  • 将整个 webkit java 类从 android 源(在 external/webkit/WebKit/android 中)复制到我的 eclipse 项目中,并使用它来创建我自己的 webview。
  • 在 Eclipse 的 lib/armeabi 中包含 libwebcore.so
  • 编译创建apk文件

但应用程序在设备上启动时崩溃并出现以下错误:

04-18 10:39:23.561: W/dalvikvm(8214): No implementation found for native Lcom/tester/webkit/JWebCoreJavaBridge;.nativeConstructor 

()V
04-18 10:39:23.561: W/dalvikvm(8214): threadid=14: thread exiting with uncaught exception (group=0x2b4d61f8)
04-18 10:39:23.561: E/AndroidRuntime(8214): FATAL EXCEPTION: WebViewCoreThread
04-18 10:39:23.561: E/AndroidRuntime(8214): java.lang.UnsatisfiedLinkError: nativeConstructor
04-18 10:39:23.561: E/AndroidRuntime(8214):     at com.tester.webkit.JWebCoreJavaBridge.nativeConstructor(Native Method)
04-18 10:39:23.561: E/AndroidRuntime(8214):     at com.tester.webkit.JWebCoreJavaBridge.<init>(JWebCoreJavaBridge.java:66)
04-18 10:39:23.561: E/AndroidRuntime(8214):     at com.tester.webkit.BrowserFrame.<init>(BrowserFrame.java:237)
04-18 10:39:23.561: E/AndroidRuntime(8214):     at com.tester.webkit.WebViewCore.initialize(WebViewCore.java:236)
04-18 10:39:23.561: E/AndroidRuntime(8214):     at com.tester.webkit.WebViewCore.access$1(WebViewCore.java:230)
04-18 10:39:23.561: E/AndroidRuntime(8214):     at com.tester.webkit.WebViewCore$WebCoreThread$1.handleMessage

(WebViewCore.java:705)
04-18 10:39:23.561: E/AndroidRuntime(8214):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-18 10:39:23.561: E/AndroidRuntime(8214):     at android.os.Looper.loop(Looper.java:137)
04-18 10:39:23.561: E/AndroidRuntime(8214):     at com.tester.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:748)
04-18 10:39:23.561: E/AndroidRuntime(8214):     at java.lang.Thread.run(Thread.java:856)

我是不是完全走错了方向?有没有更好的方法来最小化不同版本的android上不同视觉的webkit的渲染不一致?

【问题讨论】:

标签: android


【解决方案1】:

到目前为止我已经尝试过:下载android 2.2的源代码并使用(make framework)制作framework.jar并用它来替换eclipse项目中android SDK中的android.jar

那是行不通的。首先,设备上存在的类将取代您应用程序中的相同类。其次,WebKit 不是用 Java 实现的。

我是不是完全走错了方向?

是的。

有没有更好的方法来最小化不同版本的android上不同视觉的webkit的渲染不一致?

不要使用那些让你“在不同版本的 android 上呈现不同视觉的 webkit 不一致”的东西。

或者,使用具有兼容层的框架来处理您正在尝试做的任何事情,在那里他们完成了解决“在不同版本的 android 上呈现不同版本的 webkit 的不一致性”的工作。

【讨论】:

  • 如果使用cordova webview而不是android SDK中的webkit.webview,确实有助于解决我的问题
  • @BillyLau:不,因为CordovaWebView标准WebView,只是扩展了与运行Cordova/PhoneGap应用程序相关的其他行为。
  • 是否可以使用 NDK 构建新版本的 webkit 并将其移植到 android,然后我在 java 中编写自己的 webview 类并使用 jni 进行接口?我注意到 Google 已经构建了一个 WebKit Chromium Port,但它只支持 android 4.0 或更高版本。
  • @BillyLau:可以想象,是的。我估计这方面的工作量约为 20 个开发人员年,并假设这些开发人员中有合理的百分比具有现有的 NDK 和/或 WebKit 嵌入经验。我希望你们有一个庞大的开发团队。
猜你喜欢
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多