10

私の目標は、アプリケーションで個人的に使用するために、AndroidでWebViewの変更バージョン(WebViewCustomと呼びます)を作成することです。WebViewはWebKitベースなので、NDKを使用してCでコンパイルする必要があります。今はオープンソースのAndroidプロジェクトに参加することに興味がないので、WebViewの元のCソースをコンパイルして、Androidアプリケーションでカスタマイズされたコントロールとして使用できるようにする必要があります(SDKとNDKの両方が可能な環境です)アプリケーションの場合)。私が興味のないGITWebKitのものがなくても可能だと思いますが、私はAndroidおよびWebKitプロジェクトの専門家ではありません。WebViewコードを編集してコンパイルし、それを新しいコントロールとしてアプリケーションに配置することは可能ですか?このタスクの主な手順を教えていただけますか?

4

1 に答える 1

8

これは確かに可能です。ソースから再構築する際の主な問題android.webkitは、正しいビルド環境がないことです。ターゲットプラットフォームの外部で構築することを意図したものではありませんでしたが、ソースの周りにいくつかの簡単なハックを行うことで、非常に簡単に実行できます。

まず、実行時にクラスがすでに使用可能になっているandroid.webkitため、明らかな理由でパッケージビジネス全体の名前を変更する必要があります。たとえば、すべてのツリーでandroid.webkit.WebView使用します。sedframeworks/base/core/java/android/webkit

基本的に、完全なソースツリーを取得し、ビルド環境を初期化し(詳細については、 http://source.android.com/source/initializing.htmlを参照)、make framework内部ランタイム環境を利用可能にし、新しい開発プラットフォームを作成し、置き換える必要があります。プラットフォームの(ビルドframework.jar後のout/target/common/obj/JAVA_LIBRARIES/framework_intermediaries/classes.jar)すべてのクラスは、内部を含むこの新しいプラットフォームに対してandroid.jar独自のパッケージをビルドします。webkit

開発目的で内部ランタイムを利用できるようにする方法の詳細については、https://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-1-introduction/を確認してください。

また、コンパイルするには、などが必要core_intermediariesになります。これらはすべて、が呼び出されたときに使用可能です。パッケージをビルドするときにエラーを確認し、grepを実行して、どのクラスにシンボルが含まれているかを確認してください。bouncycastle_intermediarieswebkitmake frameworkwebkitout/target/common/obj/JAVA_LIBRARIES/

それだけではありませんが、パッケージはlibwebcore.soネイティブメソッドをandroid.webkitパッケージに公開するために使用します。これには、すべてのネイティブメソッドバインディングを新しいパッケージ名(in)に登録し、事前リンク( )せずexternal/webkit/WebKit/android/jniに再コンパイルして、アプリケーションとともにネイティブライブラリとしてパッケージ化する必要があります。make libwebcore

すべてが満たされたら、WebViewパッケージの代わりに独自のパッケージから独自のクラスを使用しますandroid.webkit。完全に置き換える場合android.webviewは、を再コンパイルしframework.jarて内部で置き換える必要がありますsystem/framework/(root権限が必要です)。

于 2012-07-26T19:56:43.390 に答える