মনোযোগ দিন: জাভা 8+ এপিআই ডিজুগারিং সমর্থন (অ্যান্ড্রয়েড গ্রেডল প্লাগইন 4.0.0+)
এই লাইব্রেরির ( থ্রিটেনএবিপি ) বিকাশ নিম্নমুখর হচ্ছে। দয়া করে অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৪.০, জাভা.টাইম * * এ আসবেন এবং আসন্ন মাসগুলিতে এর মূল গ্রন্থাগারটি ডিজুয়ারিং বৈশিষ্ট্যটি বিবেচনা করুন।
অ্যান্ড্রয়েড প্ল্যাটফর্মের যে কোনও সংস্করণে এই ভাষার API গুলি সমর্থন করার জন্য, অ্যান্ড্রয়েড প্লাগইনটি 4.0.0 (বা উচ্চতর) এ আপডেট করুন এবং আপনার মডিউলটির বিল্ড.gradle ফাইলটিতে নিম্নলিখিতগুলি অন্তর্ভুক্ত করুন:
android {
defaultConfig {
// Required when setting minSdkVersion to 20 or lower
multiDexEnabled true
}
compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
// Sets Java compatibility to Java 8
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.5'
}
প্রথম আবিষ্কার: আপনাকে জাভা.টাইম , থ্রিটেন-ব্যাকপোর্ট বা জোডা-টাইমের পরিবর্তে থ্রিটেনএবিপি কেন ব্যবহার করতে হবে
এটি একটি নতুন মান নির্ধারণের খুব দীর্ঘ প্রক্রিয়াটির একটি সংক্ষিপ্ত সংস্করণ। এই প্যাকেজগুলির সমস্ত একই জিনিস: জাভা জন্য ভাল, আধুনিক সময় পরিচালনার কার্যকারিতা সরবরাহ করে এমন লাইব্রেরি। পার্থক্যগুলি সূক্ষ্ম তবে গুরুত্বপূর্ণ।
সর্বাধিক সুস্পষ্ট সমাধান java.time
হ'ল বিল্ট-ইন প্যাকেজটি ব্যবহার করা , যেহেতু এটি জাভাতে সময় এবং তারিখগুলি মোকাবেলার জন্য নতুন স্ট্যান্ডার্ড উপায়। এটি জেএসআর 310 এর একটি বাস্তবায়ন , যা জোদা-টাইম লাইব্রেরির উপর ভিত্তি করে সময় পরিচালনার জন্য একটি নতুন মান প্রস্তাব ছিল ।
তবে জাভা 8java.time
তে চালু হয়েছিল । মার্শমেলো অবধি অ্যান্ড্রয়েড জাভা on- তে চালিত হয় ("অ্যান্ড্রয়েড এন" জাভা 8 ভাষার বৈশিষ্ট্যগুলি প্রবর্তন করার জন্য প্রথম সংস্করণ)। সুতরাং, যদি না আপনি কেবল অ্যান্ড্রয়েড এন নওগাত এবং তারপরের উপরে লক্ষ্য করে থাকেন তবে আপনি জাভা 8 ভাষার বৈশিষ্ট্যগুলিতে নির্ভর করতে পারবেন না (এটি আসলে 100% সত্য বলে আমি নিশ্চিত নই, তবে এটি আমি এটি বুঝতে পারি)। তাই বাইরে।java.time
পরবর্তী বিকল্পটি জোদা-সময় হতে পারে , যেহেতু জেএসআর 310 জোদা-সময় ভিত্তিক ছিল। যাইহোক, থ্রিটেনএবিপি রিডমি হিসাবে ইঙ্গিত দেয় যে বিভিন্ন কারণে জোদা-টাইম সেরা বিকল্প নয়।
এরপরে থ্রিটেন-ব্যাকপোর্ট , যা জাভা java.time
function এর জাভা 8 কার্যকারিতার অনেকগুলি (তবে সমস্ত নয়) বোর্ট করে most এটি বেশিরভাগ ব্যবহারের ক্ষেত্রে ঠিক আছে, তবে থ্রিটেনএবিপি রিডমে বর্ণিত হিসাবে এটি অ্যান্ড্রয়েডের সাথে পারফরম্যান্স সংক্রান্ত সমস্যা রয়েছে।
সুতরাং শেষ এবং আপাতদৃষ্টিতে সঠিক বিকল্পটি থ্রিটেনএবিপি ।
দ্বিতীয় আবিষ্কার: বিল্ড টুলস এবং ডিপেন্ডেন্সি ম্যানেজমেন্ট
যেহেতু একটি প্রোগ্রাম সংকলন - বিশেষত একটি বাহ্যিক গ্রন্থাগারগুলির একগুচ্ছ ব্যবহার করা - জটিল, তাই জাভা প্রক্রিয়াটি পরিচালনা করতে প্রায় অবিচ্ছিন্নভাবে একটি "বিল্ড টুল" ব্যবহার করে। মেক , অ্যাপাচি পিঁপড়া , অ্যাপাচি মাভেন এবং গ্রেডল সমস্ত জাভা প্রোগ্রাম যা জাভা প্রোগ্রামগুলির সাথে ব্যবহৃত হয় ( তুলনা করার জন্য এই পোস্টটি দেখুন ) build আরও উল্লিখিত হিসাবে, গ্রেডল অ্যান্ড্রয়েড প্রকল্পের জন্য নির্বাচিত বিল্ড সরঞ্জাম।
এই বিল্ড সরঞ্জামগুলির মধ্যে নির্ভরতা পরিচালনার অন্তর্ভুক্ত। সেন্টিমাইজড প্যাকেজ সংগ্রহস্থল অন্তর্ভুক্ত করে অ্যাপাচি মাভেন প্রথম বলে মনে হয়। মাভেন মাভেন সেন্ট্রাল রিপোজিটরি চালু করেছিলেন , যা পিএইচপি'র composer
প্যাকেগিস্টের সাথে রুবি এবং gem
রুবিজেমস. org এর সাথে রুবি'র সমতুল্য কার্যকারিতা মঞ্জুর করে। অন্য কথায়, ম্যাভেন সেন্ট্রাল রিপোজিটরি হ'ল ম্যাভেন (এবং গ্রেডল) যা প্যাকেজিস্ট সুরকারকে কী - সংস্করণযুক্ত প্যাকেজগুলির জন্য একটি নির্দিষ্ট এবং সুরক্ষিত উত্স।
তৃতীয় আবিষ্কার: গ্রেডল অ্যান্ড্রয়েড প্রকল্পগুলিতে নির্ভরতা পরিচালনা করে
আমার করণীয় তালিকার শীর্ষটি হ'ল এখানে নিখরচায় ই- বুকস সহ গ্রেডল ডক্সটি পড়া । আমি এই সপ্তাহগুলি আগে অ্যান্ড্রয়েড শেখার শুরু করার সময় যদি আমি পড়ে থাকতাম তবে আমি অবশ্যই জানতাম যে গ্রেডল অ্যান্ড্রয়েড প্রকল্পগুলিতে নির্ভরতা পরিচালনা করতে ম্যাভেন সেন্ট্রাল রিপোজিটরি ব্যবহার করতে পারে। তদ্ব্যতীত, হিসাবে বিস্তারিত এই Stackoverflow উত্তর, অ্যান্ড্রয়েড স্টুডিও 0.8.9 থেকে, Gradle ম্যাভেন কেন্দ্রিয় সংগ্রহস্থলের ব্যবহার পরোক্ষভাবে Bintray এর JCenter, যার মানে আপনি রেপো সেট আপ করার জন্য কোনো অতিরিক্ত কনফিগ যা করতে হবে না মাধ্যমে - আপনি শুধু তালিকা নির্ভরতা।
চতুর্থ আবিষ্কার: প্রকল্পের নির্ভরতাগুলি [প্রকল্প দির] / অ্যাপ / বিল্ড.gradle এ তালিকাভুক্ত রয়েছে
আবার, জাভাতে গ্র্যাডল ব্যবহার করার অভিজ্ঞতা যাদের রয়েছে তাদের কাছে স্পষ্ট, তবে এটি বের করতে আমার কিছুটা সময় লেগেছে। আপনি যদি লোকেদের "ওহ, কেবল যোগ করুন compile 'this-or-that.jar'
" বা এর মতো অন্য কিছু বলতে দেখেন তবে জেনে নিন যে compile
সেই বিল্ড.gradle ফাইলটিতে একটি নির্দেশিকা যা সংকলন-সময় নির্ভরতা নির্দেশ করে। নির্ভরতা ব্যবস্থাপনার সরকারী গ্রেডল পৃষ্ঠাটি এখানে ।
পঞ্চম আবিষ্কার: থ্রিটেনএবিপি পরিচালনা করেছেন জ্যাক ওয়ার্টন, থ্রিটেন দ্বারা নয়
তবুও অন্য একটি বিষয় আমি খুব বেশি সময় ব্যয় করেছি uring আপনি ম্যাভেন কেন্দ্রীয় ThreeTen জন্য চেহারা থাকে, তাহলে আপনি শুধুমাত্র প্যাকেজ দেখতে পাবেন threetenbp
না threetenabp
। আপনি যদি থ্রিটিএনএবিপি-র গিথুব রেপোতে যান , আপনি রেডমেরcompile 'this-or-that'
ডাউনলোড বিভাগের অধীনে সেই কুখ্যাত লাইনটি দেখতে পাবেন ।
যখন আমি এই গিথুব রেপোটিকে প্রথম আঘাত করলাম তখন আমি জানতাম না যে এই সংকলন লাইনটি কী বোঝায় এবং আমি এটি আমার টার্মিনালে চালানোর চেষ্টা করেছি (একটি সুস্পষ্ট এবং অনুমানযোগ্য ব্যর্থতার সাথে)। হতাশ হয়ে, আমি বাকিটা খুঁজে বের করার দীর্ঘক্ষণ পরে আমি এটিতে ফিরে আসিনি, এবং অবশেষে বুঝতে পারলাম এটি রেপোর com.jakewharton.threetenabp
বিপরীতে, রেপোর দিকে ইঙ্গিত করছে এমন একটি মাভেন রেপো লাইন org.threeten
। সে কারণেই আমি ভেবেছিলাম থ্রিটেনএবিপি প্যাকেজটি মাভেন রেপোতে নেই।
সংক্ষিপ্তসার: এটি কাজ করে
এখন এটি বেশ সহজ বলে মনে হচ্ছে। আপনার [project folder]/app/build.gradle
ফাইলটির বিভাগে implementation 'com.jakewharton.threetenabp:threetenabp:1.2.1'
লাইন রয়েছে কিনা তা নিশ্চিত করে আপনি একটি অ্যান্ড্রয়েড প্রকল্পে আধুনিক সময় পরিচালনার ক্রিয়াকলাপগুলি পেতে পারেন dependencies
:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "me.ahuman.myapp"
minSdkVersion 11
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation 'junit:junit:4.12'
implementation 'com.android.support:appcompat-v7:23.4.0'
implementation 'com.android.support:design:23.4.0'
implementation 'com.jakewharton.threetenabp:threetenabp:1.2.1'
}
এটিকে অ্যাপ্লিকেশন শ্রেণিতে যুক্ত করুন:
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
AndroidThreeTen.init(this);
//...
}
}