2-DARSI CHORAK

Androidda loyiha strukturasi

Taqdimot slaydlari

DARSMOBIL-02

I chorak · Mobil dasturlash

Loyiha strukturasi

Qaysi fayl nima uchun kerak

RESGRADLEMANIFEST
SLAYD · 01 / 1502 dars
01 / 15

Dars qo'llanmasi

Nima o'rganamiz

Ushbu darsdan keyin siz:

  • loyiha daraxtidagi har bir bo'lim nima uchun kerakligini bilasiz va kerakli faylni izlamay topasiz;
  • matn va rangni koddan ajratib, res papkasidagi resurslarga ko'chira olasiz;
  • build.gradle.kts va AndroidManifest.xml orqali ilovaning nomini, versiyasini va qaysi Android'da ishlashini o'zgartira olasiz.

O'tgan darsda loyiha yaratdik va uni ishga tushirdik, lekin ichiga qaramadik. Bugun daraxtni ochamiz.

Bu darsni o'qigandan keyin "fayl qayerda?" degan savol yo'qoladi. Keyingi 32 ta darsda siz aynan shu papkalarda ishlaysiz.

Har bo'limda avval o'zingiz qilib ko'rasiz, keyin nima bo'lganini sxemada ko'rasiz, oxirida qoidasini o'qiysiz.

Kerakli narsalar

Nima Izoh
Android Studio 01-darsda o'rnatilgan
SalomNukus loyihasi 01-darsda yaratilgan — shu loyihada ishlaymiz
Emulyator 01-darsda yasalgan virtual telefon

Loyiha yo'q bo'lsa, 01-darsning 3-bo'limiga qaytib yangi loyiha yarating: Empty Views Activity, til Kotlin, Minimum SDK API 24.

Bu darsda hech narsa yuklab olinmaydi. Kod ham juda oz yoziladi — asosiy ish o'qish va topish.

Android Studio versiyalari biroz farq qiladi. Papka nomi kotlin+java o'rniga faqat java bo'lishi yoki libs.versions.toml fayli umuman bo'lmasligi mumkin. Bularning hammasi normal: tuzilish g'oyasi bir xil, faqat nomlar biroz boshqacha.


1. Loyiha daraxti

Avval qilib ko'ring

  1. Android Studio'da SalomNukus loyihasini oching.
  2. Chap tomondagi Project panelining tepasiga qarang. U yerda Android deb yozilgan — bu ochiq turgan ko'rinish nomi.
  3. O'sha Android yozuvini bosing va ro'yxatdan Project ni tanlang.
  4. Ochilgan daraxtda app → src → main → java yo'lini oching va MainActivity.kt faylini toping.
  5. Tepadagi ro'yxatdan yana Android ni tanlab, odatdagi ko'rinishga qayting.

Skrinshot kutilmoqdaAndroid va Project ko'rinishlari

Tekshirib ko'ring: uchinchi qadamda daraxt butunlay o'zgardi — SalomNukus degan asosiy papka va uning ichida app, gradle, .idea kabi papkalar chiqdi. To'rtinchi qadamda esa MainActivity.kt faylini topdingiz.

E'tibor bering: Kotlin'da yozayotgan bo'lsak ham, fayl java degan papkada yotibdi. Bu — eski nomdan qolgan odat. Android ko'rinishida bu papka kotlin+java deb ko'rsatiladi, diskda esa java bo'lib qolaveradi.

Nima bo'ldi

Loyiha daraxtining to'rt bo'limi

Siz ikkita turli ro'yxatni ko'rdingiz, lekin fayllar bitta:

Project — diskdagi haqiqiy papkalar. Windows Explorer'da ochsangiz ham aynan shunday ko'rinadi.

Android — Android Studio o'ylab topgan qulay ro'yxat. Bunday papka diskda yo'q: Studio ishlatiladigan fayllarni bir joyga yig'ib, kerak bo'lmaydiganlarini yashirib qo'yadi.

Kundalik ishda Android ko'rinishi ishlatiladi — u qisqa va tartibli. Project ko'rinishi esa fayl qayerda ekanini aniq bilish kerak bo'lganda ochiladi.

Qoida

Android ko'rinishida app ichida to'rt bo'lim bor:

