Zum Hauptinhalt springen

AAR-Dateien in Capacitor Plugins verwenden

Erfahre in diesem Schritt-für-Schritt-Guide, wie du AAR-Dateien in Capacitor-Plugins integrierst, um deine Web-Apps mit nativen Android-Features zu erweitern.

AAR-Dateien in Capacitor Plugins verwenden

Möchtest du Android-Features in deine Capacitor app? In diesem Guide erfährst du, wie du AAR (Android Archive) Dateien in Capacitor Plugin installierst, nutzt, um native Android-Funktionalität mit Cross-Platform-Web-Apps zu kombinieren.

Das Wichtigste in Kürze:

  • Was sind AAR-Dateien? Vorgefertigte Android-Libraries mit code, Ressourcen und nativen Dateien.
  • Warum sie nutzen? AAR-Dateien ermöglichen die Wiederverwendung von code, vereinfachen die Wartung und schützen proprietäre Features.
  • Was wird benötigt? Tools wie Android Studio, Gradle, und Node.js, plus ein korrektes Projekt-Setup.
  • Wie erfolgt die Integration? AAR-Dateien in diesen Ordner legen, libsGradle konfigurieren und mit Capacitor Plugins verbinden.

Kurzanleitung:

  1. Umgebung einrichten: Erforderliche Tools installieren und Android Studio konfigurieren.
  2. Projekt strukturieren: Eine klare Struktur für dein Capacitor Plugin.
  3. AAR-Dateien hinzufügen: Diese in diesen Ordner legen android/libs und die Gradle-Dependencies aktualisieren.
  4. code Plugin schreiben: AAR-Funktionalität via JavaScript verknüpfen mit Capacitor’s API.
  5. Gründlich testen: Nutze den Android Studio Debugger für eine reibungslose Integration.

Mit diesem Guide kannst du AAR-Dateien nahtlos in deine Capacitor Plugins einbinden und native Android-Funktionen für deine Web-Apps freischalten.

So bettest du eine Android-Library (AAR-Datei) in ein capacitor Plugin ein

capacitor

Anforderungen an das Development Setup

Bevor du mit AAR-Dateien arbeitest, stelle sicher, dass deine Entwicklungsumgebung korrekt konfiguriert ist, um Probleme zu vermeiden.

Erforderliche Software

Hier ist die Software, die du für die Arbeit mit AAR-Dateien in Capacitor Plugins benötigst:

Software Mindestversion Zweck
Android Studio 2022.1.1 oder höher Die primäre IDE für die Android-Entwicklung
Java Development Kit 11 oder höher Erforderlich für die Android-Entwicklung
Node.js 14.0 oder höher Zur Verwaltung von Capacitor und npm Paketen
Gradle 7.3 oder höher Androids Build-Tool
Git 2.30 oder höher Für Versionskontrolle und Paketverwaltung

Stelle außerdem sicher, dass folgende Komponenten in deinem SDK Manager enthalten sind:

  • Android SDK Platform 33 (Android 13.0)
  • Android SDK Build-Tools 33.0.0
  • Android SDK Command-Line-Tools
  • Android-Emulator
  • Android SDK Platform-Tools

Projekt-Setup-Schritte

1. Entwicklungsumgebung einrichten

Erstelle zuerst ein neues Verzeichnis mit dieser Struktur:

my-plugin/
├── android/
│   ├── src/
│   └── build.gradle
├── src/
│   └── definitions.ts
└── package.json

2. Android Studio Einstellungen konfigurieren

Starte Android Studio und passe folgende Einstellungen an:

  • Setze das Gradle JDK auf Version 11 oder höher.
  • Aktiviere den Auto-Download für Android SDK Komponenten.
  • Passe deine System-Umgebungsvariablen mit dem korrekten Android SDK Pfad an.

3. Plugin-Struktur vorbereiten

Aktualisiere die android/build.gradle Datei mit diesen Einstellungen, um AAR-Dateien zu unterstützen:

android {
    compileSdkVersion 33
    defaultConfig {
        minSdkVersion 22
        targetSdkVersion 33
    }

    repositories {
        flatDir {
            dirs 'libs'
        }
    }
}

4. Versionsverwaltung einrichten

Initialisiere Git in deinem Projektverzeichnis und erstelle eine .gitignore Datei, um unnötige Dateien auszuschließen. Hier ist ein Beispiel für eine .gitignore:

android/build/
node_modules/
dist/
*.iml
.idea/
.gradle/
local.properties

Sobald diese Schritte abgeschlossen sind, kannst du mit dem Hinzufügen deiner AAR-Dateien fortfahren.

