অ্যান্ড্রয়েড ডেভেলপমেন্ট চেষ্টা করুন

এই টিউটোরিয়ালটি আপনাকে প্রথমবারের জন্য অ্যান্ড্রয়েড অপারেটিং সিস্টেম ডেভেলপমেন্ট চেষ্টা করতে দেয়।

অ্যান্ড্রয়েড বিকাশের জন্য সেট আপ করুন

আপনি Android উত্সের main শাখা ডাউনলোড এবং তৈরি করার আগে, আপনার হার্ডওয়্যার প্রয়োজনীয় প্রয়োজনীয়তা পূরণ করে এবং প্রয়োজনীয় সফ্টওয়্যারটি সঠিকভাবে ইনস্টল করা আছে কিনা তা নিশ্চিত করুন। এছাড়াও আপনাকে নিম্নলিখিত পদগুলির সাথে পরিচিত হতে হবে:

গিট
গিট একটি বিনামূল্যের এবং ওপেন সোর্স বিতরণকৃত সংস্করণ নিয়ন্ত্রণ ব্যবস্থা। অ্যান্ড্রয়েড স্থানীয় ক্রিয়াকলাপগুলির জন্য গিট ব্যবহার করে যেমন ব্রাঞ্চিং, কমিট, ডিফ এবং এডিট। গিট শিখতে সাহায্যের জন্য, গিট ডকুমেন্টেশন পড়ুন।
রেপো
রেপো হল গিট এর চারপাশে একটি পাইথন র‍্যাপার যা একাধিক গিট রিপোজিটরি জুড়ে জটিল ক্রিয়াকলাপগুলিকে সহজ করে তোলে। রেপো সমস্ত সংস্করণ নিয়ন্ত্রণ ক্রিয়াকলাপের জন্য গিটকে প্রতিস্থাপন করে না, এটি কেবল জটিল গিট অপারেশনগুলি সম্পাদন করা সহজ করে তোলে। রেপো অ্যান্ড্রয়েড সুপারপ্রজেক্টে গিট প্রকল্পগুলিকে একত্রিত করতে ম্যানিফেস্ট ফাইলগুলি ব্যবহার করে।
ম্যানিফেস্ট ফাইল
একটি ম্যানিফেস্ট ফাইল হল একটি XML ফাইল যা নির্দিষ্ট করে যেখানে Android সোর্সের বিভিন্ন গিট প্রোজেক্ট একটি AOSP সোর্স ট্রির মধ্যে স্থাপন করা হয়।

হার্ডওয়্যার প্রয়োজনীয়তা পূরণ করুন

আপনার ডেভেলপমেন্ট ওয়ার্কস্টেশন এই হার্ডওয়্যার প্রয়োজনীয়তা পূরণ বা অতিক্রম করা উচিত:

  • একটি 64-বিট x86 সিস্টেম।

  • কোডটি চেক আউট করতে এবং তৈরি করতে কমপক্ষে 400 GB ফ্রি ডিস্ক স্পেস (চেক আউট করতে 250 GB + তৈরি করতে 150 GB)।

  • ন্যূনতম 64 GB RAM। Google Android তৈরি করতে 64 GB RAM সহ 72-কোর মেশিন ব্যবহার করে৷ এই হার্ডওয়্যার কনফিগারেশনের সাথে, অ্যান্ড্রয়েডের সম্পূর্ণ বিল্ডের জন্য এটি প্রায় 40 মিনিট এবং অ্যান্ড্রয়েডের ক্রমবর্ধমান বিল্ডের জন্য মাত্র কয়েক মিনিট সময় নেয়। বিপরীতে, 64 গিগাবাইট RAM সহ একটি 6-কোর মেশিনের সাথে সম্পূর্ণ বিল্ড করতে এটি প্রায় 6 ঘন্টা সময় নেয়।

অপারেটিং সিস্টেমের প্রয়োজনীয়তা পূরণ করুন

আপনার ডেভেলপমেন্ট ওয়ার্কস্টেশনকে অবশ্যই GNU C Library (glibc) 2.17 বা তার পরে যেকোনো 64-বিট লিনাক্স ডিস্ট্রিবিউশন চালাতে হবে।

প্রয়োজনীয় প্যাকেজ ইনস্টল করুন

