Eine vollständige Android-Anwendung zum Lesen von NFC-Tags und zum Emulieren von NFC-Cards mit Host Card Emulation (HCE).
-
📖 NFC-Tags lesen - Erfasse und dekodiere NFC-Tags
- Auslesen von Tag-Informationen (ID, Typ, Technologien)
- Dekodierung von NDEF-Nachrichten
- Unterstützung für Text- und URI-Records
-
🎭 NFC-Emulation - Emuliere eine virtuelle NFC-Card
- Host Card Emulation (HCE) für NFC-F
- APDU-Befehlsverarbeitung
- SELECT, READ BINARY und UPDATE machen BINARY-Befehle
-
🎨 Moderne UI - Mit Jetpack Compose erstellt
- Material Design 3
- Intuitive Bedienung
- Echtzeit-Status-Updates
-
🔍 Detaillierte Logs - Timber-Integration für umfassende Debugging-Informationen
- Android SDK: API 21+
- Target SDK: API 34
- Kotlin Version: 1.9.22+
- Gradle Version: 8.2.0+
- NFC-Hardware: NFC-fähiges Gerät (nicht in Emulatoren verfügbar)
app/
├── src/main/
│ ├── kotlin/com/example/nfcclone/
│ │ ├── MainActivity.kt # Hauptaktivität
│ │ ├── NFCCloneApplication.kt # App-Konfiguration
│ │ ├── nfc/
│ │ │ ├── NfcManager.kt # NFC-Hilfsfunktionen
│ │ │ ├── NfcTagData.kt # Datenmodell für Tags
│ │ │ ├── NfcDiscoveryActivity.kt # Tag-Discovery Handler
│ │ │ └── HostCardEmulationService.kt # HCE-Service
│ │ └── ui/
│ │ ├── screens/
│ │ │ └── HomeScreen.kt # Hauptoberfläche
│ │ └── theme/
│ │ ├── Theme.kt # Farben & Design
│ │ └── Type.kt # Typografie
│ ├── res/
│ │ ├── values/
│ │ │ ├── strings.xml # Texte
│ │ │ ├── colors.xml # Farben
│ │ │ └── themes.xml # Themes
│ │ └── xml/
│ │ ├── nfc_tech_filter.xml # NFC-Technologie-Filter
│ │ ├── nfc_applet_config.xml # HCE-Konfiguration
│ │ ├── backup_rules.xml # Backup-Regeln
│ │ └── data_extraction_rules.xml # Daten-Extraktions-Regeln
│ └── AndroidManifest.xml # App-Manifest
└── build.gradle.kts # Gradle-Konfiguration
- Android Studio 4.0+
- JDK 17+
- NFC-fähiges Android-Gerät
- Repository klonen
git clone https://github.com/Oberonskii/nfc-clone.git
cd nfc-clone-
Android Studio öffnen
- Projekt öffnen
- Gradle-Sync durchführen
- Build-Fehler beheben (falls erforderlich)
-
Mit Gerät verbinden
- Android-Gerät über USB anschließen
- USB-Debugging aktivieren
- Gerät in Android Studio erkennen
-
App kompilieren und starten
./gradlew build
./gradlew installDebug- App starten
- "NFC Tags lesen" auswählen
- "Start" antippen
- NFC-Tag an die Rückseite des Geräts halten
- Tag-Informationen werden angezeigt
- App starten
- "NFC emulieren" auswählen
- "Emulation starten" antippen
- Die App emuliert jetzt eine NFC-Card
- Mit einem anderen NFC-Lesegerät nähern
Die App unterstützt folgende NFC-Standards:
- NFC Type A - ISO/IEC 14443-3 Type A
- NFC Type B - ISO/IEC 14443-3 Type B
- NFC Type F - JIS X 6319-4
- NFC Type V - ISO/IEC 15693
- NDEF - NFC Data Exchange Format
- ISO-DEP - ISO/IEC 7816-4 compatible
// AndroidX
androidx.core:core-ktx:1.12.0
androidx.activity:activity-ktx:1.8.1
androidx.lifecycle:lifecycle-runtime-ktx:2.7.0
// Jetpack Compose
androidx.compose.ui:ui:1.6.4
androidx.compose.material3:material3:1.2.0
androidx.activity:activity-compose:1.8.1
// NFC
androidx.nfc:nfc:1.1.0
// Coroutines
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3
// Logging
com.jakewharton.timber:timber:5.0.1Die App erfordert folgende Berechtigungen:
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />
<uses-feature android:name="android.hardware.nfc.hce" android:required="true" />// Tag aus Intent auslesen
val tagData = NfcManager.getNfcTagFromIntent(intent)
// NDEF-Nachricht erstellen
val message = NfcManager.createNdefMessage("Hello World")
// URI-Nachricht erstellen
val uriMessage = NfcManager.createNdefUriMessage("https://example.com")
// In Tag schreiben
val success = NfcManager.writeNdefToTag(tag, message)Der HCE-Service verarbeitet APDU-Befehle:
- SELECT (0xA4) - Datei auswählen
- READ BINARY (0xB0) - Daten lesen
- UPDATE BINARY (0xD0) - Daten schreiben
-
Eigene NDEF-Record-Typen
- Im
NfcManagerneue Record-Handler hinzufügen
- Im
-
APDU-Befehle erweitern
- Im
HostCardEmulationServiceneue Befehle implementieren
- Im
-
Weitere NFC-Technologien
- NfcV, TypeF-Unterstützung erweitern
Die App nutzt Timber für Logging. Alle wichtigen Operationen werden geloggt:
D NFC Clone Application started
D NFC Tag discovered
D Tag ID: 12345678ABCDEF
D Tag Type: Android UID
D Tag Technologies: IsoDep, NfcA, Ndef
- Stelle sicher, dass NFC im Gerät aktiviert ist
- Halte das Tag länger an das Gerät
- Überprüfe die NFC-Antenne des Geräts
- Nicht alle Geräte unterstützen HCE
- Überprüfe
android.hardware.nfc.hceim Manifest - Verwende ein kompatibles Lesegerät
gradle --versionüberprüfen (min. 8.2.0)Invalidate Caches / Restartin Android Studio.gradleundbuild-Ordner löschen
MIT License - Siehe LICENSE Datei für Details
Oberonskii
Fehler-Berichte und Pull Requests sind willkommen!
- ✅ NFC-Tag-Lesen implementiert
- ✅ Host Card Emulation (HCE) implementiert
- ✅ Material Design 3 UI
- ✅ NDEF-Dekodierung
- ✅ Timber-Logging
- Tag-Speicher in lokaler Datenbank
- Export/Import von Tag-Daten
- Erweiterte APDU-Verarbeitung
- NFC-P2P-Funktionalität
- Tag-Emulation mit benutzerdefinierten Daten