Android är ett mobilt operativsystem från Google med öppen källkod (AOSP) som körs på Linux-kärnan. Android-utveckling görs i Kotlin med Android Studio. Den här artikeln täcker operativsystemets arkitektur, appkomponenter, Jetpack Compose och publicering på Google Play.
Viktiga punkter
Android är ett mobilt operativsystem baserat på Linux-kärnan, utvecklat av Google sedan 2007. Källkoden är öppen under Apache 2.0-licensen som en del av Android Open Source Project (AOSP). Varje tillverkare kan ändra systemet och installera det på sina enheter.
Enligt StatCounter (2026) innehar Android cirka 72% av den globala marknaden för mobila operativsystem. De största tillverkarna är Samsung, Xiaomi, Oppo, Vivo, Google Pixel. Fragmentering är ett nyckelproblem för plattformen: tusentals modeller med olika OS-versioner används samtidigt.
Android-arkitekturen är byggd på principen om behörigheter (permissions): varje app körs under en separat Linux-UID och har endast tillgång till sina egna data. Åtkomst till systemresurser (kamera, mikrofon, kontakter) begärs via Android Permissions under körning, från och med Android 6 (API 23).
Android 1.0 släpptes 2008 på HTC Dream. Viktiga milstolpar: Android 4.0 Ice Cream Sandwich (enhetligt gränssnitt för telefoner och surfplattor), Android 5.0 Lollipop (Material Design), Android 6.0 (runtime-behörigheter), Android 10 (mörkt tema, gester), Android 12 (Material You). Sedan 2023 har Google övergått till årliga större utgåvor utan efterrättsnamn.
| Android-version | År | Nyckelinnovation |
|---|---|---|
| Android 1.0 | 2008 | Första utgåvan på HTC Dream |
| Android 4.0 (ICS) | 2011 | Enhetlig design för telefoner och surfplattor |
| Android 5.0 (L) | 2014 | Material Design, ART istället för Dalvik |
| Android 6.0 (M) | 2015 | Runtime-behörigheter, Doze-läge |
| Android 8.0 (O) | 2017 | Kotlin som officiellt språk |
| Android 10 (Q) | 2019 | Scoped Storage, mörkt tema |
| Android 12 (S) | 2021 | Material You, Privacy Dashboard |
| Android 15 | 2024 | Private Space, satellitanslutning |
Android-arkitekturen består av fyra huvudlager som isolerar hårdvaran från användarapplikationer. Varje lager använder tjänster från lagret under via strikt definierade gränssnitt.
Det nedersta lagret är en modifierad Linux-kärna (LTS, version 6.x i Android 15). Den hanterar minne, processer, nätverksstack och drivrutiner. Hardware Abstraction Layer (HAL) tillhandahåller ett enhetligt API för interaktion med hårdvaran: kamera, Bluetooth, Wi-Fi, sensorer. Tillverkare implementerar HAL-moduler utan att påverka de övre lagren.
ART kör applikationernas DEX-bytekod. Från och med Android 5.0 ersatte ART Dalvik och använder Ahead-of-Time (AOT)-kompilering för förbättrad prestanda. Varje app har sin egen process med en separat ART-instans. Sopsamling (GC) fungerar med minimala pauser — en typisk GC-paus är 2–4 ms.
Ramverket är det lager som utvecklaren arbetar direkt med. Det inkluderar Activity Manager (skärmstack), Content Providers (dataåtkomst), Resource Manager (lokalisering, resurser), Notification Manager, Location Manager. Alla systemtjänster anropas via Binder IPC — Androids mekanism för interprocesskommunikation.
// Exempel på arbete med Binder via AIDL-gränssnitt
interface IDataService : android.os.IInterface {
fun getData(): List<DataItem>
fun saveData(item: DataItem): Boolean
}
// Serviceimplementering
class DataService : Service() {
private val binder = object : IDataService.Stub() {
override fun getData(): List<DataItem> = repository.getAll()
override fun saveData(item: DataItem): Boolean = repository.save(item)
}
override fun onBind(intent: Intent?): IBinder = binder
}Det översta lagret består av vanliga systemapplikationer: Telefon, Kontakter, Kamera, Inställningar, Webbläsare. De har inte högre privilegier än användarappar, men kan ersättas av tredjepartsappar. I Android 15 uppdateras systemappar via Google Play System Updates oberoende av tillverkarens OTA-uppdateringar.
Kotlin är ett statiskt typat programmeringsspråk från JetBrains som körs på JVM. Google tillkännagav Kotlin som officiellt Android-språk 2017 på Google I/O. Kotlin är fullt kompatibelt med Java men eliminerar dess brister: null-säkerhet, dataklasser, tilläggsfunktioner och koroutiner.
Huvudfunktionen i Kotlin är inbyggt skydd mot NullPointerException. Typer är uppdelade i nullable (String?) och non-null (String). Kompilatorn kontrollerar nullable-åtkomst vid byggtid. Safe call (?.) och Elvis-operatorn (?:) förenklar arbete med valfria värden utan nästlade kontroller.
// Exempel på Kotlin-kod med koroutiner och Flow
data class User(
val id: Long,
val name: String,
val email: String
)
class UserRepository(
private val api: UserApi,
private val dao: UserDao
) {
suspend fun getUser(id: Long): Result<User> {
return try {
val cached = dao.getUser(id)
if (cached != null) {
return Result.success(cached)
}
val remote = api.fetchUser(id)
dao.insertUser(remote)
Result.success(remote)
} catch (e: Exception) {
Result.failure(e)
}
}
fun observeUsers(): Flow<List<User>> {
return dao.observeAll()
.map { list -> list.sortedBy { it.name } }
.flowOn(Dispatchers.Default)
}
}Exemplet visar koroutiner (suspend-funktion) för asynkron nätverks- och databasåtkomst, Flow för reaktiv observation av dataförändringar och Result för säker felhantering. Koroutiner ersätter callbacks och RxJava utan trådoverhead.
Kotlin-koroutiner är lätta trådar som körs på en delad trådpool. Dispatchers.IO för nätverk och disk, Dispatchers.Main för UI, Dispatchers.Default för CPU-intensiva uppgifter. viewModelScope och lifecycleScope avbryter automatiskt koroutiner när komponenten förstörs.
// ViewModel med koroutiner och StateFlow
class UserViewModel(
private val repository: UserRepository
) : ViewModel() {
private val _users = MutableStateFlow<List<User>>(emptyList())
val users: StateFlow<List<User>> = _users.asStateFlow()
private val _loading = MutableStateFlow(false)
val loading: StateFlow<Boolean> = _loading.asStateFlow()
init {
viewModelScope.launch {
repository.observeUsers().collect { userList ->
_users.value = userList
}
}
}
fun refresh() {
viewModelScope.launch {
_loading.value = true
repository.getUser(42).onSuccess { user ->
_users.value = listOf(user)
}
_loading.value = false
}
}
}Android Studio är den officiella IDE baserad på IntelliJ IDEA, utvecklad av Google. Den inkluderar kodredigerare, Layout Inspector, enhetsemulator, APK Analyzer, Profiler (CPU, Minne, Nätverk, Energi) och Firebase-integration. Android Studio 2024 (Ladybug) stöder Kotlin 2.0 med plattformsoberoende KMP-läge.
Android-emulatorn använder KVM (Linux) eller Hyper-V (Windows) för hårdvaruacceleration. Den stöder simulering av GPS, sensorer, kamera, samtal och SMS. Google Pixel 9 Pro är den rekommenderade konfigurationen för testning med API 35 och 8 GB emulator-RAM.
Profiler visar i realtid CPU-belastning, minnesallokering, nätverksförfrågningar och energiförbrukning. Memory Profiler möjliggör heap-dumpning och läckageanalys via referensträdet. Network Inspector registrerar alla HTTP/HTTPS-förfrågningar med brödtext och rubriker. För djupgående analys används Android Studio Canary.
En Android-app består av fyra typer av komponenter, var och en med sin egen ingångspunkt och livscykel. Komponenterna registreras i filen AndroidManifest.xml.
| Komponent | Syfte | Ingångspunkt |
|---|---|---|
| Activity | Skärm med UI för användarinteraktion | Intent med Action.MAIN och kategori LAUNCHER |
| Service | Utförande av bakgrundsuppgifter utan UI | startService() eller bindService() |
| BroadcastReceiver | Mottagning av system- eller anpassade händelser | Registrering i manifest eller i kod |
| ContentProvider | Hantering av åtkomst till strukturerad data | URI via ContentResolver |
Activity är den grundläggande komponenten i användargränssnittet. Varje skärm är en separat Activity eller ett Fragment i en Activity. Navigering mellan skärmar sker via Intent — ett objekt som innehåller en åtgärd (ACTION_VIEW, ACTION_SEND) och data (URI). I Jetpack Navigation Graph beskrivs navigering i XML.
Service utför bakgrundsuppgifter, men från och med Android 8 är bakgrundstjänster begränsade. WorkManager är det rekommenderade biblioteket för fördröjda och garanterade bakgrundsuppgifter med stöd för kedjor, begränsningar (t.ex. endast vid laddning) och omstart efter krasch.
Valet mellan Jetpack Compose och traditionella XML-layouter är det viktigaste arkitekturbeslutet när man startar ett Android-projekt. XML-layouter (RecyclerView, ConstraintLayout, FrameLayout) har varit standard sedan 2008. Jetpack Compose introducerades 2021 som ett deklarativt alternativ.
| Kriterium | XML Layouts | Jetpack Compose |
|---|---|---|
| Paradigm | Imperativ (View-träd) | Deklarativ (@Composable-funktioner) |
| Minsta version | Valfri (API 1+) | API 21+ (Android 5.0) |
| Layout | XML + data binding / ViewBinding | Kotlin-kod med Modifier |
| RecyclerView-analog | RecyclerView + Adapter + ViewHolder | LazyColumn / LazyGrid |
| Förhandsgranskning | XML-förhandsgranskning i Android Studio | @Preview-annotering med interaktivitet |
| Rekomposition | notifyDataSetChanged (fullständig) | Automatisk, granulär (DiffUtil) |
| Interoperabilitet | Fullständig (alla bibliotek) | ComposeView i XML / AndroidView i Compose |
Google rekommenderar Jetpack Compose för alla nya projekt. XML-layouter förblir relevanta för stöd av äldre projekt och för fall där maximal View-anpassning (Canvas, SurfaceView) behövs. Compose-kod är i genomsnitt 40% kortare än motsvarande XML + ViewBinding.
// Jetpack Compose — användarprofils skärm
@Composable
fun ProfileScreen(
user: User,
onEditClick: () -> Unit,
modifier: Modifier = Modifier
) {
Column(
modifier = modifier
.fillMaxSize()
.padding(16.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
AsyncImage(
model = user.avatarUrl,
contentDescription = "Användaravatar",
modifier = Modifier
.size(120.dp)
.clip(CircleShape)
)
Spacer(modifier = Modifier.height(16.dp))
Text(
text = user.name,
style = MaterialTheme.typography.headlineMedium
)
Text(
text = user.email,
style = MaterialTheme.typography.bodyLarge,
color = MaterialTheme.colorScheme.onSurfaceVariant
)
Spacer(modifier = Modifier.height(24.dp))
Button(onClick = onEditClick) {
Icon(Icons.Default.Edit, contentDescription = null)
Spacer(modifier = Modifier.width(8.dp))
Text("Redigera profil")
}
}
}
@Preview(showBackground = true, showSystemUi = true)
@Composable
fun ProfileScreenPreview() {
MaterialTheme {
ProfileScreen(
user = User(1, "Anna Petrova", "anna@example.com"),
onEditClick = {}
)
}
}Funktionen ProfileScreen deklareras som @Composable — den beskriver UI deklarativt utan att skapa View-instanser. Compose uppdaterar automatiskt skärmen när user ändras. @Preview visar resultatet direkt i IDE utan att bygga och köra på emulatorn.
Varje Activity i Android går igenom sex livscykeltillstånd: onCreate, onStart, onResume, onPause, onStop, onDestroy. Fragment lägger till onAttach, onCreateView, onViewCreated. Att förstå livscykeln är avgörande för minneshantering och förebyggande av läckor.
onCreate — anropas en gång när Activity skapas. Här utförs initiering: setContentView, adapterinställning, LiveData-prenumeration. onResume — Activity är i förgrunden och interagerar med användaren. onPause — Activity förlorar fokus (dialogruta, annan Activity). onStop — Activity är inte synlig. onDestroy — Activity förstörs.
// Activity med livscykelhantering via LifecycleScope
class MainActivity : ComponentActivity() {
private val viewModel: UserViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MaterialTheme {
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
viewModel.users.collect { users ->
updateUi(users)
}
}
}
}
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("last_search", searchQuery)
}
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
searchQuery = savedInstanceState.getString("last_search", "")
}
}Användning av repeatOnLifecycle säkerställer att datainsamling pausas när Activity går i bakgrunden och återupptas när den återgår till förgrunden. Detta förhindrar läckor och onödiga nätverksförfrågningar. onSaveInstanceState sparar temporärt tillstånd vid skärmrotation.
Google Play är den officiella Android-appbutiken. Utvecklarkontoregistrering kostar 25 USD en gång. Varje app genomgår en automatisk Google Play Integrity-kontroll för skadlig kod, policyöverträdelser och felaktig användning av behörigheter.
Google kräver app-signering via Android App Bundle (AAB) eller APK. AAB är det rekommenderade formatet, som möjliggör generering av optimerade APK:er för varje enhetskonfiguration. Appen måste signeras med en nyckel (keystore) med ett giltigt certifikat. Google Play App Signing är valfri nyckelkryptering på Googles sida.
Alla appar som begär åtkomst till personuppgifter måste tillhandahålla en Sekretesspolicy. Från och med 2024 kräver Google en Data Safety-deklaration — ett formulär som anger vilka typer av data som samlas in och ändamålen med behandlingen. Appar som riktar sig till Android 14+ måste använda Declarations API för att deklarera behörigheter.
| Krav | Beskrivning |
|---|---|
| Android App Bundle | AAB-format för optimerad leverans |
| Data Safety | Formulär om insamling och behandling av personuppgifter |
| Mål-SDK | Appen måste rikta sig mot den senaste Android-API-nivån |
| Innehållsklassificering | Enkät för åldersklassificering |
| Butiksföteckning | Namn, ikon, skärmbilder, beskrivning |
Vanliga frågor
Kotlin — det officiellt rekommenderade språket av Google för Android. Java stöds också för äldre projekt. Kotlin erbjuder null-säkerhet, koroutiner och tilläggsfunktioner, vilket minskar kodmängden med 30–40% jämfört med Java.
Jetpack Compose rekommenderas för alla nya projekt tack vare dess deklarativa syntax och automatiska optimering av rekomposition. XML Layouts förblir i äldre projekt och fall där detaljerad anpassning av Canvas eller SurfaceView behövs.
Registrering som Google Play-utvecklare kostar 25 USD en gång. Butikens provision är 15% för de första 1 miljon USD i intäkter, därefter 30%. För prenumerationer är provisionen 15% från dag ett. Till skillnad från Apple Developer Program finns det ingen årlig avgift.
Android Jetpack är en uppsättning Google-bibliotek som ingår i det officiella SDK: Navigation, Room (SQLite ORM med kompileringstidsfrågekontroll), WorkManager (garanterade bakgrundsuppgifter), ViewModel (tillståndshantering), LiveData och StateFlow för reaktivitet.
Den lägsta versionen som stöds för nya projekt är API 24 (Android 7.0). AndroidManifest.xml beskriver appens komponenter och behörigheter. APK/AAB signeras med en keystore. Mål-SDK måste matcha den senaste API-nivån vid tidpunkten för publicering.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också