উইনস্কোপ ট্রেসিং অ্যান্ড্রয়েড ফ্রেমওয়ার্কের একটি অংশ। এই পৃষ্ঠায় স্থানীয়ভাবে উইনস্কোপ ট্রেস ভিউয়ার ডাউনলোড, বিল্ড এবং রান করার জন্য প্রয়োজনীয় ধাপগুলো বর্ণনা করা হয়েছে।
স্থানীয়ভাবে উইনস্কোপ তৈরি করুন
আপনার পিসিতে উইনস্কোপ ট্রেসার চালানোর জন্য এই ধাপগুলো অনুসরণ করুন:
- অ্যান্ড্রয়েড সোর্স ডাউনলোড করুন ।
Winscope ফোল্ডারে যান:
cd development/tools/winscopeনিম্নলিখিত পদ্ধতি ব্যবহার করে নির্ভরতা ইনস্টল করুন:
npm installউপলব্ধ কমান্ডগুলোর তালিকা দেখতে, চালান:
npm runনিম্নলিখিত পদ্ধতি ব্যবহার করে সমস্ত প্রোডাকশন এবং টেস্ট টার্গেট বিল্ড করুন:
npm run build:prodনিম্নলিখিত পদ্ধতি ব্যবহার করে উইনস্কোপ চালান:
npm run start
আলাদা অংশ তৈরি করুন
আপনি নিম্নলিখিত কমান্ডগুলো ব্যবহার করে উইনস্কোপের প্রতিটি অংশ আলাদাভাবে বিল্ড করতে পারেন:
| আদেশ | বর্ণনা |
|---|---|
build:trace_processor | সর্বশেষ সংস্করণটি পরীক্ষা করে এবং পুনর্নির্মাণ করে। পারফেটোর trace_processor । |
build:protos | প্রোটো ডেফিনিশনগুলো পুনরায় কম্পাইল করে। |
পরীক্ষা চালান
উইনস্কোপে ইউনিট এবং এন্ড-টু-এন্ড টেস্ট রয়েছে। এগুলো চালানোর জন্য npm run <command> ব্যবহার করুন:
| আদেশ | বর্ণনা |
|---|---|
test:unit:ci | CI-এর জন্য ইউনিট টেস্টগুলো সংক্ষিপ্ত বিন্যাসে চালায়। অথবা প্রিসাবমিট হুক। |
test:unit:dev | ইউনিট টেস্টগুলো আরও বিশদ বিন্যাসে চালায় স্থানীয় উন্নয়ন। এই মোড পরিবর্তন পর্যবেক্ষণ করে এবং স্বয়ংক্রিয়ভাবে সঠিক পরীক্ষাগুলো পুনরায় চালায়। |
test:e2e | এন্ড-টু-এন্ড টেস্টগুলো চালায়, যেমনটি এর জন্য ক্রস-টুল প্রোটোকল। |
test:presubmit:quiet | জমা দেওয়ার আগে সমস্ত ইউনিট টেস্ট, লিন্টার এবং গ্রাফ তৈরি করে। CI বা প্রিসাবমিটের জন্য সংক্ষিপ্ত বিন্যাসে বিশ্লেষণ হুক। |
test:presubmit | জমা দেওয়ার আগে সমস্ত ইউনিট টেস্ট, লিন্টার এবং গ্রাফ তৈরি করে। স্থানীয়দের জন্য আরও বিশদ বিন্যাসে বিশ্লেষণ উন্নয়ন। |
test:all | সমস্ত টেস্ট (ইউনিট ও এন্ড-টু-এন্ড) চালায়, লিন্টার করে, এবং স্থানীয়দের জন্য আরও বিশদ বিন্যাসে গ্রাফ বিশ্লেষণ উন্নয়ন। |
এন্ড-টু-এন্ড পরীক্ষা
এন্ড-টু-এন্ড টেস্ট চালানোর আগে, আপনাকে অবশ্যই রিমোট টুলটি চালু করতে হবে এবং ক্রোম ড্রাইভারের সঠিক সংস্করণটি ইনস্টল করতে হবে। নিম্নলিখিত কোড স্নিপেটে, ` run test:e2e কমান্ডটি স্বয়ংক্রিয়ভাবে ক্রোম ড্রাইভার ইনস্টল করে।
$ npm run start
$ npm run start:remote_tool_mock
$ npm run test:e2e
নিচের সারণিতে প্রয়োজনীয় কমান্ড এবং তাদের বিবরণ দেওয়া হলো। এগুলো চালানোর জন্য npm run command ব্যবহার করুন:
| আদেশ | বর্ণনা |
|---|---|
start:remote_tool_mock | ক্রস টুল প্রোটোকল পরীক্ষার জন্য রিমোট টুল মক চালু করে। |
install:chromedriver | এন্ড-টু-এন্ড টেস্ট চালানোর জন্য প্রয়োজনীয় ক্রোম ড্রাইভার ইনস্টল করে। |
@IntDef ম্যাপিং আপডেট করুন
@IntDef হলো অ্যান্ড্রয়েডের একটি অ্যানোটেশন যা একটি ইন্টিজারের সম্ভাব্য মান সীমিত করতে ব্যবহৃত হয়। উইনস্কোপ ইন্টিজারের পরিবর্তে মানটির নাম প্রদর্শন করার জন্য এই অ্যানোটেশনগুলোর একটি ম্যাপিং ব্যবহার করে।
যদি অ্যান্ড্রয়েড ফ্রেমওয়ার্কে নতুন @IntDef ভ্যালু যোগ করা হয় কিন্তু উইনস্কোপে (Winscope) তা আপডেট করা না হয়, তাহলে সেগুলো বর্ণনামূলক স্ট্রিংয়ের পরিবর্তে সরাসরি পূর্ণসংখ্যা (raw integer) হিসেবে প্রদর্শিত হয়। এই সমস্যাটি সমাধান করতে, IntDef ম্যাপিং ফাইলটি ( development/tools/winscope/src/common/intDefMapping.json ) আপডেট করুন।
@IntDef ম্যাপিং স্বয়ংক্রিয়ভাবে আপডেট করতে, নিম্নলিখিতগুলি করুন:
আপনার স্থানীয় অ্যান্ড্রয়েড ট্রি-তে থাকা
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_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-এ পরিবর্তনগুলো আপলোড করুন।
অন্যান্য কমান্ড
বিল্ড এবং টেস্ট ছাড়াও, উইনস্কোপ স্ক্রিপ্টগুলিতে অন্যান্য ক্ষমতাও রয়েছে, যা সারণিতে দেখানো হয়েছে। সেগুলি চালানোর জন্য npm run 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-এ
npm run build:protos. কমান্ড ব্যবহার করে প্রোটোগুলো পুনরায় কম্পাইল করুন।
ইনস্টল করা কিছু ডিপেন্ডেন্সির ভার্সন ভুল (বিল্ড ব্যর্থ হয়)
-
package.jsonএবংpackage-lock.jsonএ করা পরিবর্তনগুলো পূর্বাবস্থায় ফিরিয়ে আনুন।node_modulesমুছে ফেলুন। আবারnpm installচালান।
-
আমি প্রোটো ফাইলগুলোর একটিতে একটি নতুন ফিল্ড যোগ করেছি। আমি এটি কীভাবে প্রদর্শন করব?
- Winscope কম্পাইল করার সময়কার প্রোটো ডেফিনিশনগুলো ব্যবহার করে, তাই নতুন ফিল্ডগুলো ডিফল্টভাবে দেখা যায় না। নতুন ফিল্ডগুলো দেখানোর জন্য,
npm run build:protosব্যবহার করে প্রোটোগুলো রি-বিল্ড করুন।
- Winscope কম্পাইল করার সময়কার প্রোটো ডেফিনিশনগুলো ব্যবহার করে, তাই নতুন ফিল্ডগুলো ডিফল্টভাবে দেখা যায় না। নতুন ফিল্ডগুলো দেখানোর জন্য,