উবুন্টু 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 এর ইনস্টলেশন থাকতে হবে। অ্যান্ড্রয়েডের AOSP প্রধান শাখা OpenJDK, Make, এবং Python 3 এর পূর্বনির্মাণ সংস্করণের সাথে আসে, তাই অতিরিক্ত ইনস্টলেশন পদক্ষেপের প্রয়োজন নেই। নিম্নলিখিত বিভাগটি ব্যাখ্যা করে কিভাবে রেপো ইনস্টল করতে হয়।

রেপো ইনস্টল করুন

রেপো ইনস্টল করতে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. বর্তমান প্যাকেজ তথ্য ডাউনলোড করুন:

    sudo apt-get update
  2. রেপো লঞ্চার ইনস্টল করতে নিম্নলিখিত কমান্ডটি চালান:

    sudo apt-get install repo

    রেপো লঞ্চার একটি পাইথন স্ক্রিপ্ট সরবরাহ করে যা একটি চেকআউট শুরু করে এবং সম্পূর্ণ রেপো টুল ডাউনলোড করে।

    সফল হলে, ধাপ 4 এ যান।

  3. (ঐচ্ছিক) নিম্নলিখিত সিরিজের কমান্ডগুলি ব্যবহার করে ম্যানুয়ালি রেপো ইনস্টল করুন:

    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 ডাউনলোড করে এবং প্রদত্ত কীটি প্রয়োজনীয় কীটির সাথে মেলে তা যাচাই করে। এই কমান্ড সফল হলে, চূড়ান্ত কমান্ড রেপো লঞ্চার ইনস্টল করে।

  4. রেপো লঞ্চার সংস্করণ যাচাই করুন:

    repo version

    আউটপুটটি 2.4 বা উচ্চতর সংস্করণ নির্দেশ করবে, উদাহরণস্বরূপ:

    repo launcher version 2.45

অ্যান্ড্রয়েড সোর্স ডাউনলোড করুন

অ্যান্ড্রয়েড উত্সটি Google দ্বারা হোস্ট করা গিট সংগ্রহস্থলগুলির একটি সংগ্রহে অবস্থিত৷ প্রতিটি গিট রিপোজিটরিতে অ্যান্ড্রয়েড সোর্সের পুরো ইতিহাস অন্তর্ভুক্ত থাকে, যার মধ্যে সোর্সের পরিবর্তন এবং কখন পরিবর্তনগুলি করা হয়েছিল। অ্যান্ড্রয়েড সোর্স ডাউনলোড করতে:

  1. আপনার হোম ডিরেক্টরিতে নেভিগেট করুন:

    cd ~
  2. এটির মধ্যে একটি স্থানীয় কাজ সাবডিরেক্টরি তৈরি করুন:

    mkdir aosp
  3. ডিরেক্টরিতে নেভিগেট করুন:

    cd aosp
  4. AOSP রিপোজিটরি সোর্স কোড প্রধান শাখা শুরু করুন (ডিফল্ট):

    repo init --partial-clone -b main -u https://android.googlesource.com/platform/manifest
  5. আপনার গিট শংসাপত্রগুলি লিখুন বা গ্রহণ করুন (নাম, ইমেল ঠিকানা)।

  6. সোর্স কোড সিঙ্ক করুন:

    repo sync -c -j8

    ডাউনলোডের সময় আপনার যদি কোনো সমস্যা হয়, তাহলে ট্রাবলশুট করুন এবং সিঙ্ক সমস্যা সমাধান করুন

কোড তৈরি করুন

কোড তৈরি করতে:

  1. আপনার কাজের ডিরেক্টরির মধ্যে থেকে, আপনার বিল্ড পরিবেশ সেট আপ করতে envsetup.sh স্ক্রিপ্টটি উৎস করুন:

    source build/envsetup.sh
  2. lunch কমান্ড দিয়ে তৈরি করার জন্য একটি টার্গেট ডিভাইসের ধরন নির্দিষ্ট করুন। একটি লক্ষ্য হল একটি ডিভাইসের স্থানান্তর, যেমন একটি নির্দিষ্ট মডেল বা ফর্ম ফ্যাক্টর। এই লক্ষ্য নির্দিষ্ট করুন:

    lunch aosp_cf_x86_64_phone-trunk_staging-userdebug

    আপনার লক্ষ্য এবং বিল্ড পরিবেশের একটি সংক্ষিপ্তসার দেখতে হবে:

    ============================================
    PLATFORM_VERSION_CODENAME=VanillaIceCream
    PLATFORM_VERSION=VanillaIceCream
    PRODUCT_INCLUDE_TAGS=com.android.mainline
    TARGET_PRODUCT=aosp_arm
    TARGET_BUILD_VARIANT=eng
    TARGET_ARCH=arm
    TARGET_ARCH_VARIANT=armv7-a-neon
    TARGET_CPU_VARIANT=generic
    HOST_OS=linux
    HOST_OS_EXTRA=Linux-6.5.13-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
    HOST_CROSS_OS=windows
    BUILD_ID=AOSP.MAIN
    OUT_DIR=out
    ============================================
    
  3. লক্ষ্য তৈরি করুন:

    m

