Difference between revisions of "OS: PRAKTIKUM — Cross-Platform App Build"

From OnnoWiki
Jump to navigation Jump to search
 
(One intermediate revision by the same user not shown)
Line 106: Line 106:
  
 
Makefile OpenWRT
 
Makefile OpenWRT
 +
<pre><nowiki>
 
include $(TOPDIR)/rules.mk
 
include $(TOPDIR)/rules.mk
  
Line 131: Line 132:
  
 
$(eval $(call BuildPackage,hello-cross))
 
$(eval $(call BuildPackage,hello-cross))
 +
</nowiki></pre>
  
 
===Build Package===
 
===Build Package===
Line 143: Line 145:
  
 
==Compile Android App (APK)==
 
==Compile Android App (APK)==
Konsep Build Aplikasi Android
+
===Konsep Build Aplikasi Android===
 
Android:
 
Android:
Tidak menjalankan binary Linux biasa sebagai app
+
* Tidak menjalankan binary Linux biasa sebagai app
Menggunakan APK
+
* Menggunakan APK
Runtime: ART
+
* Runtime: ART
 
Namun, source tetap open source, dan build dilakukan di Ubuntu.
 
Namun, source tetap open source, dan build dilakukan di Ubuntu.
Contoh Aplikasi Android Sederhana
+
 
 +
===Contoh Aplikasi Android Sederhana===
 
Struktur minimal:
 
Struktur minimal:
HelloAndroid/
+
HelloAndroid/
├── AndroidManifest.xml
+
  ├── AndroidManifest.xml
├── build.gradle
+
  ├── build.gradle
└── app/
+
  └── app/
    └── src/main/java/MainActivity.java
+
      └── src/main/java/MainActivity.java
Contoh MainActivity.java
+
 
 +
===Contoh MainActivity.java===
 +
<pre><nowiki>
 
package com.example.helloandroid;
 
package com.example.helloandroid;
  
Line 171: Line 176:
 
     }
 
     }
 
}
 
}
 +
</nowiki></pre>
 +
 
Build APK di Ubuntu (Gradle)
 
Build APK di Ubuntu (Gradle)
./gradlew assembleDebug
+
./gradlew assembleDebug
 +
 
 
APK akan berada di:
 
APK akan berada di:
app/build/outputs/apk/debug/
+
app/build/outputs/apk/debug/
Install ke Android x86
 
  
adb install app-debug.apk
+
===Install ke Android x86===
 +
adb install app-debug.apk
 
Observasi OS:
 
Observasi OS:
Aplikasi berjalan sebagai process Android
+
* Aplikasi berjalan sebagai process Android
Terisolasi UID
+
* Terisolasi UID
Tidak bisa akses kernel langsung
+
* Tidak bisa akses kernel langsung
Perbandingan & Analisis Cross-Platform
 
 
 
Aspek
 
Ubuntu
 
OpenWRT
 
Android
 
Output
 
ELF binary
 
ELF binary
 
APK
 
libc
 
glibc
 
musl
 
bionic
 
Toolchain
 
gcc
 
target-gcc
 
clang
 
Runtime
 
Linux
 
Linux
 
ART
 
Target
 
Server/Desktop
 
Embedded
 
Mobile/VM
 
 
 
  
 +
{| class="wikitable" style="margin:auto"
 +
|+ Perbandingan & Analisis Cross-Platform
 +
|-
 +
! Aspek !! Ubuntu !! OpenWRT !! Android
 +
|-
 +
| Output || ELF binary || ELF binary || APK
 +
|-
 +
| libc || glibc || musl || bionic
 +
|-
 +
| Toolchain || gcc || target-gcc || clang
 +
|-
 +
| Runtime || Linux || Linux || ART
 +
|-
 +
| Target || Server/Desktop || Embedded || Mobile/VM
 +
|}
  
 +
Insight penting:
 +
Cross-platform bukan berarti satu binary untuk semua, tetapi satu source untuk banyak build.
  
 
+
==Mini Challenge (Fun & Menantang)==
 
 
 
 
Insight penting:
 
Cross-platform bukan berarti satu binary untuk semua, tetapi satu source untuk banyak build.
 
Mini Challenge (Fun & Menantang)
 
 
Beberapa tantangan opsional:
 
