apksigner

Android SDK Build Tools-এর 24.0.3 এবং তার পরবর্তী সংস্করণে উপলব্ধ apksigner টুলটি আপনাকে APK স্বাক্ষর করতে এবং নিশ্চিত করতে দেয় যে সেই APK দ্বারা সমর্থিত Android প্ল্যাটফর্মের সমস্ত সংস্করণে একটি APK-এর স্বাক্ষর সফলভাবে যাচাই করা হবে।

এই পৃষ্ঠাটি টুলটি ব্যবহারের জন্য একটি সংক্ষিপ্ত নির্দেশিকা উপস্থাপন করে এবং টুলটি যে বিভিন্ন কমান্ড-লাইন বিকল্পগুলিকে সমর্থন করে তার জন্য একটি রেফারেন্স হিসেবে কাজ করে। আপনার APK সাইন করার জন্য apksigner টুলটি কীভাবে ব্যবহার করা হয় তার আরও সম্পূর্ণ বিবরণের জন্য, Sign your app দেখুন।

সাবধানতা: যদি আপনি 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 বিকল্পটি ব্যবহার করে একটি KeyStore ফাইল নির্দিষ্ট করুন।
  • যথাক্রমে --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 sign কমান্ডে নিম্নলিখিত বিকল্পগুলি রয়েছে।

সাধারণ বিকল্পগুলি

নিম্নলিখিত বিকল্পগুলি স্বাক্ষরকারীর ক্ষেত্রে প্রয়োগ করার জন্য মৌলিক সেটিংস নির্দিষ্ট করে:

--out <apk-filename>
আপনি যে স্থানে স্বাক্ষরিত APK সংরক্ষণ করতে চান। যদি এই বিকল্পটি স্পষ্টভাবে প্রদান না করা হয়, তাহলে APK প্যাকেজটি স্বাক্ষরিত অবস্থায় থাকে, যা ইনপুট APK ফাইলটি ওভাররাইট করে।
--min-sdk-version <integer>
APK-এর স্বাক্ষর যাচাই করা হবে কিনা তা নিশ্চিত করার জন্য apksigner সর্বনিম্ন Android ফ্রেমওয়ার্ক API স্তর ব্যবহার করে। উচ্চতর মান অ্যাপটি সাইন করার সময় টুলটিকে শক্তিশালী নিরাপত্তা পরামিতি ব্যবহার করার অনুমতি দেয় কিন্তু Android-এর সাম্প্রতিক সংস্করণগুলি ব্যবহার করে এমন ডিভাইসগুলিতে APK-এর উপলব্ধতা সীমিত করে। ডিফল্টরূপে, apksigner অ্যাপের ম্যানিফেস্ট ফাইল থেকে minSdkVersion অ্যাট্রিবিউটের মান ব্যবহার করে।
--max-sdk-version <integer>
APK-এর স্বাক্ষর যাচাই করা হবে কিনা তা নিশ্চিত করার জন্য apksigner যে সর্বোচ্চ Android ফ্রেমওয়ার্ক API স্তর ব্যবহার করে। ডিফল্টরূপে, টুলটি সর্বোচ্চ সম্ভাব্য API স্তর ব্যবহার করে।
--rotation-min-sdk-version <integer>
APK-এর সাইন তৈরি করতে APK-এর রোটেট সাইনিং কী-এর সর্বনিম্ন API লেভেল ব্যবহার করা উচিত। APK-এর জন্য আসল (আবর্তিত না হওয়া) সাইনিং কীটি পূর্ববর্তী সমস্ত প্ল্যাটফর্ম সংস্করণের জন্য ব্যবহার করা হবে। ডিফল্টরূপে, রোটেট সাইনিং কী, যা Android 13 (API লেভেল 33) বা উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে সমর্থিত, v3.1 সাইনিং ব্লকের সাথে ব্যবহার করা হয়।