প্রথম বিল্ডে ঘন্টা লাগবে বলে আশা করুন। পরবর্তী বিল্ডগুলি উল্লেখযোগ্যভাবে কম সময় নেয়। আপনার বিল্ডের আউটপুট $OUT_DIR এ প্রদর্শিত হবে।

কাটলফিশ চালু করুন

Cuttlefish হল Android এমুলেটর যা আপনার বিল্ডগুলি পরীক্ষা করতে ব্যবহৃত হয়।

  1. হোস্ট ডেবিয়ান প্যাকেজগুলি ডাউনলোড, তৈরি এবং ইনস্টল করতে নিম্নলিখিত কমান্ডগুলি চালান:

    sudo apt install -y git devscripts equivs config-package-dev debhelper-compat golang curl
    git clone https://github.com/google/android-cuttlefish
    cd android-cuttlefish
    for dir in base frontend; do
    pushd $dir
    # Install build dependencies
    sudo mk-build-deps -i
    dpkg-buildpackage -uc -us
    popd
    done
    sudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -f
    sudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -f
    sudo usermod -aG kvm,cvdnetwork,render $USER
    sudo reboot

    রিবুট অতিরিক্ত কার্নেল মডিউল ইনস্টল করতে ট্রিগার করে এবং udev নিয়ম প্রয়োগ করে।

  2. কাটলফিশ চালু করুন:

    launch_cvd --daemon
    
  3. আপনার ওয়েব ব্রাউজারে https://localhost:8443 এ নেভিগেট করে Cuttlefish ডিভাইসের সাথে সংযোগ করুন। আপনার ভার্চুয়াল অ্যান্ড্রয়েড চালিত ডিভাইস প্রদর্শিত হয়.

একটি পরিবর্তন করুন

এই উদাহরণ পরিবর্তন তালিকা অনুসরণ করে সোর্স কোড আপডেট করুন।

  1. আপনার চেকআউটের রুট থেকে ( aosp/ ডিরেক্টরি), frameworks/native গিট প্রকল্পে নেভিগেট করুন:

    cd frameworks/native
  2. এই কমান্ড দিয়ে একটি অস্থায়ী প্রকল্প শুরু করুন:

    repo start <some-name> .
  3. নিম্নলিখিত অবস্থানে SurfaceFlinger.cpp সম্পাদনা করতে আপনার সম্পাদক ব্যবহার করুন:

    aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
    
  4. এই লাইন খুঁজুন:

    void SurfaceFlinger::updateColorMatrixLocked() {
    
  5. আপডেটের শুরুতে এই লাইনটি যোগ করুন 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});
    
  6. কোড তৈরি করুন:

    m
  7. ডিভাইসে বিল্ড আপডেট করুন:

    adb root
    adb remount -R
    adb root
    adb sync
    adb reboot
  8. যাচাই করুন যে আপনি আপনার নির্বাচিত ডিভাইসে চিত্র 1-এ দেখানোর মতো একটি রঙ পরিবর্তন দেখতে পাচ্ছেন।

    Example of a successful color change

    চিত্র 1. সফল রঙ পরিবর্তনের পরে পর্দার উপস্থিতি

একটি পরীক্ষা ঠিক করুন

কোডল্যাবের এই অংশটি একটি উদাহরণ পরীক্ষা ব্যবহার করে যা উৎস গাছে রয়েছে এবং ব্যর্থ হচ্ছে।

