پشتیبانی از ویژگی های زبان جاوا ۸ و API ها ؛ آموزش برنامه نویسی اندروید

ویژگی های جاوا 8 - آموزش اندروید استودیو - آموزش برنامه نویسی اندروید

در این مقاله از سری آموزش های برنامه نویسی اندروید می خواهیم شما را با ویژگی های زبان جاوا ۸ و API های آن آشنا کنیم. پس با مرجع آموزش برنامه نویسی اندروید الکامکو همراه باشید.

نسخه های بعد از Android Studio 3.0  از کلیه ویژگی های زبان ۷ جاوا و زیر مجموعه ای از ویژگی های زبان ۸ جاوا پشتیبانی می کند که براساس نسخه پلتفرم متفاوت است.  در این مقاله می توانید با ویژگی های زبان ۸ (Java 8) که در پروژه خود می توانید از آنها استفاده کنید آشنا شوید، نحوه پیکربندی صحیح پروژه تان برای استفاده از آنها و هرگونه مسئله شناخته شده ای که ممکن است با آنها روبرو شوید را شرح می دهد.

توجه: هنگام تهیه برنامه برای اندروید، استفاده از ویژگی های زبان جاوا ۸ اختیاری است. می توانید سورس پروژه و مقادیر سازگاری هدف تان را بر روی جاوا ۷ تنظیم کنید، اما همچنان باید با استفاده از JDK 8 کامپایل کنید.

اندروید استودیو برای استفاده بعضی از ویژگی های زبان جاوا ۸ و کتابخانه های شخص ثالث که از آنها استفاده می کند، پشتیبانی built-in می کند. همانطور که در شکل ۱ نشان داده شده است، تولچین پیش فرض ویژگیهای زبان جدید را با انجام تحولات bytecode به نام desugar ، بر روی خروجی کامپایلر javac پیاده سازی می کند. شما ابتدا باید jack را غیر فعال کتید تا از ویژگی های جاوا ۸ درون تولچین استفاده کنید.

شکل ۱. پشتیبانی از ویژگی های زبان جاوا ۸ با استفاده از تحولات بایت کد desugar.

برای شروع استفاده از ویژگی های زبان جاوا ۸ پشتیبانی شده، افزونه Android را به ۳.۰.۰ (یا بالاتر) به روز کنید. پس از آن، برای هر ماژول که از ویژگی های زبان جاوا ۸ استفاده می کند (چه از طریق source code و چه از طریقdependencies) ، مانند شکل ۲ ، Source Compatibility  و Target Compatibility را به نسخه ۸.۱ به روز کنید. (File > Project Structure).

شکل ۲. پشتیبانی از ویژگی های زبان جاوا ۸ با استفاده از تحولات بایت کد desugar.

همچنین می توانید آن را مستقیماً در فایل build.gradle مربوطه پیکربندی کنید:

android {
  ...
  // Configure only for each module that uses Java 8
  // language features (either in its source code or
  // through dependencies).
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
  // For Kotlin projects
  kotlinOptions {
    jvmTarget = "1.8"
  }
}

توجه: اگر اندروید استودیو تشخیص دهد که پروژه شما از Jack ، Retrolambda یا DexGuard استفاده می کند، IDE به جای آن از پشتیبانی جاوا ۸ استفاده می کند.

پشتیبانی از ویژگی های زبان جاوا ۸ و API ها

اندروید استودیو از تمام ویژگی های زبان جاوا ۸ پشتیبانی نمی کند، اما تعداد بیشتری از آنها در نسخه های آینده IDE اضافه می شوند. بسته به نوع minSdkVersion که شما از آن استفاده می کنید، مطابق جدول زیر ویژگی های خاص و API اکنون در دسترس هستند.

علاوه بر ویژگی های زبان  و API های فوق ، Android Studio 3.0 و نسخه های اندروید بعد از آن، پشتیبانی از  try-with-resources را در تمام سطوح API اندرویدی گسترش می دهند.

در حال حاضر Desugar از MethodHandle.invoke یا MethodHandle.invokeExact پشتیبانی نمی کند. اگر کد منبع شما یا یکی از dependencies ماژول شما از یکی از این روش ها استفاده می کند، باید minSdkVersion 26 یا بالاتر را مشخص کنید. در غیر این صورت خطای زیر را دریافت می کنید:

Dex: Error converting bytecode to dex:
Cause: signature-polymorphic method called without --min-sdk-version >= 26

در بعضی موارد، ممکن است ماژول شما از روشهای invoke  یا invokeExact استفاده نکند، حتی اگر در یک dependencies به کتابخانه گنجانده باشید. بنابراین، برای استفاده از آن کتابخانه با minSdkVersion 25 یا پایین تر ، کوچک کردن کد را برای حذف روش های بلااستفاده فعال کنید. اگر این کار نکرد، از یک کتابخانه جایگزین (alternative) استفاده کنید که از روش های پشتیبانی نشده استفاده نمی کند.