দ্রষ্টব্য: যদি আপনার অ্যাপটি Android 12L (API লেভেল 32) বা তার নিচের ভার্সনে চালিত ডিভাইসে একটি ঘূর্ণিত সাইনিং কী দ্বারা স্বাক্ষরিত হয়ে থাকে, তাহলে Android 9 (API লেভেল 28) এর জন্য ঘূর্ণিত সাইনিং কী দিয়ে আপনার অ্যাপে স্বাক্ষর করা চালিয়ে যেতে আপনাকে --rotation-min-sdk-version 28 ব্যবহার করতে হবে।

--v1-signing-enabled <true | false>
apksigner প্রথাগত, JAR-ভিত্তিক স্বাক্ষর স্কিম ব্যবহার করে প্রদত্ত APK প্যাকেজে স্বাক্ষর করে কিনা তা নির্ধারণ করে। ডিফল্টরূপে, এই স্বাক্ষর স্কিমটি কখন প্রয়োগ করতে হবে তা নির্ধারণ করতে টুলটি --min-sdk-version এবং --max-sdk-version এর মান ব্যবহার করে।
--v2-signing-enabled <true | false>
apksigner APK Signature Scheme v2 ব্যবহার করে প্রদত্ত APK প্যাকেজে স্বাক্ষর করে কিনা তা নির্ধারণ করে। ডিফল্টরূপে, টুলটি --min-sdk-version এবং --max-sdk-version এর মান ব্যবহার করে এই স্বাক্ষর স্কিমটি কখন প্রয়োগ করতে হবে তা নির্ধারণ করে।
--v3-signing-enabled <true | false>
apksigner APK Signature Scheme v3 ব্যবহার করে প্রদত্ত APK প্যাকেজে স্বাক্ষর করে কিনা তা নির্ধারণ করে। ডিফল্টরূপে, টুলটি --min-sdk-version এবং --max-sdk-version এর মান ব্যবহার করে এই স্বাক্ষর স্কিমটি কখন প্রয়োগ করতে হবে তা নির্ধারণ করে।
--v4-signing-enabled <true | false | only>

apksigner APK Signature Scheme v4 ব্যবহার করে প্রদত্ত APK প্যাকেজে স্বাক্ষর করে কিনা তা নির্ধারণ করে। এই স্কিমটি একটি পৃথক ফাইলে ( apk-name .apk.idsig ) একটি স্বাক্ষর তৈরি করে। যদি true এবং APK স্বাক্ষরিত না হয়, তাহলে --min-sdk-version এবং --max-sdk-version এর মানের উপর ভিত্তি করে একটি v2 বা v3 স্বাক্ষর তৈরি করা হয়। তারপর কমান্ডটি স্বাক্ষরিত APK এর বিষয়বস্তুর উপর ভিত্তি করে .idsig ফাইল তৈরি করে।

APK এবং আমন্ত্রণের আগে থাকা কোনও স্বাক্ষর পরিবর্তন না করে শুধুমাত্র v4 স্বাক্ষর তৈরি করতে only ব্যবহার করুন। only তখনই ব্যর্থ হয় যখন APK-তে ইতিমধ্যেই v2 বা v3 স্বাক্ষর না থাকে অথবা স্বাক্ষরটি বর্তমান আমন্ত্রণের জন্য প্রদত্ত কী থেকে ভিন্ন কী ব্যবহার করে।

ডিফল্টরূপে, টুলটি --min-sdk-version এবং --max-sdk-version এর মান ব্যবহার করে এই স্বাক্ষর স্কিমটি কখন প্রয়োগ করতে হবে তা নির্ধারণ করে।

-v , --verbose
ভার্বোজ আউটপুট মোড ব্যবহার করুন।

প্রতি-স্বাক্ষরকারীর বিকল্পগুলি

নিম্নলিখিত বিকল্পগুলি একটি নির্দিষ্ট স্বাক্ষরকারীর কনফিগারেশন নির্দিষ্ট করে। আপনি যদি শুধুমাত্র একজন স্বাক্ষরকারী ব্যবহার করে আপনার অ্যাপে স্বাক্ষর করেন তবে এই বিকল্পগুলি প্রয়োজনীয় নয়।