পরীক্ষা চালাতে, ডিবাগ করতে এবং ঠিক করতে, এই নির্দেশাবলী অনুসরণ করুন:

  1. চালান:

    atest DevCodelabTest

    পরীক্ষায় ব্যর্থ হয়।

  2. ব্যর্থ পরীক্ষার স্ট্যাক ট্রেস পরীক্ষা করুন:

    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 নামে একটি ফাইলে রয়েছে।

  3. ঠিক করার জন্য পরীক্ষার অবস্থান নির্ধারণ করতে, 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 হয়ে যায়।

  4. platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java সম্পাদনা করুন এবং Assert.assertTrue(false) এর সাথে Assert.assertTrue(true) প্রতিস্থাপন করুন

  5. আপনি সমস্যাটি ঠিক করেছেন তা যাচাই করতে আবার পরীক্ষা চালান:

    atest DevCodelabTest

পর্যালোচনার জন্য আপনার কোড আপলোড করুন

একই সাথে অসংখ্য গিট রিপোজিটরি (বা প্রকল্প) জুড়ে কাজ করার জন্য git clone মতো কমান্ড বান্ডিল করে রেপো গিট ব্যবহারকে সহজ করে।

Git-এ আপনার প্রকল্পগুলির কোড পর্যালোচনার জন্য, Gerrit ওয়েব-ভিত্তিক কোড পর্যালোচনা সিস্টেম ব্যবহার করুন।

  1. ধরে নিচ্ছি আপনি frameworks/native প্রজেক্টে আপনার পরিবর্তনগুলি করেছেন, আপনার পরিবর্তনগুলি আপলোড করতে এই কমান্ডগুলি চালান:

    cd frameworks/native
    repo start codelab .
    git add .
    git commit
  2. আপনার প্রতিশ্রুতি বার্তার জন্য, নিম্নলিখিত লিখুন:

    Android codelab change
    Test: manual atest
    
  3. আপনার পরিবর্তন আপলোড করুন:

    repo upload

    আপনি যদি সফল হন, তাহলে আপনি এটির মতো একটি বার্তা দেখতে পাবেন:

    Upload project frameworks/native/ to remote branch main:
     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/main
    

Gerrit আপনার পরিবর্তন দেখুন

Gerrit এ আপনার পরিবর্তন দেখতে, টার্মিনালে লিঙ্ক আউটপুটে নেভিগেট করুন। লিঙ্ক নিম্নলিখিত অনুরূপ:

https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432

আপনার পরিবর্তন প্রত্যাবর্তন করুন

সাধারণত, পরীক্ষা-পরবর্তী এবং পর্যালোচনা এবং অনুমোদনের পরে, আপনি Gerrit-এ আপনার পরিবর্তন জমা দেন এবং এটিকে সংগ্রহস্থলে একত্রিত করেন। পরিবর্তে, এই কোডল্যাবের উদ্দেশ্যে, আপনার কাজ ফিরিয়ে দিন:

  1. Gerrit এ, Abandon এ ক্লিক করুন।

  2. frameworks/native প্রজেক্ট ডাইরেক্টরিতে (বা এর সাবডিরেক্টরি) সম্পর্কিত অস্থায়ী শাখাটি পরিত্যাগ করুন:

    repo abandon codelab .
  3. পরীক্ষা ফাইলে আপনার করা পরিবর্তনগুলি প্রত্যাবর্তন করুন। যেহেতু আপনি পরীক্ষার পরিবর্তনে repo start , git commit , এবং repo upload চালাননি, আপনি নিজেই ফাইলটি পুনরায় সেট করতে পারেন। ধরে নিচ্ছি আপনি aosp/platform_testing directory আছেন, ফাইলটি পুনরায় সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

    git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
    git checkout .

এটি অ্যান্ড্রয়েড প্ল্যাটফর্ম বিকাশের জন্য কোডল্যাব সম্পূর্ণ করে।

সাহায্য পান

আপনি যদি এই কোডল্যাবের সময় ত্রুটির সম্মুখীন হন, যেকোন পৃষ্ঠার নীচে ইস্যু ট্র্যাকার লিঙ্কটি ব্যবহার করে তাদের রিপোর্ট করুন৷ অ্যান্ড্রয়েড-বিল্ডিং গ্রুপে প্রশ্ন পাঠান।

প্রকার ps -A | grep crosvm দেখতে crosvm ইতিমধ্যে চলছে কিনা। crossvm চলমান থাকলে টাইপ করুন stop_cvd || true প্রসেস পিআইডি সহ stop_cvd || true বা kill crosvm