μλλ‘μ΄λ μκ°
β¨μλλ‘μ΄λ : 리λ μ€ μ»€λμ κΈ°λ°μΌλ‘ ꡬκΈμμ μ μν λͺ¨λ°μΌ μ΄μ체μ
1. μλλ‘μ΄λ μ΄μ체μ μ ꡬ쑰
1) 리λ μ€ μ»€λ(Linux kernel) : μλλ‘μ΄λλ 리λ μ€ κΈ°λ° μ€νμμ€ μννΈμ¨μ΄ μ€νμ
2) νλμ¨μ΄ μΆμν λ μ΄μ΄(hardware abstraction layer, HAL) : νλμ¨μ΄μ μΆμν κ³μΈ΅μΌλ‘, μμμ μλ° API νλ μμν¬μμ νλμ¨μ΄ κΈ°λ₯μ μ΄μ©ν μ μκ² νμ€ μΈν°νμ΄μ€λ₯Ό μ 곡
3) μλλ‘μ΄λ λ°νμ(Android runtime) : ARTλΌκ³ νλ©°, μ±μ μ€ννλ μν
μλλ‘μ΄λλ μλ° ν΄λμ€λ₯Ό λ°νμ λ κ·Έλλ‘ μ€ννμ§ μκ³ DEX νμΌλ‘ μ»΄νμΌν ν, ARTμμ μ€ννλ€.
4) λ€μ΄ν°λΈ C/C++ λΌμ΄λΈλ¬λ¦¬ : μλ° νλ μμν¬ μ΄μΈμλ λ€μ΄ν°λΈ C/C++ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν μ μλ€(μλλ‘μ΄λ NDK : native development kit)
5) μλ° API νλ μμν¬ : μ±μ κ°λ°ν λ μ¬μ©νλ μλ° API
2. μλλ‘μ΄λ λ²μ
- μλλ‘μ΄λ λ²μ (μ½λλͺ ) : μ΄μ체μ λ²μ
- API λ 벨(SDK λ²μ ) : μ±μ κ°λ°ν λ μ¬μ©νλ λ²μ
μ΄μ체μ λ²μ λ³λ‘ API λ λ²¨μ΄ μ§μ λμ΄ μμ΄μ μμ€ μ½λμμλ λλΆλΆ API λ 벨μ μ΄μ©
-> κ°λ°μλ μ΄μ체μ λ²μ κ³Ό API λ 벨μ ν¨κ» μκ³ μμ΄μΌ ν¨
μλλ‘μ΄λ μ± κ°λ°μ νΉμ§ : μ»΄ν¬λνΈ κΈ°λ° κ°λ°
μ»΄ν¬λνΈ : μ ν리μΌμ΄μ μ κ΅¬μ± μμ
- νλμ μ ν리μΌμ΄μ μ μ¬λ¬ μ»΄ν¬λνΈλ‘ ꡬμ±λλ©°, μ΄λ¬ν μ»΄ν¬λνΈλ ν΄λμ€λ‘ κ°λ°λλ€.
1. μλλ‘μ΄λ μ±μ ꡬμ±νλ ν΄λμ€
- μ ν리μΌμ΄μ μ ꡬμ±νλ λͺ¨λ ν΄λμ€κ° μ»΄ν¬λνΈλ μλ
- ν¬κ² μλ λ ν΄λμ€λ‘ ꡬλΆ. λ λ€ κ°λ°μκ° λ§λλ ν΄λμ€μ§λ§, λ°νμ λ μλͺ μ£ΌκΈ°λ₯Ό λκ° κ΄λ¦¬νλκ°μ λ°λΌ ꡬλΆ
1) μ»΄ν¬λνΈ ν΄λμ€
- μ±μ΄ μ€νλ λ μλͺ μ£ΌκΈ°λ₯Ό μλλ‘μ΄λ μμ€ν μμ κ΄λ¦¬νλ ν΄λμ€
2) μΌλ° ν΄λμ€
- μ±μ΄ μ€νλ λ ν΄λμ€μ κ°μ²΄ μμ±λΆν° μλ©ΈκΉμ§ μλͺ μ£ΌκΈ° κ΄λ¦¬λ₯Ό κ°λ°μ μ½λμμ νλ ν΄λμ€
- κ°λ°μκ° μμμ λͺ©μ μ κ°μ§κ³ λ§λ ν΄λμ€
2. μ»΄ν¬λνΈμ μ’ λ₯
- μ§μ λ μμ ν΄λμ€λ₯Ό λ³΄κ³ κ΅¬λΆνλ€.
1) μ‘ν°λΉν°(Activity ν΄λμ€) : νλ©΄μ ꡬμ±νλ μ»΄ν¬λνΈ. μ±μ΄ μ€νλλ©΄ μ‘ν°λΉν°μμ μΆλ ₯ν λ΄μ©μ΄ νλ©΄μ λμ΄.
2) μλΉμ€(Service ν΄λμ€) : λ°±κ·ΈλΌμ΄λ μμ μ νλ μ»΄ν¬λνΈ.
3) μ½ν μΈ νλ‘λ°μ΄λ(ContentProvider ν΄λμ€) : μ±μ λ°μ΄ν°λ₯Ό 곡μ νλ μ»΄ν¬λνΈ. μ± κ°μ λ°μ΄ν° 곡μ κ°λ₯
4) λΈλ‘λμΊμ€νΈ 리μλ²(BroadcastReceiver ν΄λμ€) : μμ€ν μ΄λ²€νΈκ° λ°μν λ μ€νλκ² νλ μ»΄ν¬λνΈ.
* μμ€ν μ΄λ²€νΈ : μμ€ν μμ λ°μνλ νΉμ μν© - λΆν μλ£, λ°°ν°λ¦¬ λ°©μ λ±μ μν©
3. μ»΄ν¬λνΈλ μ± μμμ λ 립λ μ€ν λ¨μ
- μ»΄ν¬λνΈλΌλ¦¬ μλ‘ μ’ μλμ§ μμμ μ½λ κ²°ν©μ΄ λ°μνμ§ μλλ€.
- λ ν΄λμ€λ₯Ό κ²°ν©ν΄μ μ€ννλ λ°©μβ : μ»΄ν¬λνΈμ μλͺ μ£ΌκΈ°λ₯Ό μλλ‘μ΄λ μμ€ν μμ κ΄λ¦¬νλ―λ‘ μ½λμμ μ§μ κ°μ²΄λ₯Ό μμ±ν΄ μ€νν μ μμ.
- μλλ‘μ΄λ μμ€ν μ κ²°ν©μ μλ’°ν΄ μ€ννλ λ°©μβ : λ ν΄λμ€κ° μλ‘ μ’ μλμ§ μκ³ λ 립ν΄μ μ€ν
4. μ»΄ν¬λνΈλ‘ ꡬμ±λ μλλ‘μ΄λ μ±μ νΉμ§
1) μ±μ μ€ν μμ μ΄ λ€μ : μ»΄ν¬λνΈκ° μ± λ΄μμ λ 립ν΄μ μ€νλκΈ° λλ¬Έ
2) μ ν리μΌμ΄μ λΌμ΄λΈλ¬λ¦¬ μ¬μ© : λ€λ₯Έ μ ν리μΌμ΄μ μ λΌμ΄λΈλ¬λ¦¬μ²λΌ μ΄μ© κ°λ₯
3) 리μμ€ νμ©
- 리μμ€ : μ½λμμ μ μ μΈ κ°μ λΆλ¦¬ν κ²
- κ°μ κ°μ λ§€λ² μ¬μ©νλ€λ©΄, μ½λμ λ΄μ§ μκ³ λ¦¬μμ€λ‘ λΆλ¦¬ν΄μ κ°λ° -> κ°λ° μμ°μ±κ³Ό μ μ§λ³΄μμ± μ¦κ°
// λ¬Έμμ΄μ 리μμ€λ‘ λ±λ‘νκΈ°
<string name="mytxt">
λν΄ λ¬Όκ³Ό λ°±λμ°μ΄ λ§λ₯΄κ³ λ³λλ‘
νλλμ΄ λ³΄μ°νμ¬ μ°λ¦¬λλΌ λ§μΈ
</string>
// λ¬Έμμ΄ λ¦¬μμ€ μ¬μ© μμ
textView.text = resources.getString(R.string.mytxt)
μ± κ΅¬μ± νμΌ λΆμ
1. νλ‘μ νΈ ν΄λ ꡬ쑰
- νλ‘μ νΈλ₯Ό λ§λ€λ©΄ appμ΄λΌλ λͺ¨λμ΄ μμ±
- νλμ λͺ¨λ = νλμ μ±(but μ¬λ¬ λͺ¨λλ‘ λλμ΄ μμ± κ°λ₯)
2. λͺ¨λμ ν΄λ ꡬμ±
μ΄λ¦ | μ€λͺ |
build.gradle | λΉλ μ€μ νμΌ |
AndroidManifest.xml | μ±μ λ©μΈ νκ²½ νμΌ |
res | 리μμ€ ν΄λ |
activity_main.xml | λ μ΄μμ XML νμΌ |
MainActivity.kt | λ©μΈ μ‘ν°λΉν° νμΌ |
1) gradle λΉλ μ€μ νμΌ
- gradle : μλλ‘μ΄λ μ±μ λΉλ λꡬ
- build.gradle : gradleμ μ€μ νμΌ -> μ±μ λΉλνλλ° νμν μ€μ μ μ΄ νμΌμ λ±λ‘
- νλ‘μ νΈ μμ€μ gradle(Project: AndroidLab)κ³Ό λͺ¨λ μμ€μ build.gradle(Module: AndroidLab.app) μ€ νμμ λλΆλΆμ λΉλ μ€μ μμ±
- νλ¬κ·ΈμΈ μ€μ
plugins { // κΈ°λ³Έμ μΌλ‘ μλ λ κ° μ μΈ, νμμ λ°λΌ μΆκ° κ°λ₯
id 'com.android.application'
id 'kotlin-android'
}
- μ»΄νμΌ λ° λΉλ λ²μ μ€μ
compileSdkVersion 30 // μλλ‘μ΄λ SDK 30 λ²μ μ μ μ©ν΄μ μ»΄νμΌν΄λΌ
buildToolsVersion "30.0.2"
- μ±μ μλ³μ μ€μ (κ³ μ ν λ¬Έμμ΄)
applicationId "com.example.androidLab"
- SDK λ²μ μ€μ
minSdkVersion 16 // μ΄ μ±μ μ€μΉν μ μλ κΈ°κΈ°μ μ΅μ SDK λ²μ
targetSdkVersion 30 // κ°λ°ν λ μ μ©λλ SDK λ²μ
- μ±μ λ²μ μ€μ
versionCode 1 // μ΄κΉκ°μ 1μ΄μ§λ§ μ€μΉ ν μ
λ°μ΄νΈ μ λ²μ μ¬λ €μ λ°°ν¬
versionName "1.0"
- κ°λ° μΈμ΄μ λ²μ μ€μ : μλ° λ²μ μ μΈ μλ΅ μ κΈ°λ³Έμ μΌλ‘ 1.6 μ μ©
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
- μ±μμ μ΄μ©νλ λΌμ΄λΈλ¬λ¦¬μ λ²μ μ€μ : targetSDKVersionμ λͺ μν μλλ‘μ΄λ SDKλ κΈ°λ³ΈμΌλ‘ μ μ©λμ§λ§ κ·Έ μΈμ κ°λ°μκ° μΆκ°νλ μ€ν μμ€ λΌμ΄λΈλ¬λ¦¬λ ꡬκΈμ androidx λΌμ΄λΈλ¬λ¦¬ λ± SDK λΌμ΄λΈλ¬λ¦¬κ° μλ μΈλΆ λΌμ΄λΈλ¬λ¦¬λ μ μΈ νμ
dependencies {
implementation "org.jetbrains.kotlin::kotlin-stdlib:$kotlin_version"
implementation "androidx.core:core-ktx:1.3.2"
implementation "androidx.appcompat::appcompat::1.2.0'
}
2) λ©μΈ νκ²½ νμΌ
- AndroidManifest.xml : μλλ‘μ΄λ μ±μ λ©μΈ νκ²½ νμΌ(맀λνμ€νΈ νμΌ). μ΄ νμΌ λ°νμΌλ‘ μ¬μ©μμ ν°μμ μ± μ€ν
- λ€μμ€νμ΄μ€ μ μΈ
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.androidlab">
<manifest> : 맀λνμ€νΈ νμΌμ λ£¨νΈ νκ·Έ
- xmlns : XMLμ λ€μμ€νμ΄μ€ μ μΈ
- URL : http://schemas.android.com/apk/res/androidλ‘ μ€μ λμλ€λ©΄ μλλ‘μ΄λ νμ€ λ€μμ€νμ΄μ€
- package : 맀λνμ€νΈ νμΌμ μ μΈν μ»΄ν¬λνΈ ν΄λμ€μ κΈ°λ³Έ ν¨ν€μ§λͺ -> μ΄ν λͺ¨λ κ²½λ‘λ ν¨ν€μ§λͺ μ΄νλΆν° μμ±
- application νκ·Έ
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher" // res/map/ic_launcher.png
android:label="@string/app_name" // res/values/strings.xml
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AndroidLab"> // res/values/themes.xml
<application> : μ± μ 체λ₯Ό λμμΌλ‘ νλ μ€μ νκ·Έ
- xmlμ μμ±κ°μ΄ @λ‘ μμνλ©΄ 리μμ€λ₯Ό μλ―Έ
- icon : μ±μ μ€νν μ¬μ©μμ ν°μ 보μ΄λ μ€ν μμ΄μ½
- label : μ±μ μ΄λ¦ λ±λ‘ - res/values/strings.xml νμΌμ app_nameμΌλ‘ λ±λ‘λ λ¬Έμμ΄ λ¦¬μμ€
- theme : μ±μ μ μ©ν΄μΌ νλ ν λ§ μ€μ - res/values/themes.xml νμΌμ Theme.AndroidLab μ΄λ¦μΌλ‘ μ μΈν ν λ§ μ μ©
μλλ‘μ΄λ μ»΄ν¬λνΈλ μμ€ν μμ μλͺ μ£ΌκΈ°λ₯Ό κ΄λ¦¬νκ³ , μμ€ν μ 맀λνμ€νΈ νμΌμ μλ λλ‘ μ±μ μ€ννλ―λ‘
μλλ‘μ΄λ μ»΄ν¬λνΈλ 맀λνμ€νΈ νμΌμ λ±λ‘ν΄μΌ μμ€ν μ΄ μΈμ§ν μ μλ€!
- μ‘ν°λΉν° μ μΈ
<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>
- μ»΄ν¬λνΈ νλ λΉ νκ·Έ νλ
- name : νμ μμ± - ν΄λμ€ μ΄λ¦ λ±λ‘ ex) name = ".MainActivity"
- <intent-filter> : μλ΅ κ°λ₯ -> μ¬μ©μκ° μ±μ μ€μΉνμ λ μ± μμ΄μ½μ΄ λμ€λ μ¬λΆ κ²°μ (μ¬μ©μ μ€ν μ¬λΆ)
3) 리μμ€ ν΄λ
res ν΄λ : μ±μ 리μμ€λ₯Ό λ±λ‘νλ λͺ©μ
- drawable : μ΄λ―Έμ§ 리μμ€
- layout : UI ꡬμ±μ νμν XML 리μμ€
- mipmap : μ± μμ΄μ½ μ΄λ―Έμ§
- values : λ¬Έμμ΄ λ±μ κ°μΌλ‘ μ΄μ©λλ 리μμ€
μλλ‘μ΄λ 리μμ€ νμΌμ΄ μ¬μ©λλ μ리
- res ν΄λ μλμ 리μμ€λ₯Ό λ§λ€λ©΄ μλμΌλ‘ R.java νμΌμ μμ λ³μλ‘ λ¦¬μμ€κ° λ±λ‘λλ©°, μ½λμμλ μ΄ μμ λ³μλ‘ λ¦¬μμ€λ₯Ό μ΄μ©νλ€. R.javaλ κ°λ°μκ° λ§λλ νμΌμ΄ μλλ©° res ν΄λμ μλ 리μμ€λ₯Ό λ³΄κ³ μλμΌλ‘ λ§λ€μ΄μ§λ€. λ°λΌμ κ°λ°μλ μ΄λ₯Ό νμΈν μ μλ€!
리μμ€ ν΄λ κ·μΉ
- res νμμ ν΄λλͺ μ μ§μ λ ν΄λλͺ μ μ¬μ©ν΄μΌ νλ€. (κ°λ°μ μμμ ν΄λ μ¬μ© λΆκ°)
ex) μ΄λ―Έμ§ - drawable ν΄λ, UI κ΄λ ¨ XML νμΌ - layout ν΄λ
- κ° λ¦¬μμ€ ν΄λμ λ€μ νμ ν΄λλ₯Ό μ μν μ μλ€.
- 리μμ€ νμΌλͺ μ μλ°μ μ΄λ¦ κ·μΉμ μλ°°ν μ μλ€. (R.java νμΌμ λ³μλͺ μΌλ‘ μ¬μ©λκΈ° λλ¬Έ) - μ«μ μμ λΆκ°
- 리μμ€ νμΌλͺ μ μνλ²³ λλ¬Έμλ₯Ό μ΄μ©ν μ μλ€. - λ λ¨μ΄ μ°κ²° μ two_wordsμ²λΌ λ°μ€ μ΄μ©
4) λ μ΄μμ XML νμΌ
- νλ©΄μ ꡬμ±νλ XML νμΌ
<androidx.constriantlayout.widget.ConstraintLayout> : λ μ΄μμ μ±ν°μμ μμΈν λ€λ£¬λ€
<textView> : νλ©΄μ λ¬Έμμ΄μ μΆλ ₯νλ μν
5) λ©μΈ μ‘ν°λΉν° νμΌ
맀λνμ€νΈ νμΌμ μ€μ κ°μ λ°λΌ ν°μ μ±μ μ€μΉν ν μ± μμ΄μ½μ ν°μΉνλ©΄ MainActivity.kt μ€ν
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
- AppCompatActivityλ₯Ό μμλ°μ λ§λ ν΄λμ€ : νλ©΄ μΆλ ₯μ λͺ©μ μΌλ‘ νλ μ‘ν°λΉν° ν΄λμ€
- MainActivity ν¨μ μ€ν μ onCreate() ν¨μ μλ νΈμΆ
-> setContentView() ν¨μ : 맀κ°λ³μμ μ§μ ν λ΄μ©μ μ‘ν°λΉν° νλ©΄μ μΆλ ₯
-> R.layout.activity_main - res/layout/activity_main.xml νμΌμ ꡬμ±λ λ΄μ©μ νλ©΄μ μΆλ ₯
'Android' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Chap 6] λ·°λ₯Ό μ΄μ©ν νλ©΄ κ΅¬μ± (0) | 2021.11.30 |
---|---|
[Chap 5] μ½νλ¦°μ μ μ©ν κΈ°λ² (0) | 2021.11.23 |
[Chap 4] μ½νλ¦° κ°μ²΄μ§ν₯ νλ‘κ·Έλλ° (0) | 2021.11.20 |
[Chap 3] μ½νλ¦° μμνκΈ° (0) | 2021.11.19 |
[Chap 1] μλλ‘μ΄λ μ€νλμ€ μ€μΉ κ³Όμ μμ μ£Όμ μ£Όμ (0) | 2021.11.09 |
λκΈ