--next-signer <signer-options>
প্রতিটি স্বাক্ষরকারীর জন্য বিভিন্ন সাধারণ বিকল্প নির্দিষ্ট করার জন্য ব্যবহৃত হয়।
--v1-signer-name <basename>
বর্তমান স্বাক্ষরকারীর জন্য JAR-ভিত্তিক স্বাক্ষর ধারণকারী ফাইলগুলির বেস নাম। ডিফল্টরূপে, apksigner KeyStore এর কী উপনাম অথবা এই স্বাক্ষরকারীর জন্য কী ফাইলের বেস নাম ব্যবহার করে।

কী এবং সার্টিফিকেট বিকল্পগুলি

নিম্নলিখিত বিকল্পগুলি স্বাক্ষরকারীর ব্যক্তিগত কী এবং শংসাপত্র নির্দিষ্ট করে:

--ks <filename>
স্বাক্ষরকারীর ব্যক্তিগত কী এবং সার্টিফিকেট শৃঙ্খল প্রদত্ত জাভা-ভিত্তিক কীস্টোর ফাইলে থাকে। যদি ফাইলের নাম "NONE" তে সেট করা থাকে, তাহলে কী এবং সার্টিফিকেট ধারণকারী কীস্টোরের কোনও ফাইল নির্দিষ্ট করার প্রয়োজন হয় না, যা কিছু PKCS #11 কীস্টোরের ক্ষেত্রে প্রযোজ্য।
--ks-key-alias <alias>
KeyStore-এর মধ্যে স্বাক্ষরকারীর ব্যক্তিগত কী এবং সার্টিফিকেট ডেটা প্রতিনিধিত্বকারী উপনামের নাম। যদি স্বাক্ষরকারীর সাথে যুক্ত KeyStore-এ একাধিক কী থাকে, তাহলে আপনাকে অবশ্যই এই বিকল্পটি নির্দিষ্ট করতে হবে।
--ks-pass <input-format>

KeyStore-এর পাসওয়ার্ড যাতে স্বাক্ষরকারীর ব্যক্তিগত কী এবং সার্টিফিকেট থাকে। KeyStore খোলার জন্য আপনাকে একটি পাসওয়ার্ড প্রদান করতে হবে। apksigner টুল নিম্নলিখিত ফর্ম্যাটগুলিকে সমর্থন করে:

  • pass:<password>apksigner sign কমান্ডের বাকি অংশের সাথে ইনলাইনে পাসওয়ার্ড দেওয়া হয়েছে।
  • env:<name> – পাসওয়ার্ডটি প্রদত্ত পরিবেশ ভেরিয়েবলে সংরক্ষণ করা হয়।
  • file:<filename> – প্রদত্ত ফাইলে পাসওয়ার্ড একটি একক লাইন হিসেবে সংরক্ষণ করা হয়।
  • stdin – স্ট্যান্ডার্ড ইনপুট স্ট্রিমে পাসওয়ার্ড একটি একক লাইন হিসেবে প্রদান করা হয়। এটি --ks-pass এর জন্য ডিফল্ট আচরণ।

দ্রষ্টব্য: যদি আপনি একই ফাইলে একাধিক পাসওয়ার্ড অন্তর্ভুক্ত করেন, তাহলে সেগুলি আলাদা লাইনে উল্লেখ করুন। apksigner টুলটি আপনি স্বাক্ষরকারীদের নির্দিষ্ট করার ক্রম অনুসারে APK এর স্বাক্ষরকারীদের সাথে পাসওয়ার্ড সংযুক্ত করে। যদি আপনি একজন স্বাক্ষরকারীর জন্য দুটি পাসওয়ার্ড প্রদান করে থাকেন, তাহলে apksigner প্রথম পাসওয়ার্ডটিকে KeyStore পাসওয়ার্ড এবং দ্বিতীয়টিটিকে কী পাসওয়ার্ড হিসাবে ব্যাখ্যা করে।