Beberapa tantangan opsional:
Ubah teks output → build ulang di 3 OS
+
* Ubah teks output → build ulang di 3 OS
Bandingkan ukuran binary
+
* Bandingkan ukuran binary
Jalankan strace di Ubuntu vs Android
+
* Jalankan strace di Ubuntu vs Android
Amati syscall yang gagal di Android
+
* Amati syscall yang gagal di Android
 
Tantangan ini melatih analisis OS behavior, bukan sekadar compile.
 
Tantangan ini melatih analisis OS behavior, bukan sekadar compile.
Refleksi Akademik (OBE-Oriented)
+
 
 +
==Refleksi Akademik (OBE-Oriented)==
 
Setelah praktikum ini, mahasiswa mampu:
 
Setelah praktikum ini, mahasiswa mampu:
✅ Meng-compile aplikasi lintas OS
+
* ✅ Meng-compile aplikasi lintas OS
✅ Memahami toolchain dan ABI
+
* ✅ Memahami toolchain dan ABI
✅ Mengaitkan user space dengan kernel
+
* ✅ Mengaitkan user space dengan kernel
✅ Berpikir sebagai cross-platform system engineer
+
* ✅ Berpikir sebagai cross-platform system engineer
Penutup
+
 
 +
==Penutup==
 
Praktikum ini menegaskan satu hal penting:
 
Praktikum ini menegaskan satu hal penting:
Sistem operasi adalah fondasi eksekusi, bukan sekadar lingkungan belajar.
+
Sistem operasi adalah fondasi eksekusi, bukan sekadar lingkungan belajar.
 +
 
 
Mahasiswa kini:
 
Mahasiswa kini:
Tidak hanya membangun OS
+
* Tidak hanya membangun OS
Tidak hanya membangun aplikasi
+
* Tidak hanya membangun aplikasi
Tetapi menghubungkan keduanya secara lintas platform
+
* Tetapi menghubungkan keduanya secara lintas platform
 +
 
 
Selamat — Anda telah menembus batas antar sistem operasi.
 
Selamat — Anda telah menembus batas antar sistem operasi.
  

Latest revision as of 11:33, 15 February 2026

Tujuan Praktikum

Praktikum ini bertujuan membuktikan secara nyata bahwa:

Perbedaan sistem operasi bukan pada kernel semata,
tetapi pada user space, toolchain, dan runtime.

Setelah praktikum ini, mahasiswa diharapkan mampu:

  • Meng-compile CLI tool native di Ubuntu 24.04
  • Meng-compile package OpenWRT menggunakan cross-toolchain
  • Meng-compile aplikasi Android (APK) dari source
  • Memahami konsep cross-platform dan cross-compilation secara praktis

Konteks Akademik & Konsep Inti

Posisi Praktikum dalam Alur Sistem Operasi

Mengacu pada outline Sistem Operasi, 2026, praktikum ini berada setelah:

  • Build kernel Linux
  • Build OpenWRT x86
  • Build Android x86
  • Build aplikasi open source (BAB 15)

Artinya, mahasiswa kini:

  • Tidak hanya membangun OS
  • Tetapi memanfaatkan OS sebagai platform eksekusi aplikasi lintas sistem

Mindset kunci:

Mahasiswa berpindah dari OS builder menjadi system integrator.

Konsep Dasar Cross-Platform App Build

Satu source code dapat menghasilkan binary berbeda, tergantung:

  • Arsitektur CPU
  • libc yang digunakan
  • ABI (Application Binary Interface)
  • Toolchain
Platform Compiler libc
Ubuntu 24.04 gcc glibc
OpenWRT target-gcc musl
Android clang (NDK) bionic

Kesimpulan akademik:

Kernel Linux sama, user space menentukan kompatibilitas aplikasi.

Compile CLI Tool di Ubuntu 24.04

Tujuan

Membangun CLI tool native Linux sebagai baseline sebelum masuk ke cross-compile.

Source Code CLI Tool (C)

// hello-cli.c
#include <stdio.h>

int main() {
    printf("Hello from Ubuntu CLI tool!\n");
    return 0;
}

Langkah Compile di Ubuntu

sudo apt update
sudo apt install -y build-essential
gcc hello-cli.c -o hello-cli

Jalankan:

./hello-cli

Observasi OS:

  • Binary ELF dieksekusi oleh kernel Linux
  • printf() → system call → kernel

Ini adalah user space murni

