অ্যান্ড্রয়েড তৈরি করুন

অ্যান্ড্রয়েড তৈরি করতে এই পৃষ্ঠার নির্দেশাবলী অনুসরণ করুন।

আপনার বিল্ড পরিবেশ সেট আপ করুন

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

source build/envsetup.sh

এই স্ক্রিপ্টটি বেশ কয়েকটি কমান্ড আমদানি করে যা আপনাকে এই পৃষ্ঠায় ব্যবহৃত কমান্ড সহ Android সোর্স কোডের সাথে কাজ করতে দেয়। স্ক্রিপ্টের উৎস দেখতে, platform/build/envsetup.sh দেখুন। অন্তর্নির্মিত সাহায্য দেখতে, hmm টাইপ করুন।

একটি লক্ষ্য চয়ন করুন

অ্যান্ড্রয়েড তৈরি করার আগে, আপনাকে অবশ্যই নির্মাণের লক্ষ্য চিহ্নিত করতে হবে। একটি লক্ষ্য আপনি যে লক্ষ্য প্ল্যাটফর্ম তৈরি করছেন তা প্রতিফলিত করে। আপনার লক্ষ্য নির্মাণের জন্য শনাক্ত করতে, লক্ষ্যের প্রতিনিধিত্বকারী একটি স্ট্রিং দ্বারা অনুসরণ করে 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
============================================

টার্গেটের প্রতিনিধিত্বকারী স্ট্রিংটির নিম্নলিখিত বিন্যাস রয়েছে:

lunch product_name-release_config-build_variant

এই স্ট্রিং এর উপাদান হল:

  • product_name হল সেই পণ্যটির নাম যা আপনি তৈরি করতে চান, যেমন aosp_cf_x86_64_phone বা aosp_husky । আপনার নির্দিষ্ট product_name আপনার ডিভাইসের জন্য আপনার নিজস্ব বিন্যাস অনুসরণ করতে পারে, কিন্তু Google তার ডিভাইসের জন্য যে বিন্যাসটি ব্যবহার করে তার এই উপাদানগুলি রয়েছে:

    • aosp অ্যান্ড্রয়েড ওপেন সোর্স প্ল্যাটফর্মকে বোঝায়।
    • (ঐচ্ছিক) 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 বন্ধ হয়ে যেতে পারে। উদাহরণস্বরূপ, আপনি এই বার্তা পেতে পারেন:

************************************************************
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 সরিয়ে দিন।
,

অ্যান্ড্রয়েড তৈরি করতে এই পৃষ্ঠার নির্দেশাবলী অনুসরণ করুন।

আপনার বিল্ড পরিবেশ সেট আপ করুন

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

source build/envsetup.sh

এই স্ক্রিপ্টটি বেশ কয়েকটি কমান্ড আমদানি করে যা আপনাকে এই পৃষ্ঠায় ব্যবহৃত কমান্ড সহ Android সোর্স কোডের সাথে কাজ করতে দেয়। স্ক্রিপ্টের উৎস দেখতে, platform/build/envsetup.sh দেখুন। অন্তর্নির্মিত সাহায্য দেখতে, hmm টাইপ করুন।

একটি লক্ষ্য চয়ন করুন

অ্যান্ড্রয়েড তৈরি করার আগে, আপনাকে অবশ্যই নির্মাণের লক্ষ্য চিহ্নিত করতে হবে। একটি লক্ষ্য আপনি যে লক্ষ্য প্ল্যাটফর্ম তৈরি করছেন তা প্রতিফলিত করে। আপনার লক্ষ্য নির্মাণের জন্য শনাক্ত করতে, লক্ষ্যের প্রতিনিধিত্বকারী একটি স্ট্রিং দ্বারা অনুসরণ করে 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
============================================

টার্গেটের প্রতিনিধিত্বকারী স্ট্রিংটির নিম্নলিখিত বিন্যাস রয়েছে:

lunch product_name-release_config-build_variant

এই স্ট্রিং এর উপাদান হল:

  • product_name হল সেই পণ্যটির নাম যা আপনি তৈরি করতে চান, যেমন aosp_cf_x86_64_phone বা aosp_husky । আপনার নির্দিষ্ট product_name আপনার ডিভাইসের জন্য আপনার নিজস্ব বিন্যাস অনুসরণ করতে পারে, কিন্তু Google তার ডিভাইসের জন্য যে বিন্যাসটি ব্যবহার করে তার এই উপাদানগুলি রয়েছে:

    • aosp অ্যান্ড্রয়েড ওপেন সোর্স প্ল্যাটফর্মকে বোঝায়।
    • (ঐচ্ছিক) 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 বন্ধ হয়ে যেতে পারে। উদাহরণস্বরূপ, আপনি এই বার্তা পেতে পারেন:

************************************************************
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 সরিয়ে দিন।