Winscope ট্রেসিং হল Android ফ্রেমওয়ার্কের অংশ। এই পৃষ্ঠায় Winscope ট্রেস ভিউয়ার লোকালি ডাউনলোড, বিল্ড ও রান করার জন্য প্রয়োজনীয় ধাপগুলি উল্লেখ করা আছে।
স্থানীয়ভাবে Winscope তৈরি করা
Winscope ট্রেসার চালানোর জন্য আপনার পিসি (PC) সেট-আপ করতে এইসব ধাপ অনুসরণ করুন:
- Android সোর্স ডাউনলোড করুন।
Winscope ফোল্ডারে নেভিগেট করুন:
cd development/tools/winscopeএগুলি ব্যবহার করে ডিপেন্ডেন্সি ইনস্টল করুন:
npm installউপলভ্য কমান্ডের তালিকা দেখতে, এগুলি রান করান:
npm runএগুলি ব্যবহার করে সব প্রোডাকশন ও টেস্ট টার্গেট তৈরি করুন:
npm run build:prodএগুলি ব্যবহার করে Winscope চালান:
npm run start
আলাদা আলাদা পার্ট তৈরি করা
আপনি নিম্নলিখিত কমান্ড ব্যবহার করে Winscope-এর আলাদা আলাদা অংশ তৈরি করতে পারেন:
| Command | বর্ণনা |
|---|---|
build:trace_processor |
Perfetto-এর trace_processor লেটেস্ট ভার্সন চেক করে এবং আবার তৈরি করে। |
build:protos |
প্রোটো সংজ্ঞা রিকম্পাইল করে। |
টেস্ট চালান
Winscope-এ ইউনিট ও এন্ড-টু-এন্ড টেস্ট থাকে। এগুলি রান করাতে npm run
<command> ব্যবহার করুন:
| Command | বর্ণনা |
|---|---|
test:unit:ci |
CI বা প্রি-সাবমিট হুকের জন্য কম ভার্বোস ফর্ম্যাটে ইউনিট টেস্ট রান করে। |
test:unit:dev |
স্থানীয় ডেভেলপমেন্টের জন্য আরও বিস্তারিত ফর্ম্যাটে ইউনিট টেস্ট রান করে। এই মোড পরিবর্তন লক্ষ্য করে এবং অটোমেটিক সঠিক টেস্ট আবার রান করে। |
test:e2e |
ক্রস-টুল প্রোটোকলের মতো এন্ড-টু-এন্ড পরীক্ষা চালায়। |
test:presubmit:quiet |
CI বা প্রি-সাবমিট হুকের জন্য কম ভার্বোস ফর্ম্যাটে সমস্ত প্রি-সাবমিট ইউনিট টেস্ট, লিন্টার এবং গ্রাফ বিশ্লেষণ তৈরি করে। |
test:presubmit |
লোকাল ডেভেলপমেন্টের জন্য আরও বিস্তারিত ফর্ম্যাটে সব প্রিসাবমিট ইউনিট টেস্ট, লিন্টার ও গ্রাফ বিশ্লেষণ তৈরি করে। |
test:all |
লোকাল ডেভেলপমেন্টের জন্য আরও ভার্বোস ফর্ম্যাটে সমস্ত টেস্ট (ইউনিট এবং এন্ড-টু-এন্ড), লিন্টার এবং গ্রাফ বিশ্লেষণ রান করে। |
এন্ড-টু-এন্ড টেস্ট
এন্ড-টু-এন্ড টেস্ট চালানোর আগে, আপনাকে অবশ্যই রিমোট টুল চালু করতে হবে এবং Chrome ড্রাইভারের
সঠিক ভার্সন ইনস্টল করতে হবে। নিম্নলিখিত কোড স্নিপেটে, run test:e2e কমান্ডটি অটোমেটিক Chrome ড্রাইভার ইনস্টল করে।
$ npm run start
$ npm run start:remote_tool_mock
$ npm run test:e2e
নিচে দেওয়া সারণীতে প্রয়োজনীয় কমান্ড ও তার বিবরণ দেওয়া হল। এগুলি রান করাতে
npm run command ব্যবহার করুন:
| Command | বর্ণনা |
|---|---|
start:remote_tool_mock |
ক্রস টুল প্রোটোকল পরীক্ষা করার জন্য রিমোট টুল মক শুরু করে। |
install:chromedriver |
এন্ড-টু-এন্ড টেস্ট চালানোর জন্য প্রয়োজনীয় Chrome ড্রাইভার ইনস্টল করে। |
@IntDef ম্যাপিং আপডেট করা
@IntDef হল Android-এ ব্যবহৃত একটি অ্যানোটেশন যা কোনও
পূর্ণসংখ্যার সম্ভাব্য মান সীমিত করতে ব্যবহৃত হয়। Winscope, ইন্টিজারের পরিবর্তে ভ্যালুর নাম দেখানোর জন্য
এইসব অ্যানোটেশনের ম্যাপিং ব্যবহার করে।
Android ফ্রেমওয়ার্কে নতুন @IntDef ভ্যালু যোগ করা হলে, কিন্তু
Winscope-এ আপডেট করা না হলে, সেগুলি বর্ণনামূলক
স্ট্রিংয়ের পরিবর্তে কাঁচা পূর্ণসংখ্যা ভ্যালু হিসেবে দেখানো হয়। এই সমস্যার সমাধান করতে, IntDef ম্যাপিং ফাইল আপডেট করুন
(development/tools/winscope/src/common/intDefMapping.json)।
@IntDef ম্যাপিং অটোমেটিক আপডেট করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
আপনার লোকাল Android ট্রির
development/tools/winscope/scripts/ডিরেক্টরি থেকেupdate_intdef_mappings.shস্ক্রিপ্ট রান করুন। এই স্ক্রিপ্ট অ্যানোটেশন প্রসেস ট্রিগার করে যা কোড থেকে লেটেস্ট@IntDefভ্যালু এক্সট্র্যাক্ট করে এবংintDefMapping.jsonআপডেট করে:cd development/tools/winscope ./scripts/update_intdef_mappings.shgit commitকমান্ড ব্যবহার করেsrc/common/intDefMapping.json-এ পরিবর্তনগুলি কমিট করুন এবংrepo uploadকমান্ড ব্যবহার করে সেগুলি আপলোড করুন।
স্ক্রিপ্ট উপলভ্য না থাকলে, আপনার Android রুট ডিরেক্টরি ($ANDROID_BUILD_TOP) থেকে @IntDef
ম্যাপিং ম্যানুয়ালি আপডেট করতে, এইসব ধাপ অনুসরণ করুন:
অ্যানোটেশন প্রিপ্রোসেসর চালানোর জন্য
framework-minus-apex-intdefsতৈরি করুন:m framework-minus-apex-intdefsজেনারেট করা
intDefMapping.jsonফাইলটি প্রি-বিল্ট রিপোজিটরিতে কপি করুন:$ python3 -c 'import sys,json,collections; print(json.dumps(collections.OrderedDict(sorted(collections.ChainMap(*map(lambda x:json.load(open(x)), sys.argv[1:])).items())), indent=2))' $(find out/soong/.intermediates/frameworks/base -iname intDefMapping.json) > ./development/tools/winscope/src/common/intDefMapping.jsonrepo uploadব্যবহার করে Winscope-এ পরিবর্তন আপলোড করুন।
অন্যান্য কমান্ড
বিল্ড ও টেস্ট ছাড়াও, Winscope স্ক্রিপ্টে অন্যান্য ক্ষমতা আছে, যেমন
টেবিলে দেখানো হয়েছে। এগুলি রান করাতে npm run command ব্যবহার করুন:
| Command | বর্ণনা |
|---|---|
format:check |
prettier ব্যবহার করে কোড ফর্ম্যাটিং সংক্রান্ত সমস্যা চেক করে। |
format:fix |
prettier ব্যবহার করে কোড ফর্ম্যাটিং সংক্রান্ত সমস্যা চেক করে অটোমেটিক সমাধান করে। |
eslint:check |
eslint ব্যবহার করে কোড ফর্ম্যাটিং সংক্রান্ত সমস্যা চেক করে। |
eslint:fix |
eslint ব্যবহার করে কোড ফর্ম্যাটিং সংক্রান্ত সমস্যা চেক করে অটোমেটিক সমাধান করে। |
tslint:check |
tslint ব্যবহার করে কোড ফর্ম্যাটিং সংক্রান্ত সমস্যা চেক করে। |
tslint:fix |
tslint ব্যবহার করে কোড ফর্ম্যাটিং সংক্রান্ত সমস্যা চেক করে অটোমেটিক সমাধান করে। |
deps_graph:check_cycles |
সাইক্লিক্যাল ডিপেন্ডেন্সির জন্য কোড বিশ্লেষণ করে। |
সমস্যার সমাধান করুন
সমস্যার সমাধান করতে নিম্নলিখিত পরামর্শ ব্যবহার করুন:
সমস্যা
ProtocolError: missing required '<FIELD>'বাTypeError: Cannot read property '<PROP>' of nullনতুন প্রোটো ডেফিনিশন দিয়ে ট্রেস ফাইল তৈরি করা হলে এটি ঘটে, যার মধ্যে নতুন আবশ্যকীয় ফিল্ড থাকে।
- আপনি সঠিক Winscope ভার্সনে (মাস্টার, S বা R) ট্রেস খুলছেন কিনা তা নিশ্চিত করুন।
আপনি প্রোটোতে নতুন ফিল্ড তৈরি করলে,
npm run build:protosব্যবহার করে Winscope-এ প্রোটো রিকম্পাইল করুন।
ইনস্টল করা কিছু ডিপেনডেন্সি ভার্সন ভুল (বিল্ড করা যায়নি)
package.jsonওpackage-lock.json-এ করা পরিবর্তন আগের অবস্থায় ফিরিয়ে আনুন। সরানnode_modules.npm installআবার চালান।
আমি একটি প্রোটো ফাইলে নতুন ফিল্ড যোগ করেছি। আমি কীভাবে এটি দেখাব?
- Winscope কম্পাইল করার সময় থেকে প্রোটো ডেফিনেশন ব্যবহার করে, তাই নতুন
ফিল্ড ডিফল্ট হিসেবে দেখা যাবে না। নতুন ফিল্ড দেখাতে,
npm run build:protosব্যবহার করে প্রোটো আবার তৈরি করুন।
- Winscope কম্পাইল করার সময় থেকে প্রোটো ডেফিনেশন ব্যবহার করে, তাই নতুন
ফিল্ড ডিফল্ট হিসেবে দেখা যাবে না। নতুন ফিল্ড দেখাতে,