Android ऐप्लिकेशन बनाना

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 है.
    • (ज़रूरी नहीं) अगर टारगेट को Cuttlefish एम्युलेटर में चलाना है, तो cf शामिल किया जाता है.
    • आर्किटेक्चर और हार्डवेयर (कोडनेम), जैसे कि 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 कमांड, -jN आर्ग्युमेंट के साथ, एक साथ कई टास्क हैंडल कर सकता है. अगर -j आर्ग्युमेंट नहीं दिया जाता है, तो बिल्ड सिस्टम अपने-आप, एक साथ कई टास्क की संख्या चुन लेता है. यह संख्या, आपके सिस्टम के लिए ऑप्टिमाइज़ की गई होती है.

m कमांड लाइन में मॉड्यूल के नाम डालकर, पूरे डिवाइस की इमेज के बजाय खास मॉड्यूल बनाए जा सकते हैं. इसके अलावा, m कमांड कुछ स्यूडो टारगेट उपलब्ध कराता है. इन्हें लक्ष्य कहा जाता है. उदाहरण के लिए, m nothing से कुछ भी नहीं बनता है. हालांकि, यह बिल्ड स्ट्रक्चर को पार्स और मान्य करता है. मान्य लक्ष्यों की सूची देखने के लिए, m help टाइप करें.

बिल्ड से जुड़ी गड़बड़ियां ठीक करना (Android 17 या इसके बाद के वर्शन के लिए)

इस सेक्शन में, सिर्फ़ पढ़ने वाले मोड से जुड़ी गड़बड़ियों को ठीक करने के निर्देश दिए गए हैं. ये गड़बड़ियां, बिल्ड के दौरान AOSP के सिर्फ़ पढ़ने वाले मोड वाले कोडबेस में बदलाव करने की कोशिश करने पर होती हैं.

बिल्ड करने की कोशिश करने पर, सिर्फ़ पढ़ने वाले मोड वाले फ़ाइल सिस्टम से जुड़ी गड़बड़ियां होती हैं

बिल्ड के दौरान, AOSP का सोर्स ट्री सिर्फ़ पढ़ने वाले मोड में होता है. अगर आपके चलाए जा रहे बिल्ड में, प्रॉडक्ट कॉन्फ़िगरेशन या बिल्ड के किसी अन्य हिस्से के दौरान सोर्स ट्री में बदलाव करने की कोशिश की जाती है, तो बिल्ड फ़ेल हो सकता है. साथ ही, सिर्फ़ पढ़ने वाले मोड वाले फ़ाइल सिस्टम से जुड़ी गड़बड़ियां दिख सकती हैं. सोर्स ट्री को अस्थायी तौर पर, पढ़ने और लिखने वाले मोड में बदलने के लिए इन विकल्पों का इस्तेमाल किया जा सकता है:

  • बिल्ड के दौरान, पूरे सोर्स ट्री को पढ़ने और लिखने वाले मोड में बदलने के लिए, बिल्ड एनवायरमेंट में BUILD_BROKEN_SRC_DIR_IS_WRITABLE=true जोड़ें.

  • बिल्ड के दौरान, ट्री के किसी हिस्से को पढ़ने और लिखने वाले मोड में बदलने के लिए, BUILD_BROKEN_SRC_DIR_RW_ALLOWLIST="path1, path2, ..." का इस्तेमाल करें.

    पाथ, उन डायरेक्ट्री के पाथ होने चाहिए जिनमें लिखने की अनुमति दी जानी चाहिए. ये पाथ, वर्कस्पेस के सबसे ऊपरी हिस्से के हिसाब से होने चाहिए.

बिल्ड से जुड़ी गड़बड़ियां ठीक करना (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
************************************************************

इसकी संभावित वजहें और समाधान यहां दिए गए हैं:

  • आपने AOSP डेवलपमेंट (2.3 - 8.0) के लिए सेट अप करना लेख के JDK सेक्शन में बताए गए सही JDK को इंस्टॉल नहीं किया है.
  • आपके पाथ में, पहले से इंस्टॉल किया गया कोई दूसरा JDK दिख रहा है. अपने पाथ की शुरुआत में सही JDK जोड़ें या समस्या पैदा करने वाले JDK को हटाएं.