Android बनाने के लिए, इस पेज पर दिए गए निर्देशों का पालन करें.
बिल्ड एनवायरमेंट सेट अप करना
अपनी वर्किंग डायरेक्ट्री में जाकर, envsetup.sh
स्क्रिप्ट को सोर्स करें, ताकि बिल्ड एनवायरमेंट सेट अप किया जा सके:
source build/envsetup.sh
यह स्क्रिप्ट, कई कमांड इंपोर्ट करती है. इनकी मदद से, Android के सोर्स कोड पर काम किया जा सकता है. इसमें इस पेज पर इस्तेमाल की गई कमांड भी शामिल हैं. स्क्रिप्ट का सोर्स देखने के लिए, platform/build/envsetup.sh
पर जाएं.
पहले से मौजूद सहायता देखने के लिए, hmm
टाइप करें.
कोई टारगेट चुनें
Android बनाने से पहले, आपको एक टारगेट तय करना होगा. टारगेट से पता चलता है कि आपको किस प्लैटफ़ॉर्म के लिए ऐप्लिकेशन बनाना है. बनाए जाने वाले टारगेट की पहचान करने के लिए, lunch
कमांड का इस्तेमाल करें. इसके बाद, टारगेट को दिखाने वाली स्ट्रिंग का इस्तेमाल करें. उदाहरण के लिए:
lunch aosp_cf_x86_64_only_phone-aosp_current-userdebug
आपको टारगेट और बिल्ड एनवायरमेंट की खास जानकारी दिखेगी:
============================================
PLATFORM_VERSION_CODENAME=Baklava
PLATFORM_VERSION=Baklava
TARGET_PRODUCT=aosp_cf_x86_64_only_phone
TARGET_BUILD_VARIANT=userdebug
TARGET_ARCH=x86_64
TARGET_ARCH_VARIANT=silvermont
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.10.11-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
HOST_CROSS_OS=windows
BUILD_ID=BP1A.250305.020
OUT_DIR=out
============================================
टारगेट को दिखाने वाली स्ट्रिंग का फ़ॉर्मैट यह होता है:
lunch product_name-release_config-build_variant
इस स्ट्रिंग के कॉम्पोनेंट ये हैं:
product_name
उस प्रॉडक्ट का नाम है जिसे आपको बनाना है. जैसे,aosp_cf_x86_64_only_phone
याaosp_husky
. आपका खासproduct_name
आपके डिवाइस के हिसाब से फ़ॉर्मैट में हो सकता है. हालांकि, Google अपने डिवाइसों के लिए जिस फ़ॉर्मैट का इस्तेमाल करता है उसमें ये कॉम्पोनेंट होते हैं:aosp
का मतलब Android Open Source Platform से है.- (ज़रूरी नहीं)
cf
को तब शामिल किया जाता है, जब टारगेट को Cuttlefish एम्युलेटर में चलाना हो. - आर्किटेक्चर और हार्डवेयर (कोडनेम), जैसे कि
x86_64_only_phone
याhusky
, जो Pixel 8 Pro का कोडनेम है. Google डिवाइसों के कोडनेम की सूची देखने के लिए, डिवाइस के कोडनेम लेख पढ़ें.
release_config
को रिलीज़ कॉन्फ़िगरेशन पर सेट किया गया है. जैसे, डेवलपमेंट रिलीज़ कॉन्फ़िगरेशन कोaosp_current
कहा जाता है. रिलीज़ कॉन्फ़िगरेशन से, कुछ सुविधाओं और कोड की पहचान होती है. ये सुविधाएं और कोड, सुविधा लॉन्च करने के फ़्लैग के पीछे होते हैं. साथ ही, ये किसी बिल्ड के लिए चालू या बंद होते हैं. रिलीज़ कॉन्फ़िगरेशन के बारे में ज़्यादा जानने के लिए, फ़्लैग की गई सुविधा के लॉन्च की वैल्यू सेट करना लेख पढ़ें.स्ट्रिंग का
build_variant
हिस्सा, इस टेबल में दी गई तीन वैल्यू में से कोई एक हो सकता है:build_variant
ब्यौरा user
इस बिल्ड वैरिएंट में सुरक्षा से जुड़ा सीमित ऐक्सेस मिलता है. यह प्रोडक्शन के लिए सही है. userdebug
इस बिल्ड वैरिएंट से, डिवाइस डेवलपर को डेवलपमेंट के दौरान रिलीज़ की गई सुविधाओं की परफ़ॉर्मेंस और पावर के बारे में समझने में मदद मिलती है. userdebug
बिल्ड के साथ डेवलपमेंट करते समय, userdebug के लिए दिशा-निर्देशों का पालन करें.eng
इस बिल्ड वैरिएंट को बनाने में कम समय लगता है. अगर आपको परफ़ॉर्मेंस और पावर की परवाह नहीं है, तो यह हर दिन के डेवलपमेंट के लिए सबसे सही है.
अगर lunch
को बिना किसी तर्क के चलाया जाता है, तो सामान्य टारगेट की सूची उपलब्ध कराई जाती है.
इस पेज पर दी गई जानकारी और डिवाइस के कोडनेम में मौजूद Google के खास हार्डवेयर के कोडनेम का इस्तेमाल करके, टारगेट स्ट्रिंग के एलिमेंट को एक साथ जोड़कर अपनी टारगेट स्ट्रिंग भी बनाई जा सकती हैं.
मौजूदा टारगेट देखना
दोपहर के खाने की मौजूदा सेटिंग देखने के लिए, यह कमांड चलाएं:
$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"
कोड बनाना
टारगेट बनाने के लिए, यह कमांड चलाएं. आपके वर्कस्टेशन की खास बातों के आधार पर, पहली बार बिल्ड होने में एक घंटे से कम समय लग सकता है. हालांकि, इसमें कुछ घंटे भी लग सकते हैं. इसके बाद के बिल्ड में काफ़ी कम समय लगता है.
m
आपकी बिल्ड का आउटपुट, $OUT_DIR
में दिखता है. अलग-अलग टारगेट बनाने पर, हर टारगेट $OUT_DIR
में दिखता है.
m
कमांड, ट्री के सबसे ऊपर से बिल्ड करता है. इसलिए, सबडायरेक्ट्री में जाकर भी m
कमांड चलाया जा सकता है. अगर आपने TOP
एनवायरमेंट वैरिएबल सेट किया है, तो m
कमांड इसका इस्तेमाल करती है. अगर TOP
सेट नहीं है, तो m
कमांड, मौजूदा डायरेक्ट्री से ट्री को खोजती है और ट्री के सबसे ऊपर वाले हिस्से को ढूंढने की कोशिश करती है.
m
आर्ग्युमेंट की मदद से, m
कमांड एक साथ कई टास्क मैनेज कर सकती है.-jN
अगर आपने -j
तर्क नहीं दिया है, तो बिल्ड सिस्टम अपने-आप समानांतर टास्क की संख्या चुन लेता है. यह संख्या, आपके सिस्टम के लिए सबसे सही होती है.
m
कमांड लाइन में मॉड्यूल के नाम जोड़कर, डिवाइस की पूरी इमेज के बजाय कुछ मॉड्यूल बनाए जा सकते हैं. इसके अलावा, m
कमांड कुछ छद्म टारगेट उपलब्ध कराती है, जिन्हें लक्ष्य कहा जाता है. उदाहरण के लिए, m nothing
कुछ भी नहीं बनाता है, लेकिन बिल्ड स्ट्रक्चर को पार्स और पुष्टि करता है. मान्य लक्ष्यों की सूची देखने के लिए, m help
टाइप करें.
बिल्ड से जुड़ी गड़बड़ियों को ठीक करना (8.0 या इससे पहले का वर्शन)
अगर AOSP 8 या इससे पहले का वर्शन बनाया जा रहा है, तो Java के वर्शन में कोई समस्या आने पर m
बंद हो सकता है. उदाहरण के लिए, आपको यह मैसेज मिल सकता है:
************************************************************
You are attempting to build with the incorrect version
of java.
Your version is: WRONG_VERSION.
The correct version is: RIGHT_VERSION.
Please follow the machine setup instructions at
https://source.android.com/source/initializing.html
************************************************************
इसकी संभावित वजहें और समाधान यहां दिए गए हैं:
- आपने सही JDK इंस्टॉल नहीं किया है. इसके बारे में AOSP डेवलपमेंट (2.3 से 8.0) के लिए सेट अप करें के JDK सेक्शन में बताया गया है.
- आपके पाथ में, पहले से इंस्टॉल किया गया कोई दूसरा JDK दिख रहा है. अपने पाथ की शुरुआत में सही JDK जोड़ें या समस्या पैदा करने वाले JDK को हटाएं.