প্রকল্প সম্পর্কে

Linphone হল একটি ওপেন সোর্স সফটফোন যা ভয়েস ও ভিডিও ওভার IP কলিং এবং ইনস্ট্যান্ট মেসেজিংয়ের জন্য। এটি সম্পূর্ণ SIP-ভিত্তিক, কলিং, প্রেজেন্স এবং IM ফিচার কভার করে। এই রিপোজিটরিটি linphone-android-এর Linphone.org মিরর; ক্যানোনিকাল ডেভেলপমেন্ট অবস্থান হল Belledonne Communications GitLab ইনস্ট্যান্স। অ্যাপটি Google Play এবং F-Droid-এ উপলব্ধ, এবং প্রজেক্ট কী দিয়ে সাইন করা APK Linphone ওয়েবসাইট থেকে ডাউনলোড করা যায়। 6.0.0 রিলিজটি একটি সম্পূর্ণ রিরাইট যা UX/UI বিশেষজ্ঞদের সাথে ডিজাইন করা হয়েছে, উন্নত ফ্লুইডিটি, প্রকৃত মাল্টি-অ্যাকাউন্ট সাপোর্ট এবং কলের সময় অ্যাসিমেট্রিকাল ভিডিও নিয়ে এসেছে। এতে Android 9.0 বা তার নতুন সংস্করণ প্রয়োজন। একটি CHANGELOG.md ফাইলে পরিবর্তন এবং নতুন ফিচার তালিকাভুক্ত রয়েছে। লাইসেন্সিং দ্বৈত: ফ্রি ওপেন সোর্স ব্যবহারের জন্য GNU/GPLv3, অথবা ক্লোজড সোর্স অ্যাপ্লিকেশনের জন্য ফি-ভিত্তিক প্রোপ্রাইটারি লাইসেন্স, যেখানে Belledonne Communications খরচ ও পরিষেবা সংক্রান্ত প্রশ্ন পরিচালনা করে। ডকুমেন্টেশন লিংকগুলো সাপোর্টেড ফিচার ও RFC, পাবলিক উইকি এবং Android-এর জন্য Kotlin টিউটোরিয়াল কভার করে। বিল্ডিং: Android Studio দিয়ে প্রজেক্ট খুলুন, Gradle সিঙ্ক্রোনাইজেশনের জন্য অপেক্ষা করুন, তারপর বিল্ড বা ইনস্টল করুন; linphone লাইব্রেরি প্রজেক্টের Maven রিপোজিটরি থেকে AAR হিসেবে আনা হয়। Android Studio ছাড়া ./gradlew assembleDebug বা assembleRelease ব্যবহার করুন, তারপর installDebug বা installRelease। APK গুলো app/build/outputs/apk/debug/ এবং app/build/outputs/apk/release/-এ জমা হয়। রিলিজ AppBundle-এর জন্য releaseAppBundle টার্গেট ব্যবহার করুন এবং নিশ্চিত করুন যে একটি NDK ইনস্টল করা আছে এবং ANDROID_NDK_HOME সেট করা আছে যাতে Play Store-এর জন্য নেটিভ লাইব্রেরি সিম্বল অন্তর্ভুক্ত করা যায়। লোকাল SDK বিল্ড করার জন্য GitLab থেকে linphone-sdk রিকার্সিভলি ক্লোন করতে হবে, বিল্ড করার জন্য এর README অনুসরণ করতে হবে, GRADLE_USER_HOME-এর অধীনে gradle.properties-এ LinphoneSdkBuildDir হিসেবে SDK-এর অ্যাবসলিউট বিল্ড পাথ যোগ করতে হবে এবং অ্যাপটি রিবিল্ড করতে হবে। নেটিভ ডিবাগিং Android Studio SDK Tools থেকে LLDB ব্যবহার করে, ডিবাগার কনফিগারেশনে Dual বা Native নির্বাচন করে, linphone-sdk ডিবাগ লাইব্রেরির পাথ যোগ করে, নেটিভ ফাইলে ব্রেকপয়েন্ট সেট করে এবং app/build.gradle-এ ডিবাগ AAR ব্যবহার করে। জানা সমস্যাগুলোর মধ্যে রয়েছে linphone_logo_tinted-এর জন্য একটি AAPT রিসোর্স এরর, যা app/src/main/res/xml/contacts.xml মুছে ফেলে এবং রিবিল্ড করে সমাধান করা হয়; স্টার্টআপে একটি libc++_shared.so ক্র্যাশ, যা প্রজেক্ট ক্লিন করে এবং LINPHONESDK_ANDROID_ARCHS cmake প্যারামিটারের মাধ্যমে SDK সঠিক CPU আর্কিটেকচারের জন্য বিল্ড হয়েছে কিনা তা পরীক্ষা করে সমাধান করা হয়; এবং ইনস্টলের পর Android Studio দিয়ে অ্যাপ শুরু করলে পুশ নোটিফিকেশন কাজ না করা, যা সাম্প্রতিক অ্যাক্টিভিটি থেকে অ্যাপ সরিয়ে লঞ্চার আইকন থেকে পুনরায় চালু করে সমাধান করা হয়। ট্রাবলশুটিং: আচরণগত সমস্যা GitHub রিপোজিটরিতে টেমপ্লেট ব্যবহার করে ম্যাচিং লাইব্রেরি লগসহ রিপোর্ট করতে হবে। 6.0.0 থেকে লগ সবসময় সক্রিয় থাকে এবং লোকালি সংরক্ষিত হয়, এবং Help তারপর Troubleshooting-এর মাধ্যমে ক্লিয়ার বা নিরাপদে আপলোড করা যায়। নেটিভ ক্র্যাশের জন্য সিম্বলাইজড স্ট্যাক ট্রেসের জন্য ডিবাগ লাইব্রেরি প্রয়োজন, যা লোকালি SDK বিল্ড করে বা Maven রিপোজিটরি থেকে SDK সংস্করণের সাথে মিলে যাওয়া libs-debug আর্কাইভ ডাউনলোড করে পাওয়া যায়। ndk-stack টুল এবং সম্ভবত adb logcat প্রয়োজন; লাইব্রেরিগুলোর আর্কিটেকচার জানা থাকতে হবে। সংযুক্ত ডিভাইস থেকে স্ট্যাক ট্রেস সিম্বলাইজ করার জন্য কমান্ড দেওয়া হয়েছে, CPU আর্কিটেকচার জানা থাকলে বা না থাকলে, এবং NDK r29 সরাসরি libs-debug.zip ব্যবহার করার অনুমতি দেয়। কাস্টম প্যাকেজ নাম app/build.gradle.kts-এ packageName ভেরিয়েবল এডিট করে সেট করা হয়, manifestPlaceholders এটি সর্বত্র প্রয়োগ করে। একটি useDifferentPackageNameForDebugBuild ফ্ল্যাগ ডিবাগ বিল্ডের জন্য org.linphone.debug প্যাকেজ পুনরুদ্ধার করতে পারে। কোনো ম্যাচিং ক্লায়েন্ট নেই এমন একটি processDebugGoogleServices ব্যর্থতার অর্থ হল app/google-services.json-কে নির্বাচিত প্যাকেজ নামের জন্য একটি দিয়ে প্রতিস্থাপন করতে হবে, অথবা Firebase Cloud Messaging এবং Crashlytics ব্যবহার না করলে মুছে ফেলতে হবে। Google Cloud Messaging ডেপ্রিকেটেড হওয়ার পর Firebase-ই একমাত্র অফিসিয়াল পুশ নোটিফিকেশন পথ; প্রজেক্ট তার নিজস্ব google-services.json আর্কাইভ করে যাতে বিল্ডগুলো এখনও ফ্রি sip.linphone.org পরিষেবা থেকে পুশ নোটিফিকেশন পেতে পারে, এবং এটি মুছে ফেললে পুশ নোটিফিকেশন নিষ্ক্রিয় হয়। একটি কাস্টম পুশ সার্ভারের জন্য সেই ফাইলটি প্রতিস্থাপন করতে হবে। অনুবাদ Transifex থেকে একটি সেলফ-হোস্টেড Weblate ইনস্ট্যান্সে স্থানান্তরিত হয়েছে; রিরাইটের পর আগের অনুবাদগুলো পুনরায় ব্যবহার করা যায়নি, তাই অবদান স্বাগত। অবদানের জন্য সর্বশেষ git সোর্সের বিরুদ্ধে প্যাচ এবং একটি সম্পূর্ণ Contributor Agreement প্রয়োজন যা পুল রিকোয়েস্ট লিংকসহ ইমেইলে পাঠাতে হবে, যা প্রজেক্টকে সোর্স কোডের উপর শান্তিপূর্ণভাবে অধিকার প্রয়োগের সুযোগ দেয় এবং অবদানকারী তার অবদানের উপর অধিকার রাখে।