تفاوت دستور compile و implemention در Gradle
نکته اینکه دستور در نرم افزار Android Studio 3 و Gradle 3 و جدیدتر منسوخ شده و بجاش باید از دستور compile
implemention
استفاده بشه. (میتونید براحتی و بدون مشکل جایگزینشون کنید)
پس باید بگیم فرق دستور api
با دستور implemention
چیه:
- دستور
api
به اصطلاح حکم public کردن یک کتابخانه رو داره
همونطور که با public کردن یک متد میتونید اون متد رو برای همه کلاس ها و پکیج ها share و قابل دسترسی کنید، توسط دستور api
هم میتونید محتویات یک کتابخانه رو برای کل پروژه share و قابل استفاده کنید. (درواقع توسط دستور api
، کتابخانه مورد نظر در همه جای پروژه "رخنه" میکنه)
- اما دستور
implemention
به اصطلاح حکم private کردن یک کتابخانه رو داره
همونطور که با private کردن یک متد میتونید اون متد رو از همه کلاس ها و پکیج ها "مخفی و غیر قابل دسترسی" کنید که " فقط در محل خودش قابل استفاده باشه"، توسط دستور implemention
هم میتونید محتویات یک کتابخانه رو فقط برای برنامه یا کتابخانه ای که ازش استفاده کرده "نمایان و قابل استفاده" کنید. implementation
کتابخانه رو برای ماژولهای دیگر پروژه پنهان میکنه و به کدهای داخلی محدود میکنه.
مثلا:
MyApp -> Lib -> Lib2
👆 در اینجا برنامه MyApp به کتابخانه Lib وابستست، و کتابخانه Lib به کتابخانه Lib2 وابستست...
با api
کردن Lib2 باعث میشید تا محتویات این کتابخانه در کل پروژه قابل دسترس باشه.
اما آیا واقاً لازم دارید؟
dependencies { api project(':Lib2') }
مثلا اگر متد sendRequest()
در کتابخانه Lib2 قرار گرفته باشه و فقط کتابخانه Lib از این متد استفاده کرده باشه، با api
کردن Lib2 اون متد هم در اختیار شما و کل پروژه خواهد بود. چیزی که واقاً لازم نیست...
زمانی باید از دستور api
استفاده کنید که میخوایید از محتویات یک کتابخانه که برای یک کتابخانه دیگر هست استفاده کنید. 👆 مثل Lib2
یا پروژه تون کلاً یک کتابخانست. مثل SugarORM یا Log4J یا Volley یا ApacheHTTP...
✅ همیشه باید از دستور implemention
استفاده کنید. اینطوری خود Gradle plugin تشخص میده که آیا لازمه به api
تغییر کنه یا نه.
درصورت بروز خطا، بدونید که به اشتباه از متدهای کتابخانه های تودرتو و زیرین استفاده کردید پس باید رفعش کنید.
Android Gradle plugin engineer Jerome Dochez: When you switch to the new Android Gradle plugin 3, you should replace all yourcompile
(andapi
) with theimplementation
keyword.implementation / testImplementation / androidTestImplementation
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.