वेंडर नेटिव डेवलपमेंट किट (वीएनडीके) को अलग करने के लिए, कोड बेस में कई बदलाव करने की ज़रूरत होती है सिस्टम और वेंडर, किसी वेंडर/OEM में VNDK की सुविधा चालू करने के लिए, यहां दी गई गाइड का इस्तेमाल करें कोड बेस में एक्सपोर्ट करें.
सिस्टम लाइब्रेरी बनाएं
बिल्ड सिस्टम में कई तरह के ऑब्जेक्ट होते हैं. इनमें लाइब्रेरी भी शामिल होती हैं (शेयर किया गया, स्टैटिक या हेडर) और बाइनरी.
पहला डायग्राम. सिस्टम लाइब्रेरी बनाएं.
core
लाइब्रेरी का इस्तेमाल, सिस्टम इमेज पर सिस्टम इमेज के लिए किया जाता है. येvendor
,vendor_available
, लाइब्रेरी इस्तेमाल नहीं कर सकते.vndk
याvndk-sp
लाइब्रेरी.cc_library { name: "libThatIsCore", ... }
vendor-only
(याproprietary
) लाइब्रेरी का इस्तेमाल वेंडर की इमेज.cc_library { name: "libThatIsVendorOnly", proprietary: true, # or: vendor: true, # (for things in AOSP) ... }
- वेंडर पर
vendor_available
लाइब्रेरी का इस्तेमाल, वेंडर की इमेज से किया जाता है इमेज (इसमेंcore
के डुप्लीकेट शामिल हो सकते हैं).cc_library { name: "libThatIsVendorAvailable", vendor_available: true, ... }
vndk
लाइब्रेरी का इस्तेमाल, सिस्टम इमेज पर वेंडर इमेज के लिए किया जाता है.cc_library { name: "libThatIsVndk", vendor_available: true, vndk: { enabled: true, } ... }
vndk-sp
लाइब्रेरी का इस्तेमाल वेंडर इमेज के साथ-साथ सिस्टम इमेज के लिए भी किया जाता है सीधे तौर पर नहीं.cc_library { name: "libThatIsVndkSp", vendor_available: true, vndk: { enabled: true, support_system_process: true, } ... }
llndk
लाइब्रेरी का इस्तेमाल, सिस्टम और वेंडर की इमेज, दोनों के लिए किया जाता है.cc_library { name: "libThatIsLlndk", llndk: { symbol_file: "libthatisllndk.map.txt" } ... }
जब किसी लाइब्रेरी को vendor_available:true
के तौर पर मार्क किया जाता है, तो
दो बार:
- प्लैटफ़ॉर्म के लिए एक बार (और इस तरह
/system/lib
पर इंस्टॉल किया गया) - वेंडर के लिए एक बार (और इस तरह
/vendor/lib
या VNDK APEX पर इंस्टॉल किया गया)
लिब्स के वेंडर वर्शन, -D__ANDROID_VNDK__
की मदद से बनाए गए हैं.
निजी सिस्टम के कॉम्पोनेंट, जो आने वाले वर्शन में काफ़ी बदल सकते हैं
इस फ़्लैग के साथ Android बंद कर दिया गया है. इसके अलावा, अलग-अलग लाइब्रेरी
हेडर का अलग सेट है (जैसे कि liblog
). एक खास
टारगेट के वेंडर वैरिएंट की जानकारी, Android.bp
फ़ाइल में दी जा सकती है
इसमें:
target: { vendor: { … } }
कोड बेस के लिए वीएनडीके चालू करना
कोड बेस के लिए वीएनडीके को चालू करने के लिए:
- प्रॉडक्ट की ज़रूरी शर्तों को कैलकुलेट करके, यह तय करें कि मॉडल कितना ज़रूरी है
vendor.img
औरsystem.img
पार्टिशन. BOARD_VNDK_VERSION=current
चालू करें. आप इसमें जोड़ सकते हैंBoardConfig.mk
या सीधे इससे कॉम्पोनेंट बनाएं (उदाहरण के लिए,m -j BOARD_VNDK_VERSION=current MY-LIB
).
BOARD_VNDK_VERSION=current
को चालू करने के बाद, बिल्ड सिस्टम
नीचे दी गई डिपेंडेंसी और हेडर की ज़रूरी शर्तें लागू करती है.
डिपेंडेंसी मैनेज करें
core
कॉम्पोनेंट पर निर्भर करने वाला vendor
ऑब्जेक्ट
जो vndk
में या vendor
ऑब्जेक्ट के तौर पर मौजूद नहीं है
इसका समाधान इनमें से किसी एक विकल्प का इस्तेमाल करके किया जाना चाहिए:
- डिपेंडेंसी हटाई जा सकती है.
- अगर
core
कॉम्पोनेंट का मालिकाना हकvendor
के पास है, तो यह ये काम कर सकता है:vendor_available
याvendor
के तौर पर मार्क किया जाना चाहिए. vndk
के मुख्य ऑब्जेक्ट को शामिल करने में होने वाला बदलाव Google पर अपलोड किया गया.
इसके अलावा, अगर core
कॉम्पोनेंट
vendor
कॉम्पोनेंट बनाने के लिए, vendor
कॉम्पोनेंट बनाना ज़रूरी है
किसी core
कॉम्पोनेंट में या डिपेंडेंसी होनी चाहिए
दूसरे तरीके से हटाया गया हो (उदाहरण के लिए, डिपेंडेंसी को हटाकर या
vendor
कॉम्पोनेंट में निर्भरता रखता है).
हेडर मैनेज करें
ग्लोबल हेडर डिपेंडेंसी को हटाना ज़रूरी है, ताकि बिल्ड सिस्टम को जानकारी मिल सके
-D__ANDROID_VNDK__
के साथ या उसके बिना हेडर बनाना है या नहीं.
उदाहरण के लिए, utils/StrongPointer.h
जैसे libutils हेडर
हेडर लाइब्रेरी का इस्तेमाल करके अब भी ऐक्सेस किया जा सकेगा
libutils_headers
.
कुछ हेडर (जैसे कि unistd.h
) को अब ट्रांज़िट तरीके से शामिल नहीं किया जा सकता
लेकिन स्थानीय तौर पर शामिल किया जा सकता है.
आख़िर में, private/android_filesystem_config.h
का सार्वजनिक हिस्सा
को cutils/android_filesystem_config.h
में ले जाया गया. मैनेज करने के लिए
तो इनमें से कोई एक काम करें:
- इस पर निर्भरता हटाएं
सभी को बदलकर
private/android_filesystem_config.h
getgrnam
/ के साथAID_*
मैक्रो अगर हो सके, तोgetpwnam
कॉल करें. जैसे:(uid_t)AID_WIFI
बन जाता हैgetpwnam("wifi")->pw_uid
.(gid_t)AID_SDCARD_R
बन जाता हैgetgrnam("sdcard_r")->gr_gid
.
private/android_filesystem_config.h
. - हार्ड कोड किए गए एआईएस के लिए,
cutils/android_filesystem_config.h
.