AAR-Dateien zu deinem Plugin hinzufügen

AAR-Dateien beschaffen

AAR-Dateien können von Drittanbieter-SDKs, benutzerdefinierten Libraries oder Maven-Dependencies stammen. Es ist ratsam, Quelle, Version und Zweck in einer README file located in the libs directory.

Quelltyp Beschreibung Best Practice
SDKs von Drittanbietern Vorkompilierte Vendor-Libraries Vendor-Versionsdetails in README dokumentieren
Eigene Android-Libraries Selbst entwickelte Android-Module Build-Prozess dokumentieren
Maven-Abhängigkeiten Aus Remote-Repositories konvertiert Für Offline-Builds lokal cachen

Sobald deine AAR-Files bereit und dokumentiert sind, kannst du dein Plugin so konfigurieren, dass sie enthalten sind.

Plugin-Dateien einrichten

Organisiere deine Plugin-Dateien so, dass AAR-Abhängigkeiten reibungslos integriert werden können. Hier ist ein Beispiel für eine mögliche Plugin-Struktur:

my-plugin/
├── android/
│   ├── libs/        # AAR files with README
│   ├── src/
│   └── build.gradle
├── src/
│   └── definitions.ts
└── package.json
{
    "files": [
        "android/libs/*.aar",
        "android/src/**/*",
        "src/**/*"
    ]
}

AAR-Dateien platzieren

Um die AAR-Funktionalität zu aktivieren, lege die Dateien im android/libs Verzeichnis deines Plugins nach diesen Schritten ab:

  • Verwende ein klares und konsistentes Namensformat, wie zum Beispiel libraryname-version.aar.
  • Verwalte Versionen in einer versions.properties Datei. Zum Beispiel:
library1=1.2.3
library2=2.0.0
  • Füge eine dependencies.gradle Datei für andere Abhängigkeiten:
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.aar'])
    implementation 'com.example:dependency:1.0.0'
}
  • Organisiere anbieterspezifische Dateien in Unterverzeichnissen für eine bessere Verwaltung:
android/libs/
├── vendor1/
│   ├── feature.aar
│   └── config.json
└── vendor2/
    ├── module.aar
    └── settings.xml

Konfigurationsdateien in anbieterspezifischen Unterverzeichnissen zu halten, hilft bei der Strukturierung und vermeidet Build-Konflikte bei der Arbeit mit mehreren AAR-Abhängigkeiten.

Gradle Konfigurationsschritte

Schnittstelle zum Gradle Build Tool

build.gradle aktualisieren

Um AAR-Dateien in dein Capacitor Plugin zu integrieren, musst du Gradle entsprechend konfigurieren. Füge zuerst diese Repository-Einstellungen zu android/build.gradle:

repositories {
    google()
    mavenCentral()
    flatDir {
        dirs 'libs'
    }
}

Füge anschließend die AAR-Abhängigkeiten in den dependencies -Block ein:

dependencies {
    implementation files('libs/your-library.aar')
    implementation fileTree(dir: 'libs', include: ['**/*.aar'])
    implementation "com.getcapacitor:core:${capacitorVersion}"
    implementation "androidx.appcompat:appcompat:1.6.1"
}

Für ein besseres Version-Management erstelle eine gradle.properties -Datei in deinem Projekt-Root und definiere dort deine Library-Versionen:

# Library versions
MY_LIBRARY_VERSION=1.2.3
CAPACITOR_VERSION=5.5.0

Falls die AAR-Datei zusätzliche Abhängigkeiten mitbringt, deklariere diese in android/build.gradle so:

android {
    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 33
    }

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
    }
}

Sobald du diese Änderungen vorgenommen hast, synchronisiere dein Projekt, um sie anzuwenden.

Gradle Sync ausführen

Öffne dein Projekt in Android Studio und warte, bis Gradle automatisch synchronisiert. Falls der Vorgang nicht startet, klicke in der Toolbar auf den Button „Sync Project with Gradle Files“.

Nach dem Sync überprüfe Folgendes:

Checkpunkt Erwartetes Ergebnis Häufige Probleme
Build-Output Keine AAR-bezogenen Fehler Fehlende Dependencies
Library-Auflösung AAR-Files korrekt verlinkt Falsche Pfad-Referenzen
Versionskonflikte Keine Probleme mit Dependency-Versionen Inkompatible Versionen

Falls der Sync fehlschlägt, überprüfe deine Konfiguration. Stelle zum Beispiel sicher, dass diese Einstellungen gesetzt sind:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    lintOptions {
        abortOnError false
    }
}