Bo'lim Ichida nima Qachon ochasiz
manifests AndroidManifest.xml ilova nomi, ikonkasi, ruxsatlari
kotlin+java MainActivity.kt va boshqa kod mantiq yozilganda
res matn, rang, rasm, ekran XML'lari ko'rinish o'zgartirilganda
Gradle Scripts build.gradle.kts va boshqalar versiya, kutubxona qo'shilganda

Diskdagi haqiqiy tuzilish esa shunday:

Natija
SalomNukus/
├── app/
│   ├── build.gradle.kts          ← ilovaning o'z sozlamasi
│   ├── src/
│   │   └── main/
│   │       ├── AndroidManifest.xml
│   │       ├── java/com/example/salomnukus/MainActivity.kt
│   │       └── res/
│   └── build/                    ← yig'ilgan natija, APK shu yerda
├── build.gradle.kts              ← butun loyiha sozlamasi
├── settings.gradle.kts
└── gradle/

Ikki narsani ajratib oling.

src — siz yozgan narsalar. Bu papka qimmatli: yo'qolsa ish yo'qoladi.

build — mashina yasagan narsalar. Har Run bosilganda qaytadan yasaladi. Uni o'chirib yuborsangiz ham hech narsa yo'qolmaydi — Studio keyingi yig'ishda qaytadan to'ldiradi. Aynan shuning uchun bu papka hech qachon boshqalarga yuborilmaydi.

kotlin+java ichida uchta bir xil nomli papka ko'rinadi. Ular yonida kulrang yozuv bor: (androidTest) va (test) — bular tekshirish kodlari uchun, hozircha ularga tegmaymiz. Sizga yozuvsiz, birinchi turgani kerak.


2. res papkasi — resurslar

Ilovada ko'rinadigan matn, rang va rasmlar kodning ichiga yozilmaydi. Ular alohida saqlanadi va koddan nomi bilan chaqiriladi. Shunday saqlangan narsa resurs deb ataladi.

Avval qilib ko'ring

  1. app → res → values → strings.xml faylini oching. Ichida shunga o'xshash qator turadi:

    XML
    <resources>
        <string name="app_name">SalomNukus</string>
    </resources>
    
  2. </resources> dan oldin yangi qator qo'shing:

    XML
    <string name="salom_matni">Salom, Nukus!</string>
    
  3. Endi app → res → layout → activity_main.xml ni oching va Code rejimiga o'ting.

  4. TextView ichidagi android:text="..." qatorini toping va uni quyidagicha almashtiring:

    XML
    android:text="@string/salom_matni"
    
  5. Ctrl + S bilan saqlang va Run bosing.

Skrinshot kutilmoqdastrings.xml fayli va yangi satr

Tekshirib ko'ring: emulyatorda o'sha Salom, Nukus! yozuvi ko'rinadi. Matn endi layout faylida emas, strings.xml da turibdi — lekin ekranda hech narsa o'zgarmadi.

Endi asosiy foydasini ko'ring: strings.xml dagi qiymatni Salom, maktab! ga o'zgartiring va qayta Run bosing. activity_main.xml ga umuman tegmadingiz — ekran esa o'zgardi.

Nima bo'ldi

Resurs qanday topiladi va ekranga chiqadi

Yig'ish paytida Android Studio res ichidagi hamma narsani sanab chiqadi va har biriga raqam beradi. Shu raqamlar R degan avtomatik sinfda saqlanadi.

Shundan keyin ikki joydan murojaat qilish mumkin:

Qayerdan Qanday yoziladi
XML faylidan @string/salom_matni
Kotlin kodidan R.string.salom_matni

Ikkalasi ham bitta narsaga — strings.xml dagi o'sha qatorga olib boradi. Shuning uchun qiymatni bitta joyda o'zgartirsangiz, u ishlatilgan hamma joyda o'zgaradi.

Nega shunday qilinadi? Uchta sabab bor:

  1. Tarjima. Ilovani rus yoki ingliz tiliga o'girish kerak bo'lsa, kodga tegilmaydi: values-ru degan papka ochiladi va u yerga boshqa strings.xml qo'yiladi. Android telefon tiliga qarab kerakligini o'zi tanlaydi.
  2. Takrorlanmaslik. Bitta matn o'nta ekranda ishlatilsa, o'zgarish bitta joyga kiritiladi.
  3. Tartib. Ilovadagi hamma yozuvni bitta fayldan o'qib chiqish mumkin.

