I chorak · Mobil dasturlash
Loyiha strukturasi
Qaysi fayl nima uchun kerak
I chorak · Mobil dasturlash
Qaysi fayl nima uchun kerak
Ushbu darsdan keyin siz:
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.
| 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.
SalomNukus loyihasini oching.app → src → main → java yo'lini oching va
MainActivity.kt faylini toping.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.
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.
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:
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.
Ilovada ko'rinadigan matn, rang va rasmlar kodning ichiga yozilmaydi. Ular alohida saqlanadi va koddan nomi bilan chaqiriladi. Shunday saqlangan narsa resurs deb ataladi.
app → res → values → strings.xml faylini oching. Ichida shunga
o'xshash qator turadi:
<resources>
<string name="app_name">SalomNukus</string>
</resources>
</resources> dan oldin yangi qator qo'shing:
<string name="salom_matni">Salom, Nukus!</string>
Endi app → res → layout → activity_main.xml ni oching va
Code rejimiga o'ting.
TextView ichidagi android:text="..." qatorini toping va uni
quyidagicha almashtiring:
android:text="@string/salom_matni"
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.
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:
values-ru degan papka ochiladi va u yerga
boshqa strings.xml qo'yiladi. Android telefon tiliga qarab
kerakligini o'zi tanlaydi.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:
<!-- 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:
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.
Ilova qanday yig'ilishini va u qanday ilova ekanini ikkita fayl belgilaydi. Ularni ilovaning pasporti deb tasavvur qiling.
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 |
Module :app yozilganini oching. android { ... } bloki ichida
shunga o'xshash qatorlarni topasiz:
android {
namespace = "com.example.salomnukus"
compileSdk = 35
defaultConfig {
applicationId = "com.example.salomnukus"
minSdk = 24
targetSdk = 35
versionCode = 1
versionName = "1.0"
}
}
versionName = "1.0" ni versionName = "1.1" ga o'zgartiring va
Ctrl + S bosing.
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.
manifests → AndroidManifest.xml ni oching va <application>
tegining ichidagi qatorni toping:
android:label="@string/app_name"
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.
Run bosilganda Gradle ishga tushadi. U yig'uvchi usta: nima qayerdan olinishini va nima yasalishini biladi.
Gradle to'rt manbadan foydalanadi:
MainActivity.kt va boshqa .kt fayllar.res ichidagi hamma narsa.build.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.
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:
<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.
| 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 |
src — siz yozgan narsa, build — mashina yasagan narsaapp/src/main/java/ ichida yotadires — matn, rang, rasm; layout — ekranlar, values — qiymatlar@string/nom, Kotlin'da R.string.nom_\' bilan yoziladibuild.gradle.kts bor — sizga Module :app keragiapplicationId — ilovaning yagona nomi, minSdk — eng eski Androidres yoki kod o'zgarsa oddiy RunMAIN + LAUNCHER — qaysi ekran birinchi ochilishiBu darsda ikki topshiriq bor, ikkalasi ham shu qo'llanmadagi materialdan chiqadi:
strings.xml ga, rangni
colors.xml ga qo'yish va ularni @string hamda @color orqali
ishlatish.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.
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.
Ro'yxatdagi tartib raqamingizni tanlang — shaxsiy topshiriq shu yerda chiqadi. Bir marta tanlaysiz, brauzer eslab qoladi.