私の目標は、アプリケーションで個人的に使用するために、AndroidでWebViewの変更バージョン(WebViewCustomと呼びます)を作成することです。WebViewはWebKitベースなので、NDKを使用してCでコンパイルする必要があります。今はオープンソースのAndroidプロジェクトに参加することに興味がないので、WebViewの元のCソースをコンパイルして、Androidアプリケーションでカスタマイズされたコントロールとして使用できるようにする必要があります(SDKとNDKの両方が可能な環境です)アプリケーションの場合)。私が興味のないGITWebKitのものがなくても可能だと思いますが、私はAndroidおよびWebKitプロジェクトの専門家ではありません。WebViewコードを編集してコンパイルし、それを新しいコントロールとしてアプリケーションに配置することは可能ですか?このタスクの主な手順を教えていただけますか?
1 に答える
これは確かに可能です。ソースから再構築する際の主な問題android.webkit
は、正しいビルド環境がないことです。ターゲットプラットフォームの外部で構築することを意図したものではありませんでしたが、ソースの周りにいくつかの簡単なハックを行うことで、非常に簡単に実行できます。
まず、実行時にクラスがすでに使用可能になっているandroid.webkit
ため、明らかな理由でパッケージビジネス全体の名前を変更する必要があります。たとえば、すべてのツリーでandroid.webkit.WebView
使用します。sed
frameworks/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_intermediaries
webkit
make framework
webkit
out/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権限が必要です)。