به تولچین پیشفرض (default toolchain) مهاجرت کنید

اگر اندروید استودیو تشخیص دهد که پروژه شما از Jack، Retrolambda یا DexGuard استفاده می کند، IDE به جای آن از پشتیبانی جاوا ۸ استفاده می کند. با این حال، در مقایسه با قالب تولچین (toolchain) پیش فرض، این ابزارها فاقد برخی قابلیت ها و پشتیبانی هستند. بنابراین دستورالعمل های موجود در این بخش را دنبال کنید تا به تولچین پیش فرض اندروید استودیو بروید.

از جک (Jack) مهاجرت کنید 

طبق این اعلامیه، تولچین جک (Jack toolchain) مستهلک می شود. اگر پروژه شما به جک بستگی دارد، باید به استفاده از پشتیبانی Java 8 که در تولچین پیش فرض اندروید استودیو ساخته شده است، مهاجرت کنید. استفاده از تولچین پیش فرض نیز شامل پشتیبانی از کتابخانه های شخص ثالث (third-party libraries) است که از ویژگی های زبان ۸ جاوا استفاده می کنند و از ابزارهایی که از فایل های  .class intermediate استفاده می کنند نیز پشتیبانی می کنند.

برای غیرفعال کردن جک و سوئیچ به تولچین پیش فرض، کافی است بلوک jackOptions را از فایل build.gradle ماژول خود حذف کنید:

android {
    ...
    defaultConfig {
        ...
        // Remove this block.
        jackOptions {
            enabled true
            ...
        }
    }

    // Keep the following configuration in order to target Java 8.
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    // For Kotlin projects
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

از Retrolambda مهاجرت کنید 

در مقایسه با تولچین پیش فرض اندروید استودیو ، Retrolambda فاقد پشتیبانی از کتابخانه های شخص ثالث است که از ویژگی های زبان ۸ جاوا استفاده می کنند. برای مهاجرت به تولچین پیش فرض ، وابستگی Retrolambda را از فایل build.gradle سطح پروژه خود حذف کنید:

buildscript {
  ...
   dependencies {
      // Remove the following dependency.
      classpath 'me.tatarka:gradle-retrolambda:<version_number>'
   }
}

و افزونه Retrolambda و بلاک retrolambda را از فایل build.gradle ماژول ها حذف کنید:

// Remove the following plugin.
apply plugin: 'me.tatarka.retrolambda'
...
// Remove this block after migrating useful configurations.
retrolambda {
    ...
    // If you have arguments for the Java VM you want to keep,
    // move them to your project's gradle.properties file.
    jvmArgs '-Xmx2048m'
}

پشتیبانی از ویژگی های زبان Java 8 را غیرفعال کنید

اگر مشکلی در رابطه با پشتیبانی از ویژگی های زبان Java 8 را تجربه می کنید ، می توانید با اضافه کردن موارد زیر به فایل gradle.properties خود آن را غیرفعال کنید:

android.enableDesugar=false

برای مرور کلی از ویژگی های زبان برنامه نویسی جاوا ۸ می توانید فیلم زیر را مشاهده کنید.

 

 

 

commentشما بگید!

شما چه سوالی درباره این موضوع دارید که اینجا مطرح نشده است؟ لطفا تجربیات خودتان را در این زمینه حتما توی کامنت برای ما بنویسید. منتظر نظرات، پیشنهادات و سوالات شما در همین صفحه از سایت آموزش برنامه نویسی الکامکو هستیم…

توجه

مقاله هایی که در سایت به صورت رایگان قرار گرفته است فقط برای مطالعه بیشتر شما کاربران عزیز می باشد. از هرگونه تماس تلفنی با پشتیبانی سایت و سوال در مورد محتوای مقاله ها خودداری شود.

shareاشتراک گذاری این مطلب

shareآخرین مقالات

توجه

مقاله هایی که در سایت به صورت رایگان قرار گرفته است فقط برای مطالعه بیشتر شما کاربران عزیز می باشد. از هرگونه تماس تلفنی با پشتیبانی سایت و سوال در مورد محتوای مقاله ها خودداری شود.

Generic filters
Exact matches only

آخرین مقالات

آموزش های تکمیل شده

توجه

مقاله هایی که در سایت به صورت رایگان قرار گرفته است فقط برای مطالعه بیشتر شما کاربران عزیز می باشد. از هرگونه تماس تلفنی با پشتیبانی سایت و سوال در مورد محتوای مقاله ها خودداری شود.

0 دیدگاه
بازخورد درون خطی
مشاهده همه نظرات