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_phone
याaosp_husky
. आपके डिवाइस के लिए, आपकाproduct_name
अपने फ़ॉर्मैट का इस्तेमाल कर सकता है. हालांकि, Google अपने डिवाइसों के लिए जिस फ़ॉर्मैट का इस्तेमाल करता है उसमें ये कॉम्पोनेंट होते हैं:aosp
का मतलब Android Open Source Platform से है.- (ज़रूरी नहीं)
cf
तब शामिल किया जाता है, जब टारगेट को Cuttlefish एमुलेटर में चलाना हो. - आर्किटेक्चर और हार्डवेयर (कोडनेम), जैसे कि
x86_64_phone
याhusky
, जो Pixel 8 Pro का कोडनेम है. Google डिवाइसों के कोडनेम की सूची के लिए, डिवाइस के कोडनेम देखें.
release_config
को रिलीज़ कॉन्फ़िगरेशन पर सेट किया गया है. जैसे,trunk_staging
नाम का डेवलपमेंट रिलीज़ कॉन्फ़िगरेशन. रिलीज़ कॉन्फ़िगरेशन, सुविधा लॉन्च करने के फ़्लैग के पीछे मौजूद कुछ सुविधाओं और कोड की पहचान करता है. साथ ही, यह किसी बिल्ड के लिए चालू या बंद होता है. रिलीज़ कॉन्फ़िगरेशन के बारे में ज़्यादा जानने के लिए, सुविधा फ़्लैग के लॉन्च की वैल्यू सेट करना लेख पढ़ें.स्ट्रिंग का
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
कमांड, -jN
आर्ग्युमेंट की मदद से एक साथ कई टास्क मैनेज कर सकता है. अगर आपने -j
आर्ग्युमेंट नहीं दिया है, तो बिल्ड सिस्टम अपने-आप एक साथ चलने वाले टास्क की वह संख्या चुनता है जो आपके सिस्टम के लिए सबसे सही है.
m
कमांड लाइन में मॉड्यूल के नाम डालकर, पूरे डिवाइस की इमेज के बजाय, खास मॉड्यूल बनाए जा सकते हैं. इसके अलावा, m
कमांड कुछ ऐसे टारगेट भी उपलब्ध कराता है जिन्हें लक्ष्य कहा जाता है. उदाहरण के लिए, m nothing
कुछ भी नहीं बनाता, लेकिन बिल्ड स्ट्रक्चर को पार्स और पुष्टि करता है. मान्य लक्ष्यों की सूची के लिए, m help
टाइप करें.
बिल्ड से जुड़ी गड़बड़ियों को ठीक करना (8.0 या इससे पहले का वर्शन)
अगर AOSP 8 या उससे पहले के वर्शन को बनाया जा रहा है, तो हो सकता है कि m
को Java के वर्शन से जुड़ी कोई समस्या आ जाए और वह प्रोसेस को बीच में ही बंद कर दे. उदाहरण के लिए, आपको यह मैसेज मिल सकता है:
************************************************************
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
************************************************************
इसकी संभावित वजहें और समाधान यहां दिए गए हैं:
- आपने AOSP डेवलपमेंट (2.3 - 8.0) के लिए सेट अप के JDK सेक्शन में बताए गए तरीके से, सही JDK इंस्टॉल नहीं किया है.
- आपके पाथ में, पहले से इंस्टॉल किया गया कोई दूसरा JDK दिख रहा है. अपने पाथ की शुरुआत में सही JDK जोड़ें या समस्या वाले JDK को हटाएं.