apksigner টুল, রিভিশন 24.0.3 এবং Android SDK Build Tools-এর উচ্চতর সংস্করণে উপলব্ধ, আপনাকে APK-এ স্বাক্ষর করতে এবং নিশ্চিত করতে দেয় যে একটি APK-এর স্বাক্ষর সেই APK দ্বারা সমর্থিত Android প্ল্যাটফর্মের সমস্ত সংস্করণে সফলভাবে যাচাই করা হবে।
এই পৃষ্ঠাটি টুল ব্যবহারের জন্য একটি সংক্ষিপ্ত নির্দেশিকা উপস্থাপন করে এবং টুলটি সমর্থন করে এমন বিভিন্ন কমান্ড-লাইন বিকল্পের জন্য একটি রেফারেন্স হিসাবে কাজ করে। কিভাবে apksigner টুল আপনার APK সাইন ইন করার জন্য ব্যবহার করা হয় তার আরো সম্পূর্ণ বিবরণের জন্য, আপনার অ্যাপ সাইন করুন দেখুন।
সতর্কতা: আপনি যদি apksigner ব্যবহার করে আপনার APK স্বাক্ষর করেন এবং APK-এ আরও পরিবর্তন করেন, তাহলে APK-এর স্বাক্ষর বাতিল হয়ে যাবে। আপনি যদি আপনার APK সারিবদ্ধ করতে zipalign ব্যবহার করেন, তাহলে APK সাইন করার আগে এটি ব্যবহার করুন।
ব্যবহার
একটি APK স্বাক্ষর করুন
apksigner টুল ব্যবহার করে একটি APK স্বাক্ষর করার জন্য সিনট্যাক্স নিম্নরূপ:
apksigner sign --ks keystore.jks | --key key.pk8 --cert cert.x509.pem [signer_options] app-name.apk
আপনি যখন apksigner টুল ব্যবহার করে একটি APK স্বাক্ষর করেন, তখন আপনাকে অবশ্যই স্বাক্ষরকারীর ব্যক্তিগত কী এবং শংসাপত্র প্রদান করতে হবে। আপনি এই তথ্য দুটি উপায়ে অন্তর্ভুক্ত করতে পারেন:
-
--ksবিকল্প ব্যবহার করে একটি কীস্টোর ফাইল নির্দিষ্ট করুন। - যথাক্রমে
--keyএবং--certবিকল্পগুলি ব্যবহার করে ব্যক্তিগত কী ফাইল এবং শংসাপত্র ফাইল পৃথকভাবে নির্দিষ্ট করুন। ব্যক্তিগত কী ফাইলটি অবশ্যই PKCS #8 ফর্ম্যাট ব্যবহার করতে হবে এবং শংসাপত্র ফাইলটি অবশ্যই X.509 ফর্ম্যাট ব্যবহার করবে৷
সাধারণত, আপনি শুধুমাত্র একজন স্বাক্ষরকারী ব্যবহার করে একটি APK স্বাক্ষর করেন। আপনি যদি একাধিক স্বাক্ষরকারী ব্যবহার করে একটি APK সাইন করতে চান তবে প্রতিটি স্বাক্ষরকারীর জন্য আবেদন করার জন্য সাধারণ বিকল্পগুলির সেট আলাদা করতে --next-signer বিকল্পটি ব্যবহার করুন:
apksigner sign [signer_1_options] --next-signer [signer_2_options] app-name.apk
একটি APK এর স্বাক্ষর যাচাই করুন
সমর্থিত প্ল্যাটফর্মগুলিতে একটি APK এর স্বাক্ষরের সফল যাচাইকরণ নিশ্চিত করার জন্য সিনট্যাক্স নিম্নরূপ:
apksigner verify [options] app-name.apk
সাইনিং কী ঘোরান
একটি স্বাক্ষর শংসাপত্রের বংশ , বা স্বাক্ষরের একটি নতুন ক্রম ঘোরানোর জন্য বাক্য গঠন নিম্নরূপ:
$ apksigner rotate --in /path/to/existing/lineage \ --out /path/to/new/file \ --old-signer --ks old-signer-jks \ --new-signer --ks new-signer-jks
অপশন
নিম্নলিখিত তালিকাগুলি প্রতিটি কমান্ডের জন্য বিকল্পগুলির সেট অন্তর্ভুক্ত করে যা apksigner টুল সমর্থন করে।
সাইন কমান্ড
apksigner সাইন কমান্ডে নিম্নলিখিত বিকল্প রয়েছে।
সাধারণ বিকল্প
নিম্নলিখিত বিকল্পগুলি একটি স্বাক্ষরকারীকে প্রয়োগ করার জন্য মৌলিক সেটিংস নির্দিষ্ট করে:
-
--out <apk-filename> - যে অবস্থানে আপনি স্বাক্ষরিত APK সংরক্ষণ করতে চান৷ যদি এই বিকল্পটি স্পষ্টভাবে প্রদান করা না হয়, তাহলে APK প্যাকেজটি সাইন ইন করা হয়, যা ইনপুট APK ফাইলটিকে ওভাররাইট করে।
-
--min-sdk-version <integer> - সর্বনিম্ন Android ফ্রেমওয়ার্ক API স্তর যা
apksignerব্যবহার করে নিশ্চিত করতে যে APK-এর স্বাক্ষর যাচাই করা হবে। উচ্চতর মানগুলি অ্যাপটিতে স্বাক্ষর করার সময় সরঞ্জামটিকে শক্তিশালী সুরক্ষা পরামিতি ব্যবহার করার অনুমতি দেয় তবে Android এর সাম্প্রতিক সংস্করণে চলমান ডিভাইসগুলিতে APK-এর উপলব্ধতা সীমাবদ্ধ করে৷ ডিফল্টরূপে,apksignerঅ্যাপের ম্যানিফেস্ট ফাইল থেকেminSdkVersionবৈশিষ্ট্যের মান ব্যবহার করে। -
--max-sdk-version <integer> - সর্বোচ্চ Android ফ্রেমওয়ার্ক API স্তর যা
apksignerনিশ্চিত করতে ব্যবহার করে যে APK-এর স্বাক্ষর যাচাই করা হবে। ডিফল্টরূপে, টুলটি সর্বোচ্চ সম্ভাব্য API স্তর ব্যবহার করে। -
--rotation-min-sdk-version <integer> - APK-এর স্বাক্ষর তৈরি করতে APK-এর ঘোরানো সাইনিং কী ব্যবহার করা উচিত সর্বনিম্ন API স্তর৷ APK-এর জন্য আসল (আনরোটেটেড) সাইনিং কীটি আগের সমস্ত প্ল্যাটফর্ম সংস্করণের জন্য ব্যবহার করা হবে। ডিফল্টরূপে, ঘোরানো সাইনিং কীগুলি, যেগুলি Android 13 (API স্তর 33) বা উচ্চতর চালিত ডিভাইসগুলিতে সমর্থিত, v3.1 সাইনিং ব্লকের সাথে ব্যবহার করা হয়৷
-
--v1-signing-enabled <true | false> -
apksignerপ্রথাগত, JAR-ভিত্তিক সাইনিং স্কিম ব্যবহার করে প্রদত্ত APK প্যাকেজে স্বাক্ষর করে কিনা তা নির্ধারণ করে। ডিফল্টরূপে, এই স্বাক্ষর স্কিমটি কখন প্রয়োগ করতে হবে তা নির্ধারণ করতে টুলটি--min-sdk-versionএবং--max-sdk-versionমান ব্যবহার করে। -
--v2-signing-enabled <true | false> -
apksignerAPK স্বাক্ষর স্কিম v2 ব্যবহার করে প্রদত্ত APK প্যাকেজে স্বাক্ষর করে কিনা তা নির্ধারণ করে। ডিফল্টরূপে, এই স্বাক্ষর স্কিমটি কখন প্রয়োগ করতে হবে তা নির্ধারণ করতে টুলটি--min-sdk-versionএবং--max-sdk-versionমান ব্যবহার করে। -
--v3-signing-enabled <true | false> -
apksignerAPK স্বাক্ষর স্কিম v3 ব্যবহার করে প্রদত্ত APK প্যাকেজে স্বাক্ষর করে কিনা তা নির্ধারণ করে। ডিফল্টরূপে, এই স্বাক্ষর স্কিমটি কখন প্রয়োগ করতে হবে তা নির্ধারণ করতে টুলটি--min-sdk-versionএবং--max-sdk-versionমান ব্যবহার করে। -
--v4-signing-enabled <true | false | only> apksignerAPK স্বাক্ষর স্কিম v4 ব্যবহার করে প্রদত্ত APK প্যাকেজে স্বাক্ষর করে কিনা তা নির্ধারণ করে। এই স্কিমটি একটি পৃথক ফাইলে একটি স্বাক্ষর তৈরি করে (apk-name .apk.idsig)। যদিtrueএবং APK স্বাক্ষরিত না হয়, তাহলে--min-sdk-versionএবং--max-sdk-versionমানগুলির উপর ভিত্তি করে একটি v2 বা v3 স্বাক্ষর তৈরি করা হয়। কমান্ডটি তখন স্বাক্ষরিত APK-এর বিষয়বস্তুর উপর ভিত্তি করে.idsigফাইল তৈরি করে।এপিকে পরিবর্তন না করে
onlyv4 স্বাক্ষর তৈরি করতে ব্যবহার করুন এবং আমন্ত্রণের আগে যে কোনো স্বাক্ষর ছিল।onlyব্যর্থ হয় যদি APK-এর আগে থেকে একটি v2 বা v3 স্বাক্ষর না থাকে বা যদি স্বাক্ষরটি বর্তমান আহ্বানের জন্য প্রদত্ত একটির চেয়ে আলাদা কী ব্যবহার করে।ডিফল্টরূপে, এই স্বাক্ষর স্কিমটি কখন প্রয়োগ করতে হবে তা নির্ধারণ করতে টুলটি
--min-sdk-versionএবং--max-sdk-versionমান ব্যবহার করে।-
-v,--verbose - ভার্বোস আউটপুট মোড ব্যবহার করুন।
দ্রষ্টব্য: আপনার অ্যাপ্লিকেশানটি যদি Android 12L (API লেভেল 32) বা তার নিচের কোনো ডিভাইসে একটি ঘূর্ণিত সাইনিং কী দ্বারা সাইন করা হয়ে থাকে, তাহলে আপনাকে অবশ্যই --rotation-min-sdk-version 28 ব্যবহার করতে হবে যাতে আপনার অ্যাপ্লিকেশানে সাইন করা চালিয়ে যেতে পারেন Android 9 (API লেভেল 28) এর জন্য সাইনিং কী।
প্রতি-স্বাক্ষরকারী বিকল্প
নিম্নলিখিত বিকল্পগুলি একটি নির্দিষ্ট স্বাক্ষরকারীর কনফিগারেশন নির্দিষ্ট করে। আপনি যদি শুধুমাত্র একজন স্বাক্ষরকারী ব্যবহার করে আপনার অ্যাপে সাইন করেন তবে এই বিকল্পগুলি প্রয়োজনীয় নয়৷
-
--next-signer <signer-options> - প্রতিটি স্বাক্ষরকারীর জন্য বিভিন্ন সাধারণ বিকল্প নির্দিষ্ট করার জন্য ব্যবহৃত হয়।
-
--v1-signer-name <basename> - বর্তমান স্বাক্ষরকারীর জন্য JAR-ভিত্তিক স্বাক্ষর সমন্বিত ফাইলগুলির ভিত্তি নাম। ডিফল্টরূপে,
apksignerএই স্বাক্ষরকারীর জন্য কীস্টোরের কী উপনাম বা কী ফাইলের মূল নাম ব্যবহার করে।
কী এবং সার্টিফিকেট বিকল্প
নিম্নলিখিত বিকল্পগুলি স্বাক্ষরকারীর ব্যক্তিগত কী এবং শংসাপত্র নির্দিষ্ট করে:
-
--ks <filename> - স্বাক্ষরকারীর ব্যক্তিগত কী এবং শংসাপত্রের চেইন প্রদত্ত জাভা-ভিত্তিক কীস্টোর ফাইলে থাকে। যদি ফাইলের নামটি
"NONE"তে সেট করা থাকে, কী এবং শংসাপত্র সহ কীস্টোরে নির্দিষ্ট ফাইলের প্রয়োজন নেই, যা কিছু PKCS #11 কীস্টোরের ক্ষেত্রে। -
--ks-key-alias <alias> - উপনামের নাম যা কীস্টোরের মধ্যে স্বাক্ষরকারীর ব্যক্তিগত কী এবং শংসাপত্রের ডেটা উপস্থাপন করে। যদি স্বাক্ষরকারীর সাথে যুক্ত কীস্টোরে একাধিক কী থাকে, তাহলে আপনাকে অবশ্যই এই বিকল্পটি নির্দিষ্ট করতে হবে।
-
--ks-pass <input-format> কীস্টোরের পাসওয়ার্ড যাতে স্বাক্ষরকারীর ব্যক্তিগত কী এবং শংসাপত্র রয়েছে৷ একটি কীস্টোর খুলতে আপনাকে অবশ্যই একটি পাসওয়ার্ড প্রদান করতে হবে৷
apksignerটুল নিম্নলিখিত বিন্যাস সমর্থন করে:-
pass:<password>– বাকিapksigner signকমান্ডের সাথে পাসওয়ার্ড ইনলাইনে দেওয়া আছে। -
env:<name>– পাসওয়ার্ড প্রদত্ত পরিবেশ ভেরিয়েবলে সংরক্ষণ করা হয়। -
file:<filename>- প্রদত্ত ফাইলে পাসওয়ার্ড একটি একক লাইন হিসাবে সংরক্ষণ করা হয়। -
stdin- পাসওয়ার্ড স্ট্যান্ডার্ড ইনপুট স্ট্রীমে একটি একক লাইন হিসাবে প্রদান করা হয়। এটি--ks-passএর জন্য ডিফল্ট আচরণ।
দ্রষ্টব্য: আপনি একই ফাইলে একাধিক পাসওয়ার্ড অন্তর্ভুক্ত করলে, সেগুলিকে আলাদা লাইনে উল্লেখ করুন।
apksignerটুলটি একটি APK এর স্বাক্ষরকারীদের সাথে পাসওয়ার্ড সংযুক্ত করে যে ক্রম অনুসারে আপনি স্বাক্ষরকারীদের নির্দিষ্ট করেন তার উপর ভিত্তি করে। আপনি যদি একজন স্বাক্ষরকারীর জন্য দুটি পাসওয়ার্ড দিয়ে থাকেন,apksignerপ্রথম পাসওয়ার্ডটিকে KeyStore পাসওয়ার্ড এবং দ্বিতীয়টিকে কী পাসওয়ার্ড হিসেবে ব্যাখ্যা করে।-
-
--pass-encoding <charset> - নির্দিষ্ট অক্ষর এনকোডিংগুলি অন্তর্ভুক্ত করে, যেমন
ibm437বাutf-8, যখন অ-ASCII অক্ষর ধারণকারী পাসওয়ার্ডগুলি পরিচালনা করার চেষ্টা করা হয়।কীটুল প্রায়ই কনসোলের ডিফল্ট অক্ষর সেট ব্যবহার করে পাসওয়ার্ড রূপান্তর করে কীস্টোরগুলিকে এনক্রিপ্ট করে। ডিফল্টরূপে,
apksignerপাসওয়ার্ডের বিভিন্ন ফর্ম ব্যবহার করে ডিক্রিপ্ট করার চেষ্টা করে:- ইউনিকোড ফর্ম
- JVM ডিফল্ট অক্ষরসেট ব্যবহার করে এনকোড করা ফর্ম
- Java 8 এবং তার বেশি বয়সে, কনসোলের ডিফল্ট অক্ষর সেট ব্যবহার করে ফর্মটি এনকোড করা হয়
Java 9 এ,
apksignerকনসোলের অক্ষর সেট সনাক্ত করতে পারে না। একটি অ-ASCII পাসওয়ার্ড ব্যবহার করা হলে আপনাকে--pass-encodingউল্লেখ করতে হতে পারে। আপনাকে কিস্টোরের সাথে এই বিকল্পটি নির্দিষ্ট করতে হতে পারে যা একটি ভিন্ন OS বা ভিন্ন লোকেলে তৈরি কী টুল। -
--key-pass <input-format> স্বাক্ষরকারীর ব্যক্তিগত কী-এর জন্য পাসওয়ার্ড, ব্যক্তিগত কীটি পাসওয়ার্ড সুরক্ষিত থাকলে প্রয়োজন হয়।
apksignerটুল নিম্নলিখিত বিন্যাস সমর্থন করে:-
pass:<password>– পাসওয়ার্ড বাকিapksigner signকমান্ডের সাথে ইনলাইনে দেওয়া হয়। -
env:<name>– পাসওয়ার্ড প্রদত্ত পরিবেশ ভেরিয়েবলে সংরক্ষণ করা হয়। -
file:<filename>- প্রদত্ত ফাইলে পাসওয়ার্ড একটি একক লাইন হিসাবে সংরক্ষণ করা হয়। -
stdin- পাসওয়ার্ড স্ট্যান্ডার্ড ইনপুট স্ট্রীমে একটি একক লাইন হিসাবে প্রদান করা হয়। এটি--key-passএর জন্য ডিফল্ট আচরণ।
-
-
--ks-type <algorithm> - কীস্টোরের সাথে যুক্ত টাইপ বা অ্যালগরিদম যাতে স্বাক্ষরকারীর ব্যক্তিগত কী এবং শংসাপত্র থাকে। ডিফল্টরূপে,
apksignerনিরাপত্তা বৈশিষ্ট্য ফাইলেkeystore.typeধ্রুবক হিসাবে সংজ্ঞায়িত টাইপ ব্যবহার করে। -
--ks-provider-name <name> - স্বাক্ষরকারীর কীস্টোর বাস্তবায়নের অনুরোধ করার সময় ব্যবহার করার জন্য JCA প্রদানকারীর নাম। ডিফল্টরূপে,
apksignerসর্বোচ্চ অগ্রাধিকার প্রদানকারী ব্যবহার করে। -
--ks-provider-class <class-name> - স্বাক্ষরকারীর কীস্টোর বাস্তবায়নের অনুরোধ করার সময় ব্যবহার করার জন্য JCA প্রদানকারীর সম্পূর্ণ যোগ্য শ্রেণীর নাম। এই বিকল্পটি
--ks-provider-nameএর বিকল্প হিসেবে কাজ করে। ডিফল্টরূপে,apksigner--ks-provider-nameবিকল্পের সাথে নির্দিষ্ট প্রদানকারী ব্যবহার করে। -
--ks-provider-arg <value> - JCA প্রোভাইডার ক্লাসের কনস্ট্রাক্টরের আর্গুমেন্ট হিসাবে পাস করার জন্য একটি স্ট্রিং মান; ক্লাস নিজেই
--ks-provider-classবিকল্প দিয়ে সংজ্ঞায়িত করা হয়। ডিফল্টরূপে,apksignerক্লাসের শূন্য-আর্গুমেন্ট কনস্ট্রাক্টর ব্যবহার করে। -
--key <filename> - ফাইলের নাম যেখানে স্বাক্ষরকারীর ব্যক্তিগত কী রয়েছে। এই ফাইলটি অবশ্যই PKCS #8 DER ফর্ম্যাট ব্যবহার করবে৷ যদি কীটি পাসওয়ার্ড সুরক্ষিত থাকে,
apksignerস্ট্যান্ডার্ড ইনপুট ব্যবহার করে পাসওয়ার্ডের জন্য অনুরোধ করে যদি না আপনি--key-passবিকল্পটি ব্যবহার করে একটি ভিন্ন ধরনের ইনপুট বিন্যাস উল্লেখ করেন। -
--cert <filename> - ফাইলের নাম যেখানে স্বাক্ষরকারীর শংসাপত্রের চেইন রয়েছে। এই ফাইলটি অবশ্যই X.509 PEM বা DER ফর্ম্যাট ব্যবহার করবে৷
আদেশ যাচাই করুন
apksigner verify কমান্ডে নিম্নলিখিত বিকল্প রয়েছে।
-
--print-certs - APK এর স্বাক্ষর শংসাপত্র সম্পর্কে তথ্য দেখান৷
-
--min-sdk-version <integer> - সর্বনিম্ন অ্যান্ড্রয়েড ফ্রেমওয়ার্ক API স্তর যা
apksignerনিশ্চিত করতে ব্যবহার করে যে APK-এর স্বাক্ষর যাচাই করা হবে। উচ্চতর মানগুলি অ্যাপটিতে স্বাক্ষর করার সময় সরঞ্জামটিকে শক্তিশালী সুরক্ষা পরামিতি ব্যবহার করার অনুমতি দেয় তবে Android এর সাম্প্রতিক সংস্করণে চলমান ডিভাইসগুলিতে APK-এর উপলব্ধতা সীমাবদ্ধ করে৷ ডিফল্টরূপে,apksignerঅ্যাপের ম্যানিফেস্ট ফাইল থেকেminSdkVersionবৈশিষ্ট্যের মান ব্যবহার করে। -
--max-sdk-version <integer> - সর্বোচ্চ Android ফ্রেমওয়ার্ক API স্তর যা
apksignerনিশ্চিত করতে ব্যবহার করে যে APK-এর স্বাক্ষর যাচাই করা হবে। ডিফল্টরূপে, টুলটি সর্বোচ্চ সম্ভাব্য API স্তর ব্যবহার করে। -
-v,--verbose - ভার্বোস আউটপুট মোড ব্যবহার করুন।
-
-Werr - সতর্কতাগুলিকে ত্রুটি হিসাবে বিবেচনা করুন।
উদাহরণ
নিচে apksigner ব্যবহার করে উদাহরণ দেওয়া হল।
একটি APK স্বাক্ষর করুন
release.jks ব্যবহার করে একটি APK সাইন ইন করুন, যা কীস্টোরে একমাত্র কী:
$ apksigner sign --ks release.jks app.apk
পৃথক ফাইল হিসাবে সংরক্ষণ করা একটি ব্যক্তিগত কী এবং শংসাপত্র ব্যবহার করে একটি APK স্বাক্ষর করুন:
$ apksigner sign --key release.pk8 --cert release.x509.pem app.apk
দুটি কী ব্যবহার করে একটি APK স্বাক্ষর করুন:
$ apksigner sign --ks first-release-key.jks --next-signer --ks second-release-key.jks app.apk
একটি ঘোরানো সাইনিং কী এবং ঘূর্ণন লক্ষ্যমাত্রা SDK সংস্করণ 28+ সহ একটি APK স্বাক্ষর করুন:
$ apksigner sign --ks release.jks --next-signer --ks release2.jks \ --lineage /path/to/signing/history/lineage app.apk \ --rotation-min-sdk-version 28
একটি ঘোরানো সাইনিং কী এবং ঘূর্ণন লক্ষ্যমাত্রা SDK সংস্করণ 33+ সহ একটি APK স্বাক্ষর করুন:
$ apksigner sign --ks release.jks --next-signer --ks release2.jks \ --lineage /path/to/signing/history/lineage app.apk
একটি APK এর স্বাক্ষর যাচাই করুন
APK সমর্থন করে এমন সমস্ত অ্যান্ড্রয়েড প্ল্যাটফর্মে APK-এর স্বাক্ষরগুলি বৈধ বলে নিশ্চিত করা হবে কিনা তা পরীক্ষা করুন:
$ apksigner verify app.apk
Android 4.0.3 (API স্তর 15) এবং উচ্চতর সংস্করণে APK-এর স্বাক্ষরগুলি বৈধ বলে নিশ্চিত করা হবে কিনা তা পরীক্ষা করুন:
$ apksigner verify --min-sdk-version 15 app.apk
সাইনিং কী ঘোরান
কী ঘূর্ণন সমর্থন করে এমন একটি স্বাক্ষর শংসাপত্রের বংশধর সক্রিয় করুন:
$ apksigner rotate --out /path/to/new/file --old-signer \
--ks release.jks --new-signer --ks release2.jksআপনার সাইনিং কীগুলি আবার ঘোরান:
$ apksigner rotate --in /path/to/existing/lineage \ --out /path/to/new/file --old-signer --ks release2.jks \ --new-signer --ks release3.jks