Bei großen AAR-Dateien musst du eventuell den Gradle-Speicherbedarf in gradle.properties:

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m

Sobald der Sync erfolgreich abgeschlossen ist, sollten deine AAR-Dateien vollständig integriert und bereit für Tests sein.

AAR-Features mit Capacitor verbinden

Die Plugin-Klasse schreiben

Sobald deine Gradle-Dateien synchronisiert sind, kannst du deine AAR-Funktionalität nutzen, indem du die Plugin- klasse erweiterst. Dieser Schritt verbindet JavaScript mit dem nativen Android code.

@NativePlugin(
    permissions = {
        Manifest.permission.REQUIRED_PERMISSION
    }
)
public class YourPlugin extends Plugin {
    private YourAARLibrary libraryInstance;

    @Override
    public void load() {
        super.load();
        libraryInstance = new YourAARLibrary(getContext());
    }
}

Das benötigst du für die Initialisierung der AAR-Library:

Komponente Zweck Implementierungshinweis
Kontext Android App-Kontext Nutze getContext() aus der Plugin-Klasse
Konfiguration Library-Einstellungen Optionen vom Plugin übergeben
Lifecycle Plugin State Management Überschreiben load() und handleOnDestroy()

Plugin-Methoden erstellen

Definiere anschließend Methoden in deinem Plugin mit der @PluginMethod Annotation. Diese Methoden steuern den Datenaustausch zwischen JavaScript und Java.

@PluginMethod
public void performAction(PluginCall call) {
    try {
        // Get data from JavaScript
        String inputData = call.getString("inputKey");

        // Call AAR library method
        YourLibraryResult result = libraryInstance.processData(inputData);

        // Return result to JavaScript
        JSObject ret = new JSObject();
        ret.put("value", result.getValue());
        call.resolve(ret);
    } catch (Exception e) {
        call.reject("Error processing data", e);
    }
}

Für Aufgaben, die asynchron ausgeführt werden müssen:

@PluginMethod(returnType = PluginMethod.RETURN_CALLBACK)
public void startContinuousOperation(PluginCall call) {
    call.setKeepAlive(true);

    libraryInstance.setCallback(new LibraryCallback() {
        @Override
        public void onUpdate(String data) {
            JSObject ret = new JSObject();
            ret.put("data", data);
            call.resolve(ret);
        }
    });
}

So werden gängige Typen zwischen JavaScript und Java konvertiert:

JavaScript-Typ Java-Typ Konvertierungsmethode
Object JSObject call.getObject()
Array JSArray call.getArray()
String String call.getString()
Number Integer/Double call.getInt()/call.getDouble()
Boolean Boolean call.getBoolean()

Um Ressourcen freizugeben, überschreiben Sie die handleOnDestroy Methode:

@Override
protected void handleOnDestroy() {
    if (libraryInstance != null) {
        libraryInstance.cleanup();
        libraryInstance = null;
    }
    super.handleOnDestroy();
}

Mit diesen Methoden ist Ihre Native Bridge bereit. Testen Sie Ihre Implementierung in der Android Studio Debug-Umgebung, um sicherzustellen, dass alles wie erwartet funktioniert.

Testen und Fehler beheben

Debugging in Android Studio

Android Studio

Um deine AAR-Integration in Android Studio zu debuggen, aktiviere zuerst den Debug-Modus in deinem Projekt build.gradle Datei ein:

android {
    buildTypes {
        debug {
            debuggable true
            minifyEnabled false
        }
    }
}

Setze Breakpoints in deinen Plugin-Methoden, um den Datenfluss zu verfolgen und Probleme zu finden:

@PluginMethod
public void yourMethod(PluginCall call) {
    // Set a breakpoint here to inspect input data
    String inputValue = call.getString("key");
    // Another breakpoint here to check method calls to the AAR
    libraryInstance.someMethod(inputValue);
}

Nutze das Debug-Panel in Android Studio, um wichtige Bereiche zu überwachen:

Debugging-Bereich Was zu prüfen ist Häufige Probleme
Logcat AAR-Initialisierungsmeldungen Fehlende Berechtigungen oder falscher Kontext
Variablen Datentyp-Konvertierungen Null-Werte oder Typen-Mismatch
Stacktrace Methoden-Ablauf Ungültige Methodenaufrufe oder Threading-Probleme
Memory Ressourcenverbrauch Memory Leaks

Falls das Debugging das Problem nicht löst, folge den Troubleshooting-Schritten im nächsten Abschnitt.

Troubleshooting-Schritte

Wenn Debugging allein nicht ausreicht, helfen diese Schritte bei häufigen Problemen:

