2012-05-23 18 views
9

से संकलित कस्टम वेब व्यू मेरा लक्ष्य मेरे एप्लिकेशन में मेरे व्यक्तिगत उपयोग के लिए एंड्रॉइड में वेबव्यू (इसे वेबव्यू कस्टम) पर एक संशोधित संस्करण बनाना है। वेबव्यू वेबकिट आधारित है इसलिए मुझे इसे एनडीके के माध्यम से सी में संकलित करने की आवश्यकता है। मुझे अब ओपन-सोर्स एंड्रॉइड प्रोजेक्ट में भाग लेने में दिलचस्पी नहीं है, इसलिए मेरी ज़रूरत सिर्फ वेब व्यू के मूल सी स्रोत को संकलित करने में सक्षम है और इसे अपने एंड्रॉइड एप्लिकेशन में कस्टमाइज्ड कंट्रोल के रूप में उपयोग करने में सक्षम है (एसडीके और एनडीके दोनों संभावित वातावरण हैं आवेदन के लिए)। मुझे लगता है कि जीआईटी वेबकिट की सभी चीजों के बिना यह संभव नहीं है, लेकिन मुझे एंड्रॉइड और वेबकिट परियोजनाओं का विशेषज्ञ नहीं है। क्या वेबव्यू कोड को संपादित और संकलित करना संभव है और इसे अपने एप्लिकेशन में नए नियंत्रण के रूप में रखना संभव है? क्या आप मुझे इस कार्य का मुख्य कदम दिखा सकते हैं?एंड्रॉइड एनडीके: स्रोत

+3

क्या आप इस काम को पाने में कामयाब रहे? मैं इस दृष्टिकोण में भी दिलचस्प हूं। –

उत्तर

7

यह निश्चित रूप से संभव है। स्रोत से android.webkit पुनर्निर्माण में मुख्य कठिनाई एक सही निर्माण पर्यावरण की कमी में निहित है। इसे लक्षित प्लेटफ़ॉर्म के बाहर कभी भी बनाया जाने का इरादा नहीं था, लेकिन स्रोतों के आस-पास कुछ सरल हैक इसे पूरा करने में काफी आसान बनाते हैं।

सबसे पहले, पूरे android.webkit पैकेज व्यवसाय को स्पष्ट कारणों से बदला जाना चाहिए, क्योंकि android.webkit.WebView कक्षा पहले ही रनटाइम के दौरान उपलब्ध होगी। उदाहरण के लिए सभी frameworks/base/core/java/android/webkit पेड़ पर sed का उपयोग करें।

मूल रूप से आप पूर्ण स्रोत पेड़ हड़पने के लिए, (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/ देखें।

आपने जिन webkit संकलित करने के core_intermediaries, bouncycastle_intermediaries और दूसरों की आवश्यकता होगी, इन सभी उपलब्ध जब make framework शुरू हो जाती है कर रहे हैं, त्रुटियों को देखने जब अपने webkit पैकेज निर्माण और out/target/common/obj/JAVA_LIBRARIES/ grep यह पता लगाने की जो कक्षाओं में प्रतीक हो।

यह सब कुछ नहीं है, हालांकि, पैकेज libwebcore.so का उपयोग करता है जो android.webkit पैकेज में देशी विधियों का खुलासा करता है; इसके लिए आपके नए पैकेज नाम (external/webkit/WebKit/android/jni में) में पंजीकृत सभी मूल विधि बाइंडिंग होनी चाहिए और को (make libwebcore) को पूर्व-लिंक किए बिना पुनः संयोजित किया जाना चाहिए और मूल एप्लिकेशन के रूप में आपके एप्लिकेशन के साथ पैक किया जाना चाहिए।

सब कुछ संतुष्ट होने के बाद, आप android.webkit एक के बजाय अपने स्वयं के पैकेज से अपने WebView कक्षा का उपयोग करेंगे। यदि आप android.webview को पूरी तरह से प्रतिस्थापित करना चाहते हैं - तो आपको framework.jar को दोबारा बनाना होगा और इसे system/framework/ (आवश्यक रूट विशेषाधिकार) के अंदर प्रतिस्थापित करना होगा।

+3

क्या यह आप में से किसी के लिए काम करता है? –

+0

अब के लिए झूठी जानकारी। आपको/system/में एक framework.jar संकलित करने की आवश्यकता नहीं है। जैसा कि मैं एंड्रॉइड के आधार पर अपने कस्टम वेबव्यू का उपयोग करके डॉल्फिन ब्राउज़र देखता हूं लेकिन वे सिस्टम को स्पर्श नहीं करते हैं। – Lazy

+0

@Lazy मैंने नहीं कहा था कि कस्टम वेबव्यू का उपयोग करने के लिए आपको framework.jar संकलित करना था, आपको केवल डिफ़ॉल्ट वेबव्यू (जड़ या कस्टम वितरण की आवश्यकता है) को प्रतिस्थापित करने का इरादा है। – soulseekah

संबंधित मुद्दे