Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android从源代码编译webkit并在应用程序中使用它_Android - Fatal编程技术网

Android从源代码编译webkit并在应用程序中使用它

Android从源代码编译webkit并在应用程序中使用它,android,Android,我构建自己的Android webkit的主要动机是尽量减少不同版本Android上webkit的不同视觉呈现的不一致性 到目前为止,我已经尝试: 下载了android 2.2的源代码,使用(make framework)生成framework.jar,并在eclipse项目中用它替换android SDK中的android.jar 将(external/webkit/webkit/android/jni)中注册的所有本机方法的包名从android.webkit更改为我的eclipse项目(c

我构建自己的Android webkit的主要动机是尽量减少不同版本Android上webkit的不同视觉呈现的不一致性

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

  • 下载了android 2.2的源代码,使用(make framework)生成framework.jar,并在eclipse项目中用它替换android SDK中的android.jar
  • 将(external/webkit/webkit/android/jni)中注册的所有本机方法的包名从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)
04-18 10:39:23.561:W/dalvikvm(8214):未找到本机Lcom/tester/webkit/JWebCoreJavaBridge;的实现;。国家建筑商
()V
04-18 10:39:23.561:W/dalvikvm(8214):threadid=14:线程以未捕获异常退出(组=0x2b4d61f8)
04-18 10:39:23.561:E/AndroidRuntime(8214):致命异常:WebViewCoreThread
04-18 10:39:23.561:E/AndroidRuntime(8214):java.lang.UnsatifiedLink错误:nativeConstructor
04-18 10:39:23.561:E/AndroidRuntime(8214):位于com.tester.webkit.JWebCoreJavaBridge.nativeConstructor(本机方法)
04-18 10:39:23.561:E/AndroidRuntime(8214):位于com.tester.webkit.JWebCoreJavaBridge.(JWebCoreJavaBridge.java:66)
04-18 10:39:23.561:E/AndroidRuntime(8214):位于com.tester.webkit.BrowserFrame.(BrowserFrame.java:237)
04-18 10:39:23.561:E/AndroidRuntime(8214):在com.tester.webkit.WebViewCore.initialize(WebViewCore.java:236)
04-18 10:39:23.561:E/AndroidRuntime(8214):在com.tester.webkit.WebViewCore.access$1(WebViewCore.java:230)
04-18 10:39:23.561:E/AndroidRuntime(8214):在com.tester.webkit.WebViewCore$WebCoreThread$1.handleMessage
(WebViewCore.java:705)
04-18 10:39:23.561:E/AndroidRuntime(8214):在android.os.Handler.dispatchMessage(Handler.java:99)上
04-18 10:39:23.561:E/AndroidRuntime(8214):在android.os.Looper.loop(Looper.java:137)
04-18 10:39:23.561:E/AndroidRuntime(8214):在com.tester.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:748)
04-18 10:39:23.561:E/AndroidRuntime(8214):在java.lang.Thread.run(Thread.java:856)处
我完全走错方向了吗?有没有更好的方法来减少不同版本android上webkit的不同视觉效果的渲染不一致性

到目前为止,我已经尝试过:下载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,这对我的工作有帮助吗problem@BillyLau:否,因为
CordovaWebView
是标准的
WebView
,只是扩展了与运行Cordova/PhoneGap应用程序相关的其他行为。是否可以使用NDK构建新版本的webkit并将其移植到android,然后我用java编写自己的webview类并使用jni进行接口?我注意到谷歌已经建立了一个WebKit Chromium端口,但它只支持android版本4.0或更高版本。@BillyLau:可以想象,是的。我估计这方面的工作水平大约为20年,假设这些开发人员中有相当比例的人拥有现有的NDK和/或WebKit嵌入经验。我希望您有一个庞大的开发团队。请参阅以下帖子: