অ্যান্ড্রয়েড বিল্ড করতে এই পৃষ্ঠার নির্দেশাবলী অনুসরণ করুন।
আপনার বিল্ড পরিবেশ সেট আপ করুন
আপনার ওয়ার্কিং ডিরেক্টরির ভেতর থেকে, আপনার বিল্ড এনভায়রনমেন্ট সেট আপ করার জন্য envsetup.sh স্ক্রিপ্টটি সোর্স করুন:
source build/envsetup.sh এই স্ক্রিপ্টটি এমন কয়েকটি কমান্ড ইম্পোর্ট করে যা আপনাকে অ্যান্ড্রয়েড সোর্স কোড নিয়ে কাজ করতে দেয়, যার মধ্যে এই পৃষ্ঠায় ব্যবহৃত কমান্ডগুলোও অন্তর্ভুক্ত। স্ক্রিপ্টটির সোর্স দেখতে, platform/build/envsetup.sh দেখুন। বিল্ট-ইন হেল্প দেখতে, hmm টাইপ করুন।
একটি লক্ষ্য বেছে নিন
অ্যান্ড্রয়েড বিল্ড করার আগে, আপনাকে বিল্ড করার জন্য একটি টার্গেট শনাক্ত করতে হবে। একটি টার্গেট সেই প্ল্যাটফর্মকে নির্দেশ করে যার জন্য আপনি বিল্ড করছেন। আপনার বিল্ড করার টার্গেট শনাক্ত করতে, ` 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আপনার ডিভাইসের জন্য আপনার নিজস্ব ফরম্যাট অনুসরণ করতে পারে, কিন্তু গুগল তার ডিভাইসগুলোর জন্য যে ফরম্যাট ব্যবহার করে তাতে এই উপাদানগুলো থাকে:-
aospবলতে অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্টকে বোঝায়। - ঐচ্ছিকভাবে,
cfঅন্তর্ভুক্ত করা হয় যখন টার্গেটটি কাটলফিশ এমুলেটরের মধ্যে চালানোর উদ্দেশ্য থাকে। - আর্কিটেকচার এবং হার্ডওয়্যার কোডনেম, যেমন
x86_64_only_phoneবাhusky, যা পিক্সেল ৮ প্রো-এর কোডনেম। গুগল ডিভাইসগুলোর কোডনেমের তালিকার জন্য, ডিভাইস কোডনেম দেখুন।
-
release_configএকটি রিলিজ কনফিগারেশনে সেট করা থাকে, যেমনaosp_currentনামক ডেভেলপমেন্ট রিলিজ কনফিগারেশন। একটি রিলিজ কনফিগারেশন নির্দিষ্ট কিছু ফিচার এবং কোডকে শনাক্ত করে, যেগুলো ফিচার লঞ্চ ফ্ল্যাগের অধীনে থাকে এবং একটি বিল্ডের জন্য হয় সক্রিয় (enabled) অথবা নিষ্ক্রিয় (disabled) করা হয়। রিলিজ কনফিগারেশন সম্পর্কে আরও জানতে, `Set feature flag launch values` দেখুন।স্ট্রিংটির
build_variantঅংশটি নিচের সারণিতে দেওয়া তিনটি মানের যেকোনো একটি হতে পারে:build_variantবর্ণনা userএই বিল্ড ভ্যারিয়েন্টটি সীমিত নিরাপত্তা অ্যাক্সেস প্রদান করে এবং প্রোডাকশনের জন্য উপযুক্ত। userdebugএই বিল্ড ভ্যারিয়েন্টটি ডিভাইস ডেভেলপারদেরকে নির্মাণাধীন রিলিজগুলোর পারফরম্যান্স ও ক্ষমতা বুঝতে সাহায্য করে। userdebugবিল্ড ব্যবহার করে ডেভেলপ করার সময়, ইউজারডিবাগ-এর নির্দেশিকা অনুসরণ করুন।engএই বিল্ড ভ্যারিয়েন্টটির বিল্ড টাইম দ্রুততর এবং এটি দৈনন্দিন ডেভেলপমেন্ট পরিবেশের জন্য সবচেয়ে উপযুক্ত (যেখানে পারফরম্যান্স ও পাওয়ার ততটা গুরুত্বপূর্ণ নয়)।
আপনি যদি কোনো আর্গুমেন্ট ছাড়া lunch চালান, lunch সাধারণ টার্গেটগুলোর একটি তালিকা প্রদান করে। নিজস্ব টার্গেট স্ট্রিং তৈরি করতে, টার্গেট স্ট্রিং-এর উপাদানগুলোর সাথে হার্ডওয়্যার কোডনেমগুলো যুক্ত করুন। কোডনেমগুলোর তালিকার জন্য, `ডিভাইস কোডনেম` দেখুন।
বর্তমান লক্ষ্য দেখুন
বর্তমান লাঞ্চ সেটিংস দেখতে, চালান:
$ 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 টাইপ করুন।
বিল্ড ত্রুটি সমাধান করুন
এই বিভাগে বিল্ড ত্রুটিগুলি পরিচালনা করার নির্দেশাবলী রয়েছে।
পঠনযোগ্য ফাইল সিস্টেম ত্রুটি (অ্যান্ড্রয়েড ১৭ এবং উচ্চতর সংস্করণ)
বিল্ড চলাকালীন, AOSP সোর্স ট্রি রিড-অনলি থাকে। আপনি যে বিল্ডটি চালাচ্ছেন, সেটি যদি প্রোডাক্ট কনফিগারেশন বা বিল্ডের অন্য কোনো অংশে সোর্স ট্রি পরিবর্তন করার চেষ্টা করে, তাহলে বিল্ডটি ব্যর্থ হতে পারে এবং রিড-অনলি ফাইল সিস্টেম এরর দেখাতে পারে। আপনি এই অপশনগুলো ব্যবহার করে সাময়িকভাবে সোর্স ট্রি-কে রিড-রাইট মোডে পরিবর্তন করতে পারেন:
বিল্ড চলাকালীন সম্পূর্ণ সোর্স ট্রি-কে রিড-রাইট মোডে পরিবর্তন করতে, বিল্ড এনভায়রনমেন্টে
BUILD_BROKEN_SRC_DIR_IS_WRITABLE=trueযোগ করুন।বিল্ড চলাকালীন ট্রি-এর কোনো অংশকে রিড-রাইট মোডে পরিবর্তন করতে,
BUILD_BROKEN_SRC_DIR_RW_ALLOWLIST=" path1 , path2 , ... "ব্যবহার করুন। পাথগুলো হবে ওয়ার্কস্পেসের শীর্ষ থেকে সেইসব ডিরেক্টরির পাথ, যেখানে লেখার অনুমতি দেওয়া হবে।
ভুল জাভা সংস্করণ (অ্যান্ড্রয়েড ৮.০ এবং তার নিচের সংস্করণ)
আপনি যদি অ্যান্ড্রয়েড ৮.০ (এপিআই লেভেল ২৬) বা তার চেয়ে নিম্ন সংস্করণ বিল্ড করেন, তাহলে আপনার জাভা সংস্করণে কোনো সমস্যা পেলে 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
************************************************************
এখানে সম্ভাব্য কারণ ও সমাধানগুলো দেওয়া হলো:
- সঠিক JDK ইনস্টল করা নেই। আরও তথ্যের জন্য, AOSP ডেভেলপমেন্টের জন্য সেট আপ (2.3-8.0) দেখুন।
- আপনার পাথে আগে থেকে ইনস্টল করা অন্য একটি JDK দেখা যাচ্ছে। আপনার পাথের শুরুতে সঠিক JDK-টি যুক্ত করুন অথবা সমস্যাযুক্ত JDK-টি মুছে ফেলুন।