آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

طبقه بندی موضوعی

۲۶۱ مطلب با موضوع «آموزش اندروید» ثبت شده است

Plugin:  به خود Gradle / build system قابلیت اضافه می‌کنه
Dependency: یه کتابخونه‌ی کد یه که خود اپلیکیشن ازش استفاده می‌کنه

اول بفهمیم Gradle خودش چیه
تو پروژه Android، Gradle همون «سیستم ساختن پروژه»ـست (build system):

  • کدهای .kt و .java رو کامپایل می‌کنه
  • resourceها رو جمع می‌کنه (layout, drawable, string, …)
  • ازشون APK / AAB می‌سازه
  • تست‌ها رو اجرا می‌کنه، lint، shrink، obfuscate و…

یعنی: وقتی روی Run یا Build می‌زنی:  پشت‌صحنه Gradle داره کار می‌کنه.
حالا ما می‌خوایم به این Gradle بگیم:
پروژه من Android appـه زبانش Kotlinه از Compose استفاده می‌کنه و در خود app هم از یک سری کتابخونه مثل Retrofit, Room, … استفاده می‌کنم.
این‌جاست که Plugin و Dependency وارد می‌شن؛ ولی نقش‌شون فرق داره.



Plugin دقیقا چیه؟
افزونه برای Gradle یعنی یه تیکه کد که روی خود Gradle اجرا می‌شه، نه روی گوشی کاربر.
کارش اینه که:

  • به Gradle یاد بده این پروژه از چه نوعیه

         مثلا: Android Application؟ Android Library؟ Java Library؟

  • به Gradle قابلیت‌های جدید اضافه کنه

    taskهای جدید: assembleDebug, bundleRelease, lint, test …

         بلوک‌های DSL جدید: android {}, kotlinOptions {}, composeOptions {}

 

 

1. com.android.application

 

 

  • به Gradle می‌گه:
    این پروژه یک Android Application هست، نه یک Java ساده.

  • بعد از این پلاگین، تازه می‌تونی بنویسی:

    android { compileSdk = 35 ... }                                                                                 
     

 

         به Gradle می‌گه:

  • برای این پروژه، باید Kotlin رو هم کامپایل کنی.

  • compiler Kotlin رو به chain build اضافه می‌کنه.

نکته مهم:
کد Plugin هیچ‌وقت داخل APK کاربر نمی‌ره.
فقط موقع build، روی سیستم توسعه‌دهنده/CI اجرا می‌شه.




Dependency .3

 

  • موقع compile کد تو دیده می‌شن

  • کلاس‌هاشون وارد APK / AAB می‌شن

  • وقتی اپ روی گوشی کاربر اجرا می‌شه، این کتابخونه‌ها هم اونجا هستن




     

 

خلاصه‌ی کوتاه

  • Plugin

    • روی Gradle اجرا می‌شه

    • فرایند build رو تعریف و مدیریت می‌کنه

    • توی APK نمی‌ره

  • Dependency

    • توی کد اپ استفاده می‌شه

    • توی APK بسته‌بندی می‌شه

    • روی گوشی کاربر اجرا می‌شه

هر وقت شک کردی، از خودت بپرس:
«این چیزیه که موقع build لازمه، یا چیزی که داخل اپ و روی گوشی اجرا می‌شه؟»

  • اگه جواب: «موقع build» → احتمالاً Plugin

  • اگه جواب: «داخل اپ» → قطعاً Dependency

۰ نظر موافقین ۰ مخالفین ۰ ۲۵ آبان ۰۴ ، ۱۷:۳۱
میم دال

دو نوع امضا داریم
امضای دیباگ و امضای ریلیز

امضای ریلیز:
keytool -list -v -keystore C:\Users\Notebook\Desktop\fileName.jks -alias 12345678

 

امضای دیباگ:
keytool -list -v -keystore C:\Users\Notebook\.android\debug.keystore -alias androiddebugkey -storepass android -keypass android

 

 

 

 

۰ نظر موافقین ۰ مخالفین ۰ ۱۱ خرداد ۰۴ ، ۱۷:۲۴
میم دال

فرق بین دیباگ (Debug) و ریلیز (Release) در اندروید هم از نظر رفتار اپلیکیشن متفاوته، هم از نظر نحوه ساخت، امضا، بهینه‌سازی و دسترسی‌ها. اینها رو در ادامه توضیح میدم:

 

۰ نظر موافقین ۰ مخالفین ۰ ۰۴ خرداد ۰۴ ، ۱۶:۳۱
میم دال

برای تغییر رنگ پراگرس بار، باید توی فایل styles، واسش یه استایل کاستوم تعریف کنیم:

 

<style name="ProgressBarTheme" parent="Widget.AppCompat.ProgressBar">

    <item name="android:indeterminateTint">#BBE6FF</item>