Analisis Akademik Singkat

Gunakan:

ldd hello-cli
file hello-cli

Mahasiswa dapat melihat:

  • Dependency glibc
  • Arsitektur binary
  • Loader ELF

Compile OpenWRT Package (Cross-Compile)

Konsep Build di OpenWRT

OpenWRT tidak membangun aplikasi langsung di target, melainkan:

  • Build di Ubuntu (host)
  • Jalan di OpenWRT (target)

Inilah cross-compilation yang sesungguhnya.

Struktur Package OpenWRT

package/hello-cross/
 ├── Makefile
 └── src/
     └── hello-openwrt.c

Source Code (Sama Secara Logika)

#include <stdio.h>

int main() {
    printf("Hello from OpenWRT!\n");
    return 0;
}

Makefile OpenWRT

include $(TOPDIR)/rules.mk

PKG_NAME:=hello-cross
PKG_VERSION:=1.0

include $(INCLUDE_DIR)/package.mk

define Package/hello-cross
  SECTION:=utils
  CATEGORY:=Utilities
  TITLE:=Hello Cross Platform
endef

define Build/Compile
	$(TARGET_CC) $(TARGET_CFLAGS) \
		-o $(PKG_BUILD_DIR)/hello \
		$(PKG_BUILD_DIR)/hello-openwrt.c
endef

define Package/hello-cross/install
	$(INSTALL_DIR) $(1)/usr/bin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/hello $(1)/usr/bin/
endef

$(eval $(call BuildPackage,hello-cross))

Build Package

make package/hello-cross/compile V=s

Hasil .ipk dapat di-install di OpenWRT:

opkg install hello-cross.ipk
hello

Insight OS:

Binary OpenWRT tidak bisa dijalankan di Ubuntu, walau kernel sama.

Compile Android App (APK)

Konsep Build Aplikasi Android

Android:

  • Tidak menjalankan binary Linux biasa sebagai app
  • Menggunakan APK
  • Runtime: ART

Namun, source tetap open source, dan build dilakukan di Ubuntu.

Contoh Aplikasi Android Sederhana

Struktur minimal:

HelloAndroid/
 ├── AndroidManifest.xml
 ├── build.gradle
 └── app/
     └── src/main/java/MainActivity.java

Contoh MainActivity.java

package com.example.helloandroid;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {
    protected void onCreate(Bundle b) {
        super.onCreate(b);
        TextView tv = new TextView(this);
        tv.setText("Hello from Android APK!");
        setContentView(tv);
    }
}

Build APK di Ubuntu (Gradle)

./gradlew assembleDebug

APK akan berada di:

app/build/outputs/apk/debug/

Install ke Android x86

adb install app-debug.apk

Observasi OS:

  • Aplikasi berjalan sebagai process Android
  • Terisolasi UID
  • Tidak bisa akses kernel langsung
Perbandingan & Analisis Cross-Platform
Aspek Ubuntu OpenWRT Android
Output ELF binary ELF binary APK
libc glibc musl bionic
Toolchain gcc target-gcc clang
Runtime Linux Linux ART
Target Server/Desktop Embedded Mobile/VM

Insight penting:

Cross-platform bukan berarti satu binary untuk semua, tetapi satu source untuk banyak build.

Mini Challenge (Fun & Menantang)

Beberapa tantangan opsional:

  • Ubah teks output → build ulang di 3 OS
  • Bandingkan ukuran binary
  • Jalankan strace di Ubuntu vs Android
  • Amati syscall yang gagal di Android

Tantangan ini melatih analisis OS behavior, bukan sekadar compile.

Refleksi Akademik (OBE-Oriented)

Setelah praktikum ini, mahasiswa mampu:

  • ✅ Meng-compile aplikasi lintas OS
  • ✅ Memahami toolchain dan ABI
  • ✅ Mengaitkan user space dengan kernel
  • ✅ Berpikir sebagai cross-platform system engineer

Penutup

Praktikum ini menegaskan satu hal penting:

Sistem operasi adalah fondasi eksekusi, bukan sekadar lingkungan belajar.

Mahasiswa kini:

  • Tidak hanya membangun OS
  • Tidak hanya membangun aplikasi
  • Tetapi menghubungkan keduanya secara lintas platform

Selamat — Anda telah menembus batas antar sistem operasi.

Pranala Menarik