1. Dependency-Konflikte

Prüfe deine Datei auf Versionskonflikte in der build.gradle Datei. Du kannst spezifische Versionen erzwingen, um Konflikte zu lösen:

configurations.all {
    resolutionStrategy {
        force 'com.google.android:android:4.1.1.4'
        // Add other forced versions as needed
    }
}

2. Fehlende Native Libraries

Stelle sicher, dass die AAR die benötigten .so Dateien in den richtigen Verzeichnissen enthält, wie zum Beispiel:

  • jniLibs/armeabi-v7a/
  • jniLibs/arm64-v8a/
  • jniLibs/x86/
  • jniLibs/x86_64/

3. Probleme beim Manifest Merger

Falls Manifest-Konflikte auftreten, füge Folgendes in deine AndroidManifest.xml Datei ein, um problematische Libraries zu überschreiben:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="your.plugin.package">
    <uses-sdk tools:overrideLibrary="conflicting.library.package"/>
</manifest>

4. Runtime Crashes und Memory Management

Nutze den Performance-Tab in Android Studio, um die Runtime-Stabilität zu überwachen. Behandle Exceptions bei Initialisierungsproblemen sorgfältig:

try {
    libraryInstance = new YourAARLibrary(getContext());
} catch (Exception e) {
    Log.e("PluginError", "Failed to initialize library: " + e.getMessage());
    return;
}

Um Memory Leaks zu vermeiden, stelle sicher, dass Ressourcen ordnungsgemäß freigegeben werden. Nutze den Memory Profiler in Android Studio, um den Heap-Verbrauch zu überwachen und Leaks zu finden.

Zusammenfassung

Um AAR-Dateien in Capacitor Plugins zu integrieren, musst du die Android-Umgebung einrichten, die AAR-Dateien korrekt platzieren, Gradle präzise konfigurieren und alles gründlich testen.

Wichtige Implementierungsphasen

Phase Anforderungen Erfolgskriterien
Development-Setup Android Studio 4.0+, Gradle 7.0+ Build schließt fehlerfrei ab
AAR-Integration Korrekte Dateipfade, richtige Dependencies Keine Manifest-Konflikte
Plugin-Entwicklung Klare Plugin-Struktur, präzises Method-Mapping Methoden werden wie erwartet ausgeführt
Das Testen von Debug-Modus aktiv, effektives Error-Handling Keine Runtime-Crashes

Sobald du diese Grundlagen beherrschst, kannst du fortgeschrittenere Techniken erkunden.

Nächste Schritte

Um dein Plugin zu verbessern, konzentriere dich auf diese Bereiche:

  • Performance-Optimierung
    Nutze den Android Studio Profiler, um die Speichernutzung zu überwachen und ein sauberes Resource-Cleanup sicherzustellen.

  • Vorbereitung der Distribution
    Dokumentiere alle AAR-Konfigurationen, erstelle die API Dokumentation und teste die Kompatibilität mit Android API Levels 29–34.

  • Wartungsstrategie
    Automatisiere Tests, verwalte AAR-Versionen via Version Control, führe ein Changelog und richte Error Reporting ein, um Probleme im Production-Umfeld zu lösen.

Falls du dein Plugin öffentlich teilen möchtest, stelle detaillierte Dokumentationen zu AAR-spezifischen Setups und Plattform-Limitierungen bereit. Das erleichtert es anderen Entwicklern, dein Plugin effektiv zu nutzen.

Weiterlesen unter: How to Use AAR Files in Capacitor Plugins

Wenn Sie ... verwenden AAR-Dateien in Capacitor Plugins verwenden um die Arbeit an Native Plugins zu planen, verbinde es mit Capgo Plugin-Verzeichnis für den Produkt-Workflow im Capgo Plugin-Verzeichnis, Capacitor Plugins von Capgo für die Implementierungsdetails in Capacitor Plugins von Capgo, Plugins hinzufügen oder aktualisieren für die Implementierungsdetails in Adding or Updating Plugins, Ionic Enterprise Plugin-Alternativen für den Produkt-Workflow in Ionic Enterprise Plugin Alternatives und Capgo Native Builds für den Produkt-Workflow in Capgo Native Builds.

Live-Updates für Capacitor-Apps

Wenn ein Bug im Web-Layer live ist, rollst du den Fix über Capgo aus, statt Tage auf die App-Store-Freigabe zu warten. Nutzer bekommen das Update im Hintergrund, während native Änderungen weiter den normalen Review-Prozess durchlaufen.

Neuestes aus unserem Blog

Capgo bietet dir die besten Insights für eine wirklich professionelle Mobile App.