इस ट्यूटोरियल की मदद से, पहली बार Android ऑपरेटिंग सिस्टम डेवलप करने की कोशिश की जा सकती है.
Android डेवलपमेंट के लिए सेट अप करना
Android सोर्स की android-latest-release मेनिफ़ेस्ट शाखा को डाउनलोड और बिल्ड करने से पहले, पक्का करें कि आपका हार्डवेयर ज़रूरी शर्तों को पूरा करता हो. साथ ही, ज़रूरी सॉफ़्टवेयर सही तरीके से इंस्टॉल हो. आपको इन शब्दों के बारे में भी जानकारी होनी चाहिए:
- Git
- Git, मुफ़्त और ओपन सोर्स डिस्ट्रिब्यूटेड वर्शन कंट्रोल सिस्टम है. Android, लोकल ऑपरेशन के लिए Git का इस्तेमाल करता है. जैसे, शाखा बनाना, कमिट करना, बदलाव करना, और अंतर देखना. Git सीखने में मदद पाने के लिए, Git का दस्तावेज़ देखें.
- रिपॉज़िटरी
- Repo, Git के लिए Python का एक रैपर है. इसकी मदद से, कई Git रिपॉज़िटरी में मुश्किल कार्रवाइयां आसानी से की जा सकती हैं. Repo, वर्शन कंट्रोल के सभी ऑपरेशन के लिए Git की जगह नहीं लेता. यह सिर्फ़ Git के मुश्किल ऑपरेशन को आसान बनाता है. Repo, मेनिफ़ेस्ट फ़ाइलों का इस्तेमाल करके, Git प्रोजेक्ट को Android सुपर प्रोजेक्ट में इकट्ठा करता है.
- मेनिफ़ेस्ट फ़ाइल
- मेनिफ़ेस्ट फ़ाइल एक एक्सएमएल फ़ाइल होती है. इसमें यह जानकारी होती है कि Android सोर्स में मौजूद अलग-अलग Git प्रोजेक्ट, AOSP सोर्स ट्री में कहां रखे गए हैं.
हार्डवेयर की ज़रूरी शर्तें पूरी करना
आपके डेवलपमेंट वर्कस्टेशन में, हार्डवेयर से जुड़ी ये ज़रूरी शर्तें पूरी होनी चाहिए या इनसे बेहतर होनी चाहिए:
64-बिट x86 सिस्टम.
कोड को चेक आउट और बिल्ड करने के लिए, डिस्क में कम से कम 400 जीबी खाली जगह होनी चाहिए (चेक आउट करने के लिए 250 जीबी + बिल्ड करने के लिए 150 जीबी).
कम से कम 64 जीबी रैम. Google, Android बनाने के लिए 64 जीबी रैम वाली 72-कोर मशीनों का इस्तेमाल करता है. इस हार्डवेयर कॉन्फ़िगरेशन के साथ, Android का पूरा बिल्ड बनाने में करीब 40 मिनट लगते हैं. वहीं, Android का इंक्रीमेंटल बिल्ड बनाने में सिर्फ़ कुछ मिनट लगते हैं. इसके उलट, 64 जीबी रैम वाली 6-कोर मशीन पर, पूरे ऐप्लिकेशन को बिल्ड होने में करीब छह घंटे लगते हैं.
ऑपरेटिंग सिस्टम की ज़रूरी शर्तें पूरी करना
आपके डेवलपमेंट वर्कस्टेशन में, GNU C Library (glibc) 2.17 या इसके बाद का वर्शन वाला कोई भी 64-बिट Linux डिस्ट्रिब्यूशन होना चाहिए.
ज़रूरी पैकेज इंस्टॉल करना
Ubuntu 18.04 या उसके बाद के वर्शन के लिए ज़रूरी पैकेज इंस्टॉल करने के लिए, यह कमांड चलाएं:
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfigज़रूरी सॉफ़्टवेयर इंस्टॉल करना
AOSP के साथ काम करने से पहले, आपके पास OpenJDK, Make, Python 3, और Repo इंस्टॉल होने चाहिए. Android की नई रिलीज़ वाली शाखा में, OpenJDK, Make, और Python 3 के पहले से बने वर्शन मौजूद होते हैं. इसलिए, इंस्टॉल करने के लिए अतिरिक्त चरणों की ज़रूरत नहीं होती. इस सेक्शन में, Repo इंस्टॉल करने का तरीका बताया गया है.
Repo इंस्टॉल करना
Repo इंस्टॉल करने के लिए, यह तरीका अपनाएं:
पैकेज की मौजूदा जानकारी डाउनलोड करें:
sudo apt-get updateRepo लॉन्चर इंस्टॉल करने के लिए, यह कमांड चलाएं:
sudo apt-get install repoRepo लॉन्चर, एक Python स्क्रिप्ट उपलब्ध कराता है. यह स्क्रिप्ट, चेकआउट की प्रोसेस शुरू करती है और Repo टूल को पूरी तरह से डाउनलोड करती है.
अगर ऐसा हो जाता है, तो सीधे चौथे चरण पर जाएं.
(ज़रूरी नहीं) नीचे दिए गए निर्देशों का इस्तेमाल करके, Repo को मैन्युअल तरीके से इंस्टॉल करें:
export REPO=$(mktemp /tmp/repo.XXXXXXXXX) curl -o ${REPO} https://storage.googleapis.com/git-repo-downloads/repo gpg --recv-keys 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65 curl -s https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ${REPO} && install -m 755 ${REPO} ~/bin/repoपहले तीन निर्देश, एक अस्थायी फ़ाइल सेट अप करते हैं, फ़ाइल में Repo डाउनलोड करते हैं, और पुष्टि करते हैं कि दी गई कुंजी, ज़रूरी कुंजी से मेल खाती है या नहीं. अगर ये निर्देश काम करते हैं, तो आखिरी निर्देश Repo लॉन्चर इंस्टॉल करता है.
Repo लॉन्चर के वर्शन की पुष्टि करें:
repo versionआउटपुट में 2.4 या उसके बाद का वर्शन दिखना चाहिए. उदाहरण के लिए:
repo launcher version 2.45
Android सोर्स डाउनलोड करना
Android का सोर्स, Google के होस्ट किए गए Git रिपॉज़िटरी के कलेक्शन में मौजूद होता है. हर Git रिपॉज़िटरी में, Android सोर्स का पूरा इतिहास शामिल होता है. इसमें सोर्स में किए गए बदलाव और बदलाव किए जाने की तारीख की जानकारी भी शामिल होती है. Android सोर्स डाउनलोड करने के लिए:
अपनी होम डायरेक्ट्री पर जाएं:
cd ~इसके अंदर एक लोकल वर्किंग सबडायरेक्ट्री बनाएं:
mkdir aospडायरेक्ट्री में नेविगेट करने के लिए:
cd aospAOSP रिपॉज़िटरी के सोर्स कोड की नई रिलीज़ शाखा को शुरू करना (
android-latest-release):repo init --partial-clone -b android-latest-release -u https://android.googlesource.com/platform/manifestGit के क्रेडेंशियल (नाम, ईमेल पता) डालें या स्वीकार करें.
सोर्स कोड सिंक करें:
repo sync -c -j8अगर डाउनलोड करने के दौरान आपको कोई समस्या आती है, तो सिंक करने से जुड़ी समस्याओं को हल करना और उन्हें ठीक करना लेख पढ़ें.
कोड बनाना
कोड बनाने के लिए:
अपनी वर्किंग डायरेक्ट्री में,
envsetup.shस्क्रिप्ट को सोर्स करें, ताकि आप अपना बिल्ड एनवायरमेंट सेट अप कर सकें:source build/envsetup.shlunchकमांड के साथ बनाने के लिए, टारगेट डिवाइस टाइप की जानकारी दें. टारगेट, डिवाइस का कोई वैरिएशन होता है. जैसे, कोई खास मॉडल या फ़ॉर्म फ़ैक्टर. यह टारगेट तय करें: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 ============================================टारगेट बनाएं:
m
पहले बिल्ड में कई घंटे लग सकते हैं. इसके बाद के बिल्ड में काफ़ी कम समय लगता है. आपके बिल्ड का आउटपुट, $OUT_DIR में दिखता है.
Cuttlefish ऐप्लिकेशन लॉन्च करना
Cuttlefish एक Android एमुलेटर है. इसका इस्तेमाल, आपके बिल्ड की जांच करने के लिए किया जाता है.
होस्ट के Debian पैकेज डाउनलोड करने, बनाने, और इंस्टॉल करने के लिए, ये कमांड चलाएं:
sudo apt install -y git devscripts equivs config-package-dev debhelper-compat golang curlgit clone https://github.com/google/android-cuttlefishcd android-cuttlefishfor dir in base frontend; do pushd $dir # Install build dependencies sudo mk-build-deps -i dpkg-buildpackage -uc -us popd donesudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -fsudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -fsudo usermod -aG kvm,cvdnetwork,render $USERsudo rebootरीबूट करने पर, अतिरिक्त कर्नेल मॉड्यूल इंस्टॉल होने लगते हैं और
udevनियम लागू होते हैं.Cuttlefish लॉन्च करें:
launch_cvd --daemonअपने वेब ब्राउज़र में
https://localhost:8443पर जाकर, Cuttlefish डिवाइस से कनेक्ट करें. Android पर काम करने वाला आपका वर्चुअल डिवाइस दिखेगा.
बदलाव करें
changelist के इस उदाहरण का पालन करके, सोर्स कोड अपडेट करें.
अपने चेकआउट (
aosp/डायरेक्ट्री) के रूट से,frameworks/nativeGit प्रोजेक्ट पर जाएं:cd frameworks/nativeइस निर्देश की मदद से, कुछ समय के लिए प्रोजेक्ट शुरू करें:
repo start <some-name> .यहां दी गई जगह पर
SurfaceFlinger.cppमें बदलाव करने के लिए, अपने एडिटर का इस्तेमाल करें:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cppयह लाइन ढूंढें:
void SurfaceFlinger::updateColorMatrixLocked() {updateColorMatrixLocked()की शुरुआत में यह लाइन जोड़ें:mClientColorMatrix = mat4(vec4{1.0f, 0.0f, 0.0f, 0.0f}, vec4{0.0f, -1.0f, 0.0f, 0.0f}, vec4{0.0f, 0.0f, -1.0f, 0.0f}, vec4{0.0f, 1.0f, 1.0f, 1.0f});कोड बनाएं:
mडिवाइस पर मौजूद बिल्ड को अपडेट करें:
adb rootadb remount -Radb rootadb syncadb rebootपुष्टि करें कि आपने जिस डिवाइस को चुना है उस पर रंग में बदलाव दिख रहा है. यह बदलाव, पहले चित्र में दिखाए गए रंग में बदलाव जैसा ही होना चाहिए.
पहली इमेज. रंग बदलने के बाद स्क्रीन का दिखना
टेस्ट ठीक करना
कोडलैब के इस हिस्से में, सोर्स ट्री में मौजूद उदाहरण के तौर पर दिए गए टेस्ट का इस्तेमाल किया गया है, जो काम नहीं कर रहा है.
जांच को चलाने, डीबग करने, और ठीक करने के लिए, यह तरीका अपनाएं:
चलाएं:
atest DevCodelabTestजांच पूरी नहीं हो पाती.
काम न करने वाले टेस्ट के स्टैक ट्रेस की जांच करें:
STACKTRACE: java.lang.AssertionError at org.junit.Assert.fail(Assert.java:87) at org.junit.Assert.assertTrue(Assert.java:42) at org.junit.Assert.assertTrue(Assert.java:53) at android.test.example.devcodelab.DevCodelabTest.testHelloWorld(DevCodelabTest.java:29)स्टैक ट्रेस की आखिरी लाइन में वह टेस्ट दिखता है जो काम नहीं कर रहा है (
testHelloWorld). यह टेस्टDevCodelabTest.javaनाम की फ़ाइल में है.ठीक किए जाने वाले टेस्ट की जगह का पता लगाने के लिए, स्टैक ट्रेस की आखिरी लाइन में
WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/को जोड़ें. साथ ही, टेस्ट फ़ाइल के नाम तक जोड़ें. इसलिए,android.test.example.devcodelab.DevCodelabTest,WORKING_DIRECTORY/platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.javaहो जाता है.platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.javaमें बदलाव करें औरAssert.assertTrue(false)कोAssert.assertTrue(true)से बदलेंसमस्या ठीक हो गई है या नहीं, इसकी पुष्टि करने के लिए टेस्ट को फिर से चलाएं:
atest DevCodelabTest
समीक्षा के लिए अपना कोड अपलोड करना
Repo, git clone जैसे कमांड को एक साथ बंडल करके, Git का इस्तेमाल आसान बनाता है. इससे एक साथ कई Git रिपॉज़िटरी (या प्रोजेक्ट) पर काम किया जा सकता है.
Git में अपने प्रोजेक्ट के कोड की समीक्षा करने के लिए, Gerrit के वेब-आधारित कोड की समीक्षा करने वाले सिस्टम का इस्तेमाल करें.
मान लें कि आपने
frameworks/nativeप्रोजेक्ट में बदलाव किए हैं. बदलावों को अपलोड करने के लिए, ये निर्देश चलाएं:cd frameworks/nativerepo start codelab .git add .git commitकमिट मैसेज के लिए, यह जानकारी डालें:
Android codelab change Test: manual atestबदलाव अपलोड करना:
repo uploadअगर आपका खाता लिंक हो जाता है, तो आपको इस तरह का मैसेज दिखेगा:
Upload project frameworks/native/ to remote branch android16-release: branch codelab ( 1 commit, Wed Aug 7 09:32:33 2019 -0700): ff46b36d android codelab change to https://android-review.googlesource.com/ (y/N)? y remote: Processing changes: refs: 1, new: 1, done remote: remote: SUCCESS remote: remote: https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432 android codelab change [NEW] remote: To https://android-review.googlesource.com/platform/frameworks/native * [new branch] codelab -> refs/for/android16-release
Gerrit में अपना बदलाव देखना
Gerrit में किया गया बदलाव देखने के लिए, टर्मिनल में लिंक आउटपुट पर जाएं. लिंक कुछ ऐसा दिखता है:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
बदलाव को पहले जैसा करना
आम तौर पर, टेस्टिंग के बाद और समीक्षा और अनुमति मिलने पर, आप अपने बदलाव को Gerrit में सबमिट करते हैं और उसे रिपॉज़िटरी में मर्ज करते हैं. इसके बजाय, इस कोडलैब के लिए, अपने काम को पहले जैसा करें:
Gerrit में, अबॉर्न करें पर क्लिक करें.
frameworks/nativeप्रोजेक्ट डायरेक्ट्री (या उसकी सबडायरेक्ट्री) में, उससे जुड़ी अस्थायी शाखा को छोड़ दें:repo abandon codelab .टेस्ट फ़ाइल में किए गए बदलावों को पहले जैसा करें. आपने बदलाव की जांच करने के लिए,
repo start,git commit, औरrepo uploadको नहीं चलाया है. इसलिए, फ़ाइल को खुद रीसेट किया जा सकता है. मान लें कि आपaosp/platform_testing directoryमें हैं, तो फ़ाइल को रीसेट करने के लिए, इस कमांड का इस्तेमाल करें:git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.javagit checkout .
इससे, Android प्लैटफ़ॉर्म डेवलपमेंट के लिए कोडलैब पूरा हो जाता है.
सहायता पाएं
अगर आपको इस कोडलैब के दौरान गड़बड़ियां आती हैं, तो किसी भी पेज पर सबसे नीचे मौजूद समस्या ट्रैकर लिंक का इस्तेमाल करके उनकी शिकायत करें. android-building ग्रुप में सवाल भेजें.
ps -A | grep crosvm टाइप करके देखें कि crosvm पहले से चल रहा है या नहीं. अगर crossvm प्रोसेस चल रही है, तो प्रोसेस पीआईडी के साथ stop_cvd || true या kill crosvm प्रोसेस टाइप करें.