অ্যান্ড্রয়েড বিল্ডগুলিতে ডুপ্লিকেট মডিউল সমস্যাগুলি কাটিয়ে ওঠা
আপনি যদি কখনো Qt Android ডেভেলপমেন্ট প্রজেক্টে গভীর থেকে থাকেন শুধুমাত্র হঠাৎ রিলিজ বিল্ড সমস্যার মুখোমুখি হতে, আপনি হতাশা জানেন। 🛠 একটি বাহ্যিক লাইব্রেরি যোগ করা প্রায়শই একটি সাধারণ সমাধানের মতো মনে হয়, কিন্তু Qt এর মতো ফ্রেমওয়ার্কের সাথে জটিলতাগুলি দ্রুত দেখা দিতে পারে৷
এটি বিশেষভাবে সাধারণ যখন বহিরাগত লাইব্রেরি এছাড়াও বিকাশের জন্য Qt-এর উপর নির্ভর করে। আপনি ক্রিপ্টিক বার্তা পাবেন, যেমন "টাইপ org.kde.necessitas.ministro.IMinistro একাধিকবার সংজ্ঞায়িত করা হয়েছে", যা অপ্রত্যাশিতভাবে আপনার অগ্রগতি স্থগিত করতে পারে। এই ডুপ্লিকেশন দ্বন্দ্ব সাধারণত রিলিজ মোডে প্রদর্শিত হয়, যদিও সবকিছু ডিবাগ মোডে মসৃণভাবে কাজ করে।
Qt 5.15.2 এবং সাম্প্রতিক Android TargetSDK 34 এর মতো টুলগুলির সাথে, ইন্টিগ্রেশন কিছুটা ভারসাম্যপূর্ণ কাজ হয়ে ওঠে। কেন এই সদৃশগুলি ঘটে—এবং কীভাবে সেগুলিকে নির্মূল করা যায়—তা বোঝা আপনার রিলিজকে ট্র্যাকে ফিরিয়ে আনার জন্য অপরিহার্য।
এই নির্দেশিকায়, আমরা এই ত্রুটিগুলির মূল কারণগুলি এবং সেগুলি সমাধান করার জন্য ব্যবহারিক পদক্ষেপগুলির মধ্যে ডুব দেব, যাতে আপনি আপনার প্রকল্পটিকে নির্বিঘ্নে এগিয়ে নিয়ে যেতে পারেন৷ চলুন এই সমস্যাটি মোকাবিলা করি এবং আপনাকে কোনো বাধা ছাড়াই কোডিং-এ ফিরে আসি। 🚀
আদেশ | ব্যবহারের উদাহরণ |
---|---|
exclude group: | নির্দিষ্ট মডিউল বা লাইব্রেরি বাদ দিতে Gradle নির্ভরতায় ব্যবহৃত হয়। এই ক্ষেত্রে, এটি "org.kde.necessitas.ministro" লাইব্রেরীকে বিল্ড করার সময় ডুপ্লিকেট ক্লাস ত্রুটি সৃষ্টি করা থেকে বাধা দেয়। |
tools:node="remove" | অ্যান্ড্রয়েড ম্যানিফেস্ট ফাইলের একটি বৈশিষ্ট্য যা ম্যানিফেস্ট মার্জিংয়ের সময় একটি নির্দিষ্ট উপাদানকে সরিয়ে দেয় বা উপেক্ষা করে, যা Ministro-এর মতো অবাঞ্ছিত পরিষেবাগুলি বাদ দেওয়ার জন্য আদর্শ৷ |
-keep class ... { *; } | একটি নির্দিষ্ট শ্রেণীর সমস্ত পদ্ধতি এবং ক্ষেত্র সংরক্ষণ করার জন্য একটি ProGuard নিয়ম, এখানে ProGuard কে Ministro লাইব্রেরি ক্লাসগুলিকে অস্পষ্ট করা থেকে বাধা দেয়৷ |
-dontwarn | একটি নির্দিষ্ট প্যাকেজ বা ক্লাসের সতর্কতা দমন করার জন্য একটি ProGuard নির্দেশিকা, যা বাদ দেওয়া মিনিস্ট্রো লাইব্রেরি সম্পর্কিত সতর্কতা প্রতিরোধ করতে এখানে ব্যবহৃত হয়। |
Class.forName | জাভা কমান্ড যা গতিশীলভাবে একটি ক্লাসকে তার নামের দ্বারা লোড করে, যা আমরা ইউনিট পরীক্ষায় নিশ্চিত করতে ব্যবহার করি যে "org.kde.necessitas.ministro" বিল্ডে উপস্থিত নেই। |
fail() | একটি JUnit পদ্ধতি যা একটি পরীক্ষাকে অবিলম্বে ব্যর্থ হতে বাধ্য করে, এখানে এমন ঘটনাগুলি ধরার জন্য ব্যবহৃত হয় যেখানে মিনিস্ট্রো ক্লাসটি সঠিকভাবে বাদ দেওয়া হয়নি। |
try-catch | ব্যতিক্রম পরিচালনার কাঠামো যা নির্দিষ্ট রানটাইম ব্যতিক্রমগুলি ক্যাপচার করে এবং পরিচালনা করে। এটি এখানে ClassNotFoundException ধরতে ব্যবহৃত হয় যদি বাদ দেওয়া Ministro ক্লাসটি প্রত্যাশা অনুযায়ী অনুপস্থিত থাকে। |
assertTrue() | একটি JUnit পদ্ধতি যা একটি বুলিয়ান অভিব্যক্তিকে সত্য বলে দাবি করে, এই পরীক্ষার ক্ষেত্রে নিশ্চিত করে যে মিনিস্ট্রো ক্লাসটি বিল্ডে সঠিকভাবে বাদ দেওয়া হয়েছে। |
implementation(project(":...")) | অপ্রয়োজনীয় মডিউলগুলি বাদ দেওয়ার মতো নির্দিষ্ট প্রকল্প নির্ভরতাগুলিকে সংশোধন করার ক্ষেত্রে নমনীয়তার অনুমতি দেয়, স্থানীয় প্রকল্প নির্ভরতা যুক্ত করতে গ্র্যাডল নির্ভরতা কমান্ড ব্যবহৃত হয়। |
অ্যান্ড্রয়েড বিল্ড কনফিগারেশনে ডুপ্লিকেট মডিউল পরিচালনা করা
প্রথম সমাধানটি মিনিস্ট্রো লাইব্রেরির সাথে দ্বন্দ্ব সমাধানের জন্য Gradle ব্যবহার করে। আপনি যখন Qt-এর উপর নির্ভর করে এমন একটি বাহ্যিক লাইব্রেরি যোগ করেন, Gradle কখনও কখনও ডুপ্লিকেট ক্লাস নিতে পারে, বিশেষ করে যদি তারা "org.kde.necessitas.ministro" প্যাকেজের মতো নির্ভরতা শেয়ার করে। এটি সমাধানের জন্য, আমরা মডিউল নির্ভরতা থেকে অপ্রয়োজনীয় মিনিস্ট্রো লাইব্রেরি বাদ দিতে build.gradle ফাইলটি কনফিগার করি। যোগ করে গ্রুপ বাদ নির্ভরতা ঘোষণার মধ্যে "org.kde.necessitas.ministro"-এর জন্য, আমরা এটিকে রিলিজ বিল্ডে অন্তর্ভুক্ত করা থেকে বিরত রাখি, ডুপ্লিকেশন ত্রুটি দূর করে। এই পদ্ধতিটি দক্ষ এবং মডুলার কারণ বর্জন শুধুমাত্র নির্দিষ্ট নির্ভরতার জন্য প্রয়োগ করা হয়। এটি আমাদের অপ্রয়োজনীয় সমস্যার ঝুঁকি ছাড়াই বহিরাগত লাইব্রেরির সম্পূর্ণ কার্যকারিতা ধরে রাখতে দেয়। 🛠️
আমাদের দ্বিতীয় পদ্ধতিটি ProGuard ব্যবহার করে, কোড অপ্টিমাইজেশন টুল যা সাধারণত অ্যান্ড্রয়েডে ব্যবহৃত হয়। ProGuard রিলিজ বিল্ডের জন্য অপ্রয়োজনীয় উপাদানগুলি সরিয়ে ফেলতে সাহায্য করে, যা অ্যাপের কর্মক্ষমতা অপ্টিমাইজ করার জন্য আদর্শ। নির্দিষ্ট যোগ করে ProGuard নিয়ম proguard-rules.pro-এ, আমরা ProGuard-কে Ministro লাইব্রেরির যেকোনো ডুপ্লিকেট এন্ট্রি উপেক্ষা করার নির্দেশ দিই। দ - ক্লাস রাখুন কমান্ড প্রোগার্ডকে মিনিস্ট্রো ক্লাসের সকল সদস্যকে ধরে রাখতে বলে, যখন - সতর্ক করবেন না কমান্ড এটি সম্পর্কিত যেকোন সতর্কবার্তাকে দমন করে। এটি নিশ্চিত করে যে ProGuard এই লাইব্রেরিতে হস্তক্ষেপ করবে না বা পুনরায় প্রক্রিয়া করার চেষ্টা করবে না, আমাদের একটি পরিষ্কার এবং আরও দক্ষ রিলিজ বিল্ড দেবে। ProGuard সমাধানটি বিশেষত ভাল কাজ করে যখন একাধিক নির্ভরতার সাথে কাজ করে যা জটিল উপায়ে ইন্টারঅ্যাক্ট করতে পারে, এটিকে Android বিকাশকারীদের জন্য একটি শক্তিশালী পছন্দ করে তোলে।
তৃতীয় সমাধান Android ম্যানিফেস্ট বিরোধ সরাসরি সমাধান করে। অ্যান্ড্রয়েড ম্যানিফেস্ট ফাইলগুলির জন্য একটি মার্জিং সিস্টেম ব্যবহার করে, যার অর্থ প্রতিটি নির্ভরতার ম্যানিফেস্ট বিল্ড টাইমে একটিতে মার্জ করা হয়। যখন বিভিন্ন লাইব্রেরি তাদের ম্যানিফেস্ট ফাইলগুলিতে মিনিস্ট্রোর মতো ডুপ্লিকেট পরিষেবাগুলি অন্তর্ভুক্ত করে তখন বিরোধ দেখা দেয়। এটি ঠিক করতে, আমরা আমাদের প্রধান মডিউলের AndroidManifest.xml ফাইলটি যোগ করে পরিবর্তন করি সরঞ্জাম: নোড = "সরানো" মন্ত্রিত্ব পরিষেবা ঘোষণার বৈশিষ্ট্য। এই বৈশিষ্ট্যটি বিল্ড সিস্টেমকে মিনিস্ট্রোকে মার্জ করা ম্যানিফেস্ট থেকে বাদ দেওয়ার নির্দেশ দেয়। এই পদ্ধতিটি সহজবোধ্য এবং একটি দ্বন্দ্ব-মুক্ত প্রকাশ নিশ্চিত করে, মুক্তির স্থিতিশীলতার জন্য অপরিহার্য। এটি বিশেষভাবে কার্যকর যদি আমাদের অন্যান্য মডিউল বা লাইব্রেরির ম্যানিফেস্ট ফাইলগুলিতে মূল কনফিগারেশনগুলি সংরক্ষণ করতে হয়, ডুপ্লিকেশন সমস্যা সমাধান করার সময় মডুলারিটি বজায় রাখতে হয়। 🚀
অবশেষে, মিনিস্ট্রো পরিষেবাটি রিলিজ বিল্ডে সঠিকভাবে বাদ দেওয়া হয়েছে তা নিশ্চিত করতে আমরা একটি ইউনিট পরীক্ষা যোগ করেছি। Java এর Class.forName ফাংশন ব্যবহার করে Ministro ক্লাস লোড করার চেষ্টা করে, আমরা এর অনুপস্থিতি যাচাই করি। যদি ক্লাসটি সফলভাবে লোড হয় তবে এটি নির্দেশ করে যে অপসারণটি সঠিকভাবে কার্যকর করা হয়নি, যার ফলে পরীক্ষাটি ব্যর্থ হয়েছে। আমরা তারপরে প্রত্যাশিত আচরণ যাচাই করতে JUnit-এর ব্যর্থতা এবং assertTrue ফাংশন ব্যবহার করি - হয় বাদ নিশ্চিত করা বা একটি সমস্যা নির্দেশ করে। এই পরীক্ষার পদ্ধতিটি শুধুমাত্র আমাদের সমাধানকে বৈধ করে না বরং আমাদের অ্যাপের রিলিজ বিল্ড অপ্টিমাইজ করা এবং ডুপ্লিকেশন দ্বন্দ্ব থেকে মুক্ত তা নিশ্চিত করে সম্ভাব্য সমস্যাগুলিকে তাড়াতাড়ি ধরতে সাহায্য করে। এই ধরনের প্রোঅ্যাকটিভ টেস্টিং সময় এবং সম্পদ সাশ্রয় করতে পারে, আপনি বিল্ড প্রক্রিয়ার সাথে এগিয়ে যাওয়ার সাথে সাথে মানসিক শান্তি প্রদান করে।
সমাধান 1: গ্রেডল এক্সক্লুশন নির্দিষ্ট করে ডুপ্লিকেট বাদ দিন
পদ্ধতি: নির্ভরতা বর্জনের জন্য গ্রেডল কনফিগারেশন ব্যবহার করা
// Open the build.gradle file in the module where the external library is added
// Add the following lines to exclude the Ministro service that is causing duplication
dependencies {
implementation(project(":yourExternalLibrary")) {
// Exclude Ministro library from this module to avoid duplicate errors
exclude group: 'org.kde.necessitas.ministro'
}
}
// After applying this configuration, rebuild the project and test the release build again
সমাধান 2: ডুপ্লিকেট সংজ্ঞা সমাধান করতে ProGuard নিয়ম ব্যবহার করে
পদ্ধতি: রিলিজ বিল্ডে ডুপ্লিকেট ক্লাস উপেক্ষা করার জন্য ProGuard ব্যবহার করা
// Open your proguard-rules.pro file
// Add the following rules to prevent ProGuard from processing the duplicate Ministro class
-keep class org.kde.necessitas.ministro. { *; }
-dontwarn org.kde.necessitas.ministro.
// Rebuild the project in release mode and verify if the duplication issue is resolved
// This approach tells ProGuard to skip processing for the Ministro classes
সমাধান 3: আপনার কাস্টম ম্যানিফেস্ট মার্জিং থেকে মিনিস্ট্রো সরান
পদ্ধতি: মিনিস্ট্রো পরিষেবা সরাতে অ্যান্ড্রয়েড ম্যানিফেস্ট মার্জিং নিয়ম ব্যবহার করে
// In your main AndroidManifest.xml, use tools:remove to ignore the Ministro service
// Ensure you add xmlns:tools in the manifest tag
<manifest xmlns:tools="http://schemas.android.com/tools">
<application>
<service
android:name="org.kde.necessitas.ministro.IMinistro"
tools:node="remove" />
</application>
</manifest>
// This approach removes Ministro service when merging manifests during release build
সমাধান 4: রিলিজ বিল্ড ইন্টিগ্রিটির জন্য ইউনিট টেস্টের বৈধতা
পদ্ধতি: ডুপ্লিকেট হ্যান্ডলিং কার্যকর কিনা তা নিশ্চিত করতে ইউনিট পরীক্ষা লেখা
// Example unit test file: DuplicateResolutionTest.kt
import org.junit.Test
import org.junit.Assert.*
// Test function to verify Ministro is excluded in release build
class DuplicateResolutionTest {
@Test
fun checkForMinistroExclusion() {
try {
// Attempt to load Ministro class to confirm it is removed
Class.forName("org.kde.necessitas.ministro.IMinistro")
fail("Ministro class should not be included")
} catch (e: ClassNotFoundException) {
// If ClassNotFoundException is caught, Ministro was successfully excluded
assertTrue(true)
}
}
}
জটিল অ্যান্ড্রয়েড বিল্ডে নির্ভরতা দ্বন্দ্বের সমাধান করা
অ্যান্ড্রয়েড বিকাশে একটি সাধারণ চ্যালেঞ্জ, বিশেষত ফ্রেমওয়ার্কের মতো Qt, নির্ভরতা পরিচালনা করছে যখন একাধিক লাইব্রেরি ভাগ করা মডিউল প্রবর্তন করে। এই সমস্যাটি প্রায়শই বড় অ্যাপ্লিকেশনগুলিতে দেখা দেয় যেখানে একটি বহিরাগত লাইব্রেরি একই ধরনের কাঠামো বা নির্ভরতার উপর নির্ভর করে, যার ফলে রিলিজ বিল্ডের সময় ডুপ্লিকেট মডিউল ত্রুটি দেখা দেয়। এই ক্ষেত্রে, মিনিস্ট্রো লাইব্রেরি দ্বন্দ্ব কারণ প্রধান অ্যাপ্লিকেশন এবং বহিরাগত লাইব্রেরি উভয়ই এটি অন্তর্ভুক্ত করে। এই দ্বন্দ্বগুলি প্রতিরোধ করতে, অ্যান্ড্রয়েড বিকাশকারীরা প্রায়শই নির্ভরতা পরিচালনার সরঞ্জামগুলি ব্যবহার করে Gradle বা ProGuard কোন উপাদান অন্তর্ভুক্ত করা হয় পরিমার্জিত করতে. 🛠️ বিল্ড স্থিতিশীলতা অপ্টিমাইজ করার জন্য এই অনুশীলনটি অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে রিলিজ মোডে।
আরেকটি গুরুত্বপূর্ণ দিক হল অ্যান্ড্রয়েডের মেনিফেস্ট মার্জ প্রক্রিয়া বোঝা। একটি অ্যান্ড্রয়েড অ্যাপের প্রতিটি মডিউল এবং লাইব্রেরির নিজস্ব AndroidManifest.xml রয়েছে, যা সিস্টেমটি নির্মাণ প্রক্রিয়ার সময় একত্রিত করে। যদি একাধিক ম্যানিফেস্ট একই পরিষেবার উল্লেখ করে, যেমনটি "org.kde.necessitas.ministro" এর সাথে দেখা যায়, তাহলে বিরোধ দেখা দেয় যা রিলিজ বিল্ডকে প্রভাবিত করে। যেমন নির্দিষ্ট সরঞ্জাম ব্যবহার করে tools:node="remove" ম্যানিফেস্টের মধ্যে, ডেভেলপাররা চূড়ান্ত মার্জড ম্যানিফেস্ট থেকে অপ্রয়োজনীয় পরিষেবা বা উপাদানগুলি সরাতে পারে৷ এই বৈশিষ্ট্যটি বিশেষভাবে সহায়ক যখন লাইব্রেরিগুলির সাথে কাজ করে যেগুলি বহু-মডিউল প্রকল্পগুলিতে অপ্রয়োজনীয় পরিষেবাগুলি প্রবর্তন করে৷ 📲
উপরন্তু, কনফিগারেশনগুলি সঠিকভাবে প্রয়োগ করা হয়েছে কিনা তা নিশ্চিত করার জন্য ইউনিট পরীক্ষা দিয়ে এই পরিবর্তনগুলিকে যাচাই করা একটি ভাল ধারণা। অ্যান্ড্রয়েডে যেমন টুলস JUnit মিনিস্ট্রো পরিষেবার মতো নির্দিষ্ট ক্লাসগুলি সঠিকভাবে বাদ দেওয়া হয়েছে কিনা তা আপনাকে পরীক্ষা করার অনুমতি দেয়। এই ধরনের কনফিগারেশনের জন্য পরীক্ষা করা উৎপাদনে রানটাইম সমস্যা এড়াতে সাহায্য করে এবং আপনাকে নিশ্চিত করে যে আপনার বিল্ড কনফিগারেশন স্থিতিশীল। এই সক্রিয় পদ্ধতিটি অ্যান্ড্রয়েডকে দক্ষ করে তোলে এবং অপ্রত্যাশিত ত্রুটিগুলি কমিয়ে দেয়, ডিবাগ করার সময় বাঁচায় এবং সামগ্রিক কোডের গুণমান উন্নত করে।
Qt অ্যান্ড্রয়েড বিল্ডে ডুপ্লিকেট মডিউল ত্রুটিগুলি পরিচালনা করার সাধারণ প্রশ্ন
- Qt অ্যান্ড্রয়েড প্রজেক্টে ডুপ্লিকেট মডিউল ত্রুটির কারণ কী?
- ডুপ্লিকেট মডিউল ত্রুটিগুলি সাধারণত সৃষ্ট হয় যখন মূল প্রকল্প এবং একটি বহিরাগত লাইব্রেরি উভয়ই একই নির্ভরতা অন্তর্ভুক্ত করে, যেমনটি দেখা যায় Ministro. অ্যান্ড্রয়েডের ম্যানিফেস্ট এবং ডিপেন্ডেন্সি ম্যানেজার একই ক্লাস লোড করে, যার ফলে বিরোধ দেখা দেয়।
- ডুপ্লিকেট নির্ভরতা এড়াতে আমি কিভাবে Gradle ব্যবহার করতে পারি?
- আপনি বর্জন উল্লেখ করতে পারেন build.gradle ফাইল ব্যবহার করে exclude group:. এই কমান্ডটি নকল এড়াতে বিল্ড থেকে নির্দিষ্ট নির্ভরতা সরিয়ে দেয়।
- রিলিজ তৈরিতে সাহায্য করার জন্য প্রোগার্ড কী করে?
- ProGuard অ্যাপটিকে অপ্টিমাইজ করে এবং সঙ্কুচিত করে, প্রায়শই নির্দিষ্ট লাইব্রেরি এড়িয়ে ডুপ্লিকেট ক্লাস এড়াতে ব্যবহৃত হয়। সঙ্গে ProGuard নিয়ম মত -keep class এবং -dontwarn, এটি রিলিজ বিল্ডে নির্দিষ্ট শ্রেণী উপেক্ষা করে।
- অ্যান্ড্রয়েড বিল্ডের জন্য ম্যানিফেস্ট মার্জ করা কি সবসময় প্রয়োজনীয়?
- হ্যাঁ, অ্যান্ড্রয়েড স্বয়ংক্রিয়ভাবে একটি প্রকল্পের সমস্ত লাইব্রেরি এবং মডিউল থেকে ম্যানিফেস্টগুলিকে একত্রিত করে৷ ব্যবহার করে tools:node="remove" চূড়ান্ত একত্রিত ম্যানিফেস্টে কোন পরিষেবাগুলি অন্তর্ভুক্ত করা হয়েছে তা নিয়ন্ত্রণ করার জন্য অপরিহার্য।
- আমি কীভাবে নিশ্চিত করতে পারি যে আমার রিলিজ বিল্ডে মিনিস্ট্রো পরিষেবা বাদ দেওয়া হয়েছে?
- লেখা a JUnit মিনিস্ট্রো ক্লাস উপস্থিত আছে কিনা তা পরীক্ষা করতে সাহায্য করতে পারে। ব্যবহার করে Class.forName, ক্লাস লোড করার চেষ্টা করুন এবং একটি ব্যতিক্রম ঘটে কিনা তা দেখুন। এটি নিশ্চিত করে যে বর্জন আশানুরূপ কাজ করেছে কিনা।
একটি ক্লিন রিলিজ বিল্ড নিশ্চিত করা:
অ্যান্ড্রয়েড রিলিজ বিল্ডে সদৃশ মডিউল ত্রুটি জটিল হতে পারে, কিন্তু কার্যকর সমাধান বিদ্যমান। কনফিগার করে গ্রেডল এবং প্রোগার্ড এবং ম্যানিফেস্ট ফাইলগুলি পরিচালনা করে, আপনি বহিরাগত লাইব্রেরিগুলিকে আপনার প্রধান প্রকল্প নির্ভরতাগুলির সাথে বিরোধিত হতে বাধা দেন।
টার্গেটেড ফিক্স ব্যবহার করা শুধুমাত্র ডুপ্লিকেশন সমস্যা সমাধান করে না বরং আপনার বিল্ডকে লাইটওয়েট এবং দক্ষ রাখে। একটি যত্ন সহকারে পরিচালিত রিলিজ বিল্ড সেটআপ স্থায়িত্ব বাড়াবে এবং উত্পাদনে অ্যাপের কার্যকারিতা উন্নত করবে, যা সামগ্রিকভাবে একটি মসৃণ বিকাশ প্রক্রিয়ার দিকে পরিচালিত করবে। 🚀
তথ্যসূত্র এবং অতিরিক্ত সম্পদ
- নির্ভরতা পরিচালনা এবং অ্যান্ড্রয়েড বিল্ডে ডুপ্লিকেট মডিউলগুলি সমাধান করার অন্তর্দৃষ্টি প্রদান করে। নির্ভরতা বর্জন এবং ম্যানিফেস্ট দ্বন্দ্ব পরিচালনার জন্য বিশদ গ্রেডল সেটআপ এখানে পাওয়া যাবে: অ্যান্ড্রয়েড বিকাশকারী ডকুমেন্টেশন
- অ্যান্ড্রয়েড বিল্ড অপ্টিমাইজেশানে প্রোগার্ডের ভূমিকা এবং রিলিজ বিল্ডগুলিতে ডুপ্লিকেট এন্ট্রিগুলি পরিচালনা করার নিয়মগুলির কনফিগারেশন প্রোগার্ড ব্যবহারকারীর নির্দেশিকায় পুঙ্খানুপুঙ্খভাবে কভার করা হয়েছে: ProGuard ব্যবহারকারী ম্যানুয়াল
- অ্যান্ড্রয়েডের সাথে Qt ব্যবহার করা এবং নির্ভরতা ব্যবস্থাপনায় সাধারণ সমস্যাগুলি, বিশেষ করে যখন বাহ্যিক লাইব্রেরিগুলিকে একীভূত করার সময়, Android বিকাশকারীর জন্য Qt-এ ব্যাখ্যা করা হয়েছে: অ্যান্ড্রয়েডের জন্য Qt ডকুমেন্টেশন