--pass-encoding <charset>
ASCII-বহির্ভূত অক্ষর ধারণকারী পাসওয়ার্ড পরিচালনা করার চেষ্টা করার সময় নির্দিষ্ট অক্ষর এনকোডিংগুলি অন্তর্ভুক্ত করে, যেমন ibm437 বা utf-8

Keytool প্রায়শই কনসোলের ডিফল্ট অক্ষর সেট ব্যবহার করে পাসওয়ার্ড রূপান্তর করে কীস্টোরগুলিকে এনক্রিপ্ট করে। ডিফল্টরূপে, apksigner বিভিন্ন ধরণের পাসওয়ার্ড ব্যবহার করে ডিক্রিপ্ট করার চেষ্টা করে:

  • ইউনিকোড ফর্ম
  • JVM ডিফল্ট অক্ষর সেট ব্যবহার করে এনকোড করা ফর্ম
  • জাভা ৮ এবং তার আগের সংস্করণগুলিতে, কনসোলের ডিফল্ট অক্ষর সেট ব্যবহার করে ফর্মটি এনকোড করা হয়েছে
  • জাভা ৯-এ, apksigner কনসোলের অক্ষর সেট সনাক্ত করতে পারে না। যখন একটি নন-ASCII পাসওয়ার্ড ব্যবহার করা হয় তখন আপনাকে --pass-encoding নির্দিষ্ট করতে হতে পারে। আপনাকে KeyStores-এর ক্ষেত্রেও এই বিকল্পটি নির্দিষ্ট করতে হতে পারে যে keytool একটি ভিন্ন OS বা ভিন্ন লোকেলে তৈরি করেছে।

    --key-pass <input-format>

    স্বাক্ষরকারীর ব্যক্তিগত কী-এর পাসওয়ার্ড, যা ব্যক্তিগত কী পাসওয়ার্ড সুরক্ষিত থাকলে প্রয়োজন হয়। apksigner টুল নিম্নলিখিত ফর্ম্যাটগুলিকে সমর্থন করে:

    • pass:<password>apksigner sign কমান্ডের বাকি অংশের সাথে পাসওয়ার্ড ইনলাইনে দেওয়া হয়েছে।
    • env:<name> – পাসওয়ার্ডটি প্রদত্ত পরিবেশ ভেরিয়েবলে সংরক্ষণ করা হয়।
    • file:<filename> – প্রদত্ত ফাইলে পাসওয়ার্ড একটি একক লাইন হিসেবে সংরক্ষণ করা হয়।
    • stdin – স্ট্যান্ডার্ড ইনপুট স্ট্রিমে পাসওয়ার্ড একটি একক লাইন হিসেবে প্রদান করা হয়। এটি --key-pass এর জন্য ডিফল্ট আচরণ।
    --ks-type <algorithm>
    KeyStore-এর সাথে সম্পর্কিত টাইপ বা অ্যালগরিদম যাতে স্বাক্ষরকারীর প্রাইভেট কী এবং সার্টিফিকেট থাকে। ডিফল্টরূপে, apksigner Security properties ফাইলে keystore.type ধ্রুবক হিসাবে সংজ্ঞায়িত টাইপ ব্যবহার করে।
    --ks-provider-name <name>
    স্বাক্ষরকারীর KeyStore বাস্তবায়নের অনুরোধ করার সময় JCA প্রদানকারীর নাম ব্যবহার করা হবে। ডিফল্টরূপে, apksigner সর্বোচ্চ-অগ্রাধিকার প্রদানকারী ব্যবহার করে।
    --ks-provider-class <class-name>
    স্বাক্ষরকারীর KeyStore বাস্তবায়নের অনুরোধ করার সময় JCA প্রোভাইডারের সম্পূর্ণ যোগ্য ক্লাস নাম ব্যবহার করা হবে। এই বিকল্পটি --ks-provider-name এর বিকল্প হিসেবে কাজ করে। ডিফল্টরূপে, apksigner --ks-provider-name বিকল্পের সাথে নির্দিষ্ট প্রোভাইডার ব্যবহার করে।
    --ks-provider-arg <value>
    JCA Provider ক্লাসের কনস্ট্রাক্টরের আর্গুমেন্ট হিসেবে একটি স্ট্রিং মান পাস করতে হবে; ক্লাসটি নিজেই --ks-provider-class বিকল্পের মাধ্যমে সংজ্ঞায়িত করা হয়। ডিফল্টরূপে, apksigner ক্লাসের জিরো-আর্গুমেন্ট কনস্ট্রাক্টর ব্যবহার করে।
    --key <filename>
    স্বাক্ষরকারীর ব্যক্তিগত কী ধারণকারী ফাইলের নাম। এই ফাইলটি অবশ্যই PKCS #8 DER ফর্ম্যাট ব্যবহার করবে। যদি কীটি পাসওয়ার্ড সুরক্ষিত থাকে, তাহলে apksigner স্ট্যান্ডার্ড ইনপুট ব্যবহার করে পাসওয়ার্ডের জন্য অনুরোধ করবে, যদি না আপনি --key-pass বিকল্পটি ব্যবহার করে ভিন্ন ধরণের ইনপুট ফর্ম্যাট নির্দিষ্ট করেন।
    --cert <filename>
    স্বাক্ষরকারীর সার্টিফিকেট চেইন ধারণকারী ফাইলের নাম। এই ফাইলটি অবশ্যই X.509 PEM অথবা DER ফর্ম্যাট ব্যবহার করবে।

    কমান্ড যাচাই করুন

    apksigner verify কমান্ডে নিম্নলিখিত বিকল্পগুলি রয়েছে।

    --print-certs
    APK এর স্বাক্ষরকারী সার্টিফিকেট সম্পর্কে তথ্য দেখান।
    --print-certs-pem
    APK এর স্বাক্ষরকারী শংসাপত্র সম্পর্কে তথ্য দেখান এবং প্রতিটি স্বাক্ষরকারী শংসাপত্রের PEM এনকোডিং stdout এ প্রিন্ট করুন।
    --min-sdk-version <integer>
    APK-এর স্বাক্ষর যাচাই করা হবে কিনা তা নিশ্চিত করার জন্য apksigner সর্বনিম্ন Android ফ্রেমওয়ার্ক API স্তর ব্যবহার করে। উচ্চতর মান অ্যাপটি সাইন করার সময় টুলটিকে শক্তিশালী নিরাপত্তা পরামিতি ব্যবহার করার অনুমতি দেয় কিন্তু Android-এর সাম্প্রতিক সংস্করণগুলি ব্যবহার করে এমন ডিভাইসগুলিতে APK-এর উপলব্ধতা সীমিত করে। ডিফল্টরূপে, apksigner অ্যাপের ম্যানিফেস্ট ফাইল থেকে minSdkVersion অ্যাট্রিবিউটের মান ব্যবহার করে।
    --max-sdk-version <integer>
    APK-এর স্বাক্ষর যাচাই করা হবে কিনা তা নিশ্চিত করার জন্য apksigner যে সর্বোচ্চ Android ফ্রেমওয়ার্ক API স্তর ব্যবহার করে। ডিফল্টরূপে, টুলটি সর্বোচ্চ সম্ভাব্য API স্তর ব্যবহার করে।
    -v , --verbose
    ভার্বোজ আউটপুট মোড ব্যবহার করুন।
    -Werr
    সতর্কতাগুলিকে ত্রুটি হিসেবে বিবেচনা করুন।

    উদাহরণ

    apksigner ব্যবহারের উদাহরণ নিচে দেওয়া হল।

    একটি APK সাইন করুন

    release.jks ব্যবহার করে একটি APK সাইন করুন, যা KeyStore-এর একমাত্র কী:

    $ 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
    

    অ্যান্ড্রয়েড ৪.০.৩ (এপিআই লেভেল ১৫) এবং তার উচ্চতর সংস্করণে 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