</style>

و بدین شکل توی پراپرتی های xml براش ست کنیم:
 

style="@style/ProgressBarTheme"
۰ نظر موافقین ۰ مخالفین ۰ ۱۱ اسفند ۰۳ ، ۱۲:۰۶
میم دال

امضای دیجیتال (Signing) در اپلیکیشن‌های اندرویدی فرآیندی است که به تایید اصالت و یکپارچگی فایل APK کمک می‌کند.

 

وقتی یک برنامه اندروید (فایل APK) ساخته می‌شود، نیاز است که امضا شود. این امضا برای موارد زیر ضروری است:

  1. تایید اصالت توسعه‌دهنده: نشان می‌دهد که این فایل APK از یک توسعه‌دهنده خاص آمده است.
  2. یکپارچگی فایل: تضمین می‌کند که فایل APK بعد از امضا تغییر نکرده است.
  3. انتشار در فروشگاه Google Play: برنامه‌ها باید امضا شوند تا در Google Play منتشر شوند.
  4. به‌روزرسانی برنامه: وقتی برنامه‌ای در دستگاه نصب می‌شود، نسخه‌های جدیدتر آن باید با همان کلید امضا شوند تا به‌روزرسانی انجام شود.

۰ نظر موافقین ۰ مخالفین ۰ ۲۹ دی ۰۳ ، ۱۶:۴۶
میم دال

1. سینگل تون

 

2. بیلدر (با توجه به وجود named constructor و کلاس data در کاتلین این دیزاین پترن معنی نداره)

 

3. فکتوری

 

4. dependency Injection (DI)

 

5. Facade:

امکان این را می دهد که رابط ساده ای را برای دسترسی به یک سیستم پیچیده ایجاد کرد. در واقع، زیر ساخت های پیچیده سیستم را مخفی کرده و به کاربر اجازه می دهد تا بدون آگاهی از پیچیدگی داخلی، با سیستم تعامل داشته باشه. مثل اینترفیسی که در رتروفیت برای تعریف متدهای نتورک استفاده میشه.

 

6. Adapter:

این دیزاین پترن برای اتصال دو کلاس با ساختارهای متفاوت استفاده می شود. به عبارت دیگر، یک میانجی بین دو ساختار دیگر است. این میانجی تغییرات لازم را روی داده های سورس انجام میده تا در مقصد نشون داده بشه بدون اینکه داده های اصلی تغییر پیدا کنه. مثل اداپتر در ریسایکلر ویو که لیستی از داده های منبع که عموما لیست یا آرایه هست را به view holder که قابل نمایش برای ریسایکلر ویو است را تبدیل میکند.

۰ نظر موافقین ۰ مخالفین ۰ ۱۱ اسفند ۰۲ ، ۰۵:۳۰
میم دال

در کاتلین دو نوع لیست mutable و immutable وجود داره.

لیست immutable:

 val mylist = listOf("1","2","3")

 

لیست mutable:

سه روش برای ایجاد این نوع لیست وجود داره:

        val mylist = ArrayList<String>()

        val mylist1 = mutableListOf<String>()

        val mylist2 = arrayListOf<String>()

این سه تا فرقی با هم ندارن.

 

 

 

۰ نظر موافقین ۰ مخالفین ۰ ۲۳ آذر ۰۲ ، ۰۳:۰۶
میم دال

آرایه:

دو نوع روش برای ایجاد آرایه وجود داره. در روش اول باید سایز آرایه و مقدار اولیه اون مشخص بشه. در روش دوم فقط باید مقدار اولیه مشخص بشه. هر دو mutable هستن، یعنی میشه یه عضو از آرایه را تغییر داد. اما طول آرایه قابل تغییر نیست.

 

val myArray = Array<Int>(5){0}

val myArray = arrayOf("1", "2")

۰ نظر موافقین ۰ مخالفین ۰ ۲۲ آذر ۰۲ ، ۱۴:۵۸
میم دال

کلاس جنریک:

class ArrayUtil<T>(private val array : Array<T>) {

    fun findElement(element : T, foundElement:(index: Int, element: T?)->Unit){

        for(i in array.indices){

            if(array[i] == element){
                foundElement(i, element)
                return
            }
        }

        foundElement(-1, null)
        return

    }

}

۰ نظر موافقین ۰ مخالفین ۰ ۲۰ آذر ۰۲ ، ۱۶:۳۷
میم دال

gradle یک ابزار بیلد اتوماتیک هست برای بیلد اپلیکیشن ها، مثل اپ های اندرویدی. توسط پلاگین gradle امکان استفاده از gradle در اندروید استودیو فراهم می شود.

۰ نظر موافقین ۰ مخالفین ۰ ۱۸ آذر ۰۲ ، ۱۴:۴۴
میم دال