Qoida

res ichidagi papkalar:

Papka Nima turadi
layout ekranlarning XML fayllari (activity_main.xml)
values strings.xml, colors.xml, themes.xml, dimens.xml
drawable rasmlar va chiziladigan shakllar
mipmap faqat ilova ikonkasi, bir necha o'lchamda
xml tizim uchun qo'shimcha sozlama fayllari

values ichidagi uchta fayl eng ko'p ishlatiladi:

XML
<!-- strings.xml — matnlar -->
<string name="salom_matni">Salom, Nukus!</string>

<!-- colors.xml — ranglar -->
<color name="matn_rangi">#404040</color>

<!-- dimens.xml — o'lchamlar -->
<dimen name="chet_oraliq">16dp</dimen>

Ularni ishlatish:

XML
android:text="@string/salom_matni"
android:textColor="@color/matn_rangi"
android:padding="@dimen/chet_oraliq"

Resurs nomi qat'iy qoidaga bo'ysunadi: faqat kichik lotin harflari, raqamlar va pastki chiziq. Bo'sh joy, katta harf, apostrof yoki kirill harf bo'lsa, Studio darrov qizil chiziq tortadi:

To'g'ri Xato Nega
salom_matni Salom Matni bo'sh joy va katta harf
tugma_matni tugma-matni tire ishlatib bo'lmaydi
xabar_matni xabar'matni apostrof ishlatib bo'lmaydi

Apostrof qiymat ichida ham tuzoq. Bu XML fayli, shuning uchun <string name="joy">Qo'ng'irot</string> xato beradi. Kerak bo'lsa Qo\'ng\'irot deb yoziladi. Shu sababli bu darsdagi hamma nomlar apostrofsiz tanlangan.

colors.xml da tayyor ranglar bor (black, white yoki purple_500 kabi) — ularni o'chirmang. Ular themes.xml da ishlatilgan; o'chirilsa butun ilova yig'ilmay qoladi. Yangi rang qo'shing, eskisiga tegmang.

Rang o'n oltilik ko'rinishda yoziladi: #RRGGBB — qizil, yashil, ko'k miqdori. #404040 — to'q kulrang. Sakkiz belgili variant ham bor (#FF1A5FD4), unda birinchi juftlik — shaffoflik.


3. Gradle va AndroidManifest

Ilova qanday yig'ilishini va u qanday ilova ekanini ikkita fayl belgilaydi. Ularni ilovaning pasporti deb tasavvur qiling.

Avval qilib ko'ring

  1. Gradle Scripts bo'limini oching. Ichida ikkita build.gradle.kts turibdi:

    Fayl Vazifasi
    build.gradle.kts (Project: SalomNukus) butun loyiha uchun umumiy
    build.gradle.kts (Module :app) ilovaning o'zi uchun
  2. Module :app yozilganini oching. android { ... } bloki ichida shunga o'xshash qatorlarni topasiz:

    Kotlin
    android {
        namespace = "com.example.salomnukus"
        compileSdk = 35
    
        defaultConfig {
            applicationId = "com.example.salomnukus"
            minSdk = 24
            targetSdk = 35
            versionCode = 1
            versionName = "1.0"
        }
    }
    
  3. versionName = "1.0" ni versionName = "1.1" ga o'zgartiring va Ctrl + S bosing.

  4. Tepada sariq chiziq chiqadi: "Gradle files have changed..." — uning o'ng tomonidagi Sync Now ni bosing va tugashini kuting.

Skrinshot kutilmoqdabuild.gradle.kts (Module :app) fayli

Tekshirib ko'ring: sariq chiziq yo'qoldi va pastdagi Build oynasida BUILD SUCCESSFUL yozuvi chiqdi. Sync bosilmasa, o'zgarish hisobga olinmaydi.

Endi manifestga qaraymiz.

  1. manifests → AndroidManifest.xml ni oching va <application> tegining ichidagi qatorni toping:

    XML
    android:label="@string/app_name"
    
  2. Bu — ilova nomi. U yerda nom emas, resursga ishora turibdi. @string/app_name ustiga bosib Ctrl tugmasini bosib turing — Studio sizni to'g'ri strings.xml dagi qatorga olib boradi.

Tekshirib ko'ring: siz strings.xml faylida app_name qatoriga tushdingiz. Ilova nomini o'zgartirish uchun aynan shu qiymatni almashtirish kerak.

Nima bo'ldi

Kod, res va sozlamalar APK ga yig'iladi

Run bosilganda Gradle ishga tushadi. U yig'uvchi usta: nima qayerdan olinishini va nima yasalishini biladi.

Gradle to'rt manbadan foydalanadi:

  1. KodMainActivity.kt va boshqa .kt fayllar.
  2. Resurslarres ichidagi hamma narsa.
  3. Manifest — ilova nomi, ikonkasi, qaysi ekran birinchi ochilishi.
  4. Sozlamalarbuild.gradle.kts: qaysi Android versiyalari, qaysi kutubxonalar.

Natija — bitta APK fayli: app/build/outputs/apk/debug/app-debug.apk.

Shuning uchun build.gradle.kts o'zgarsa Sync kerak bo'ladi: usta yangi buyruqni o'qib olishi kerak. res yoki .kt fayli o'zgarsa Sync shart emas — oddiy Run yetadi.

Qoida

defaultConfig ichidagi qatorlar:

Qator Nima
applicationId ilovaning butun dunyodagi yagona nomi
minSdk eng eski Android versiyasi — undan pastida o'rnatilmaydi
targetSdk ilova sinalgan versiya
versionCode ichki raqam: 1, 2, 3 ... har yangilanishda oshadi
versionName odamga ko'rinadigan versiya: 1.0, 2.3

namespace va applicationId nega ikkita? Yangi loyihada ikkalasi bir xil yoziladi, lekin vazifasi boshqa:

namespace applicationId
Nima uchun kod paketi, R sinfi shu yerda yasaladi ilovaning do'kondagi identifikatori
O'zgartirilsa kodda paket nomi ham o'zgarishi kerak hech nima buzilmaydi
Android uchun ahamiyatsiz ilovani shu bo'yicha ajratadi

Amalda buni ko'rish oson: applicationId ni o'zgartirib qayta Run bossangiz, Android uni butunlay boshqa ilova deb hisoblaydi va emulyatorda ikkitasi turadi. Eskisi o'chib ketmaydi. Uy vazifasida aynan shu tekshiriladi.

minSdk — eng muhim tanlov. Uni ko'tarsangiz, ilova eski telefonlarga o'rnatilmay qo'yadi. Emulyatoringiz minSdk dan eski bo'lsa, o'rnatish INSTALL_FAILED_OLDER_SDK xatosi bilan to'xtaydi.

AndroidManifest.xml ning asosiy qismlari:

XML
<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Theme.SalomNukus">
    <activity
        android:name=".MainActivity"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
Qator Nima aytadi
android:icon ilova ikonkasi — mipmap dagi rasm
android:label ilova nomi — telefon ekranida ko'rinadi
android:name=".MainActivity" qaysi ekran sinfi
MAIN + LAUNCHER shu ekran birinchi ochiladi

intent-filter ichidagi ikki qator muhim: MAIN — kirish nuqtasi, LAUNCHER — telefon ekranidagi ro'yxatda ko'rinsin. Ikkalasi o'chirilsa, ilova o'rnatiladi, lekin uni ochib bo'lmaydi.

Eski qo'llanmalarda package="com.example..." qatori bo'ladi. Yangi Android Studio'da u manifestdan olib tashlangan va build.gradle.kts dagi namespace ga ko'chirilgan. Internetdan javob izlaganda buni yodda tuting.


Tez-tez uchraydigan xatolar

Xato Nima ko'rinadi Sabab Yechim
Resurs topilmadi Cannot resolve symbol '@string/...' nom xato yozilgan strings.xml dagi name bilan harfma-harf solishtiring
Resurs nomi qizil Resource name must start with a letter katta harf, bo'sh joy yoki tire faqat kichik harf va _
Apostrof xatosi Apostrophe not preceded by \\ Qo'ng'irot deb yozilgan Qo\'ng\'irot yoki apostrofsiz nom
Noto'g'ri Gradle fayli Unresolved reference: android Project darajasidagi fayl tahrirlangan build.gradle.kts (Module :app) ni oching
O'zgarish ishlamadi eski qiymat qolaveradi Gradle fayli o'zgargan, Sync bosilmagan tepadagi Sync Now ni bosing
Ilova o'rnatilmadi INSTALL_FAILED_OLDER_SDK minSdk emulyatordan yuqori minSdk ni pasaytiring yoki yangi emulyator yasang
Ilova ikkita bo'lib qoldi ro'yxatda ikki ikonka applicationId o'zgargan xato emas — eskisini qo'lda o'chiring
Ilova nomi o'zgarmadi eski nom turaveradi boshqa satr tahrirlangan app_name qiymatini o'zgartiring
Butun ilova yig'ilmaydi resource color/... not found colors.xml dan rang o'chirilgan o'chirilgan rangni qaytaring
Papka topilmadi daraxt boshqacha ko'rinadi Project ko'rinishi yoqilgan tepadan Android ni tanlang
build papkasi juda katta yuzlab notanish fayl yig'ish natijasi tegmang, u o'z-o'zidan yasaladi

Qisqacha

  • Android ko'rinishi — qulay ro'yxat, Project — diskdagi haqiqat
  • src — siz yozgan narsa, build — mashina yasagan narsa
  • Kotlin fayllari diskda app/src/main/java/ ichida yotadi
  • res — matn, rang, rasm; layout — ekranlar, values — qiymatlar
  • Resursga murojaat: XML'da @string/nom, Kotlin'da R.string.nom
  • Resurs nomi: faqat kichik harf, raqam va _
  • XML matnida apostrof \' bilan yoziladi
  • Ikkita build.gradle.kts bor — sizga Module :app keragi
  • applicationId — ilovaning yagona nomi, minSdk — eng eski Android
  • Gradle fayli o'zgarsa Sync Now, res yoki kod o'zgarsa oddiy Run
  • Manifestdagi MAIN + LAUNCHER — qaysi ekran birinchi ochilishi

Uy vazifasi

Bu darsda ikki topshiriq bor, ikkalasi ham shu qo'llanmadagi materialdan chiqadi:

  1. Resurslarga ko'chirish (≈15 daqiqa) — 1 va 2-bo'lim: kerakli fayllarni daraxtdan topib, matnni strings.xml ga, rangni colors.xml ga qo'yish va ularni @string hamda @color orqali ishlatish.
  2. Ilova pasporti (≈15 daqiqa) — 3-bo'lim: applicationId va minSdk ni o'zgartirib Sync qilish, manifestdagi android:label izidan borib ilova nomini almashtirish.

Topshiriq matni shu sahifaning pastida — jurnaldagi raqamingizni tanlaganingizdan keyin chiqadi. Har kimda o'z matni, o'z rangi va o'z ilova nomi bo'ladi.

Ikkinchi topshiriqda minSdk ni ko'tarasiz. Ilova o'rnatilmay INSTALL_FAILED_OLDER_SDK chiqsa — emulyatoringiz o'sha versiyadan eski. Bunday holda 01-darsdagi Device Manager orqali yangiroq system image bilan emulyator yasang yoki minSdk ni 24 ga qaytaring va buni javobingizda yozib qo'ying.

Skrinshot qanday olinadi? Win + Shift + S bosing, kerakli qismni belgilang, so'ng Word yoki Paint'ga Ctrl + V bilan qo'ying. Kod skrinshotida fayl nomi ham ko'rinib tursin.

Keyingi darsda

Endi fayllarni topa olamiz, lekin ekranni hali tuza olmaymiz: bitta TextView bor, uni ham qo'zg'atmadik. Ikkita yozuvni yonma-yon qo'yish, tugmani pastga tushirish, ro'yxat yasash — bularning hech biri hozircha qo'limizdan kelmaydi.

Keyingi darsda layoutlar bilan tanishamiz: activity_main.xml ichidagi ConstraintLayout nima ekanini va elementlarni ekranda qanday joylashtirishni ko'ramiz.

Shaxsiy uy vazifasi

2 topshiriq · ≈30 daqiqa

Ro'yxatdagi tartib raqamingizni tanlang — shaxsiy topshiriq shu yerda chiqadi. Bir marta tanlaysiz, brauzer eslab qoladi.