2012-05-23 29 views
9

Mục tiêu của tôi là tạo phiên bản WebView đã sửa đổi (gọi nó là WebViewCustom) trong Android để sử dụng cá nhân trong ứng dụng của tôi. WebView là WebKit dựa trên vì vậy tôi cần phải biên dịch nó trong C bằng NDK. Tôi không quan tâm đến việc tham gia dự án Android nguồn mở bây giờ, vì vậy nhu cầu của tôi chỉ là có thể biên dịch nguồn C của WebView gốc và sử dụng nó như một điều khiển tùy chỉnh trong ứng dụng Android của tôi (cả SDK và NDK là môi trường có thể có) cho ứng dụng). Tôi nghĩ rằng có thể không có tất cả những thứ GIT WebKit mà tôi không quan tâm, nhưng tôi không phải là chuyên gia về các dự án Android và WebKit. Có thể chỉnh sửa và biên dịch mã WebView và đặt nó trong ứng dụng của tôi như một điều khiển mới không? Bạn có thể chỉ cho tôi các bước chính của tác vụ này không?NDK của Android: biên dịch WebView tùy chỉnh từ nguồn

+3

Bạn có quản lý để làm việc này không? Tôi cũng rất thú vị trong cách tiếp cận này. –

Trả lời

7

Điều này chắc chắn có thể xảy ra. Khó khăn chính trong việc xây dựng lại android.webkit từ nguồn nằm trong việc thiếu một môi trường xây dựng chính xác. Nó không bao giờ có ý định được xây dựng bên ngoài nền tảng đích, nhưng một vài hacks đơn giản xung quanh các nguồn làm cho nó khá dễ thực hiện.

Trước hết, toàn bộ doanh nghiệp gói android.webkit phải được đổi tên thành các lý do rõ ràng, vì lớp android.webkit.WebView đã có sẵn trong thời gian chạy. Sử dụng sed trên tất cả các cây frameworks/base/core/java/android/webkit chẳng hạn. Về cơ bản, bạn phải lấy cây nguồn đầy đủ, khởi tạo môi trường xây dựng (Thêm thông tin tại đây http://source.android.com/source/initializing.html), make framework để tạo môi trường thời gian chạy nội bộ sẵn có, tạo nền tảng phát triển mới, thay thế tất cả các lớp từ framework.jar (sau khi xây dựng nó) ở out/target/common/obj/JAVA_LIBRARIES/framework_intermediaries/classes.jar) vào android.jar nền tảng, xây dựng gói webkit của riêng bạn dựa trên nền tảng mới này có chứa nội bộ.

Check-out https://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-1-introduction/ để biết thêm thông tin về việc một thời gian chạy nội bộ có sẵn cho các mục đích phát triển.

Bạn cũng sẽ cần core_intermediaries, bouncycastle_intermediaries và những người khác để biên dịch webkit, đây là tất cả sẵn khi make framework được gọi, nhìn vào lỗi khi xây dựng gói webkit của bạn và grep out/target/common/obj/JAVA_LIBRARIES/ để tìm ra những lớp này chứa các biểu tượng.

Đó không phải là tất cả, tuy nhiên, gói sử dụng libwebcore.so hiển thị các phương pháp gốc cho gói android.webkit; điều này sẽ cần phải có tất cả các phương pháp ràng buộc bản đăng ký tên gói mới của bạn (trong external/webkit/WebKit/android/jni) và được biên dịch lại mà không prelinking (make libwebcore) và đóng gói với ứng dụng của bạn như một thư viện bản xứ.

Sau khi mọi thứ được thỏa mãn, bạn sẽ sử dụng lớp học WebView của riêng mình từ gói của riêng bạn thay vì android.webkit. Nếu bạn dự định thay thế hoàn toàn android.webview - bạn sẽ phải biên dịch lại framework.jar và thay thế nó bên trong system/framework/ (yêu cầu đặc quyền root).

+3

Tác phẩm này có phù hợp với mọi người không? –

+0

Thông tin sai lệch ngay bây giờ. Bạn không phải biên dịch một framework.jar trong/system /. Như tôi thấy Dolphin Browser sử dụng WebView tùy chỉnh của nó dựa trên Android nhưng họ không chạm vào hệ thống. – Lazy

+0

@Lazy Tôi không nói bạn phải biên dịch framework.jar để sử dụng WebView tùy chỉnh, bạn chỉ phải thực hiện nếu bạn dự định thay thế WebView mặc định (cần phân phối gốc hoặc tùy chỉnh). – soulseekah

Các vấn đề liên quan