Zum Hauptinhalt springen

So nutzt du AAR-Dateien in Capacitor-Plugins

Erfahre in dieser Schritt-für-Schritt-Anleitung, wie du AAR-Dateien in Capacitor-Plugins integrierst, um deine Web-Apps mit nativen Android-Features aufzuwerten.

So verwendest du AAR-Dateien in Capacitor-Plugins Capgo Blog-Illustration

Möchtest du Android-Features in deine Capacitor App? Dieser Guide erklärt die Nutzung von AAR-Dateien (Android Archive) in Capacitor Plugins um native Android-Funktionalität mit Cross-Platform-Web-Apps zu kombinieren.

Wichtigste Erkenntnisse:

  • Was sind AAR-Dateien? Vorkonfigurierte Android-Bibliotheken mit code, Ressourcen und nativen Dateien.
  • Warum nutzen? AAR-Dateien ermöglichen die Wiederverwendung von code, vereinfachen die Wartung und schützen proprietäre Funktionen.
  • Was wird benötigt? Tools wie Android Studio, Gradle-, und Node.js, plus ein sauberes Projekt-Setup.
  • Wie integriere ich es? AAR-Dateien ablegen in libs, Gradle konfigurieren und sie mit Capacitor-Plugins verbinden.

Kurzanleitung:

  1. Umgebung einrichten: Erforderliche Tools installieren und Android Studio konfigurieren.
  2. Projekt organisieren: Eine klare Struktur für dein Capacitor Plugin.
  3. AAR-Dateien hinzufügen: Legen Sie sie in android/libs und aktualisieren Sie die Gradle-Abhängigkeiten.
  4. Plugin-code schreiben: AAR-Funktionalität mit JavaScript verknüpfen mit API von Capacitor.
  5. Gründlich testen: Nutzen Sie den Debugger von Android Studio für eine reibungslose Integration.

Wenn Sie diesem Leitfaden folgen, können Sie AAR-Dateien nahtlos in Ihre Capacitor-Plugins integrieren und native Android-Funktionen für Ihre Web-Apps freischalten.

So binden Sie eine Android-Bibliothek (AAR-Datei) in ein capacitor Plugin

capacitor

Voraussetzungen für die Entwicklungsumgebung

Stelle vor der Arbeit mit AAR-Dateien sicher, dass deine Entwicklungsumgebung korrekt konfiguriert ist, um Probleme zu vermeiden.

Erforderliche Software

Das 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 Haupt-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 Zum Verwalten 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 Plattform 33 (Android 13.0)
  • Android SDK Build-Tools 33.0.0
  • Android SDK Command-Line-Tools
  • Android-Emulator
  • Android SDK Platform-Tools

Schritte zum Projekt-Setup

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:

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

3. Plugin-Struktur vorbereiten

Aktualisiere die android/build.gradle Datei mit diesen Einstellungen, um AAR-Datei-Support einzubinden:

android {
    compileSdkVersion 33
    defaultConfig {
        minSdkVersion 22
        targetSdkVersion 33
    }

    repositories {
        flatDir {
            dirs 'libs'
        }
    }
}

4. Versionskontrolle einrichten

Initialisiere Git in deinem Projektverzeichnis und erstelle eine .gitignore Datei, um unnötige Dateien auszuschließen. Hier ist ein Beispiel .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 beginnen.

AAR-Dateien zu deinem Plugin hinzufügen

AAR-Dateien besorgen

AAR-Dateien können aus Third-Party-SDKs, eigenen Bibliotheken oder Maven-Abhängigkeiten stammen. Es ist sinnvoll, Herkunft, Version und Zweck in einer README Datei, die sich im libs Verzeichnis.

Quelltyp Beschreibung Best Practice
Drittanbieter-SDKs Vorkompilierte Bibliotheken von Anbietern Versionsdetails des Anbieters in einer README dokumentieren
Eigene Android-Bibliotheken Eigene Android-Module Build-Prozess dokumentieren
Maven-Abhängigkeiten Konvertiert aus Remote-Repositories Lokal cachen für Offline-Builds

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

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 ab. Gehe dabei so vor:

  • Verwende ein klares, einheitliches 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 einen 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 zur besseren Verwaltung in Unterverzeichnisse:
android/libs/
├── vendor1/
│   ├── feature.aar
│   └── config.json
└── vendor2/
    ├── module.aar
    └── settings.xml

Konfigurationsdateien in anbieterspezifischen Unterverzeichnissen zu halten, sorgt für Ordnung und vermeidet Build-Konflikte bei der Arbeit mit mehreren AAR-Abhängigkeiten.

Gradle- Konfigurationsschritte

Gradle-Build-Tool-Schnittstelle

build.gradle aktualisieren

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

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

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

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 eine bessere Versionsverwaltung erstelle eine gradle.properties Datei im Projektstamm und definiere deine Bibliotheksversionen:

# Library versions
MY_LIBRARY_VERSION=1.2.3
CAPACITOR_VERSION=5.5.0

Wenn die AAR-Datei zusätzliche Abhängigkeiten mitbringt, deklariere sie in android/build.gradle wie folgt:

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 es nicht startet, klicke auf die Schaltfläche „Sync Project with Gradle Files“ in der Symbolleiste.

Prüfe nach der Synchronisierung Folgendes:

Prüfpunkt Erwartetes Ergebnis Häufige Probleme
Build-Output Keine AAR-bezogenen Fehler Fehlende Abhängigkeiten
Library-Auflösung AAR-Dateien korrekt verknüpft Falsche Pfadverweise
Versionskonflikte Keine Abhängigkeitsversionsprobleme Inkompatible Versionen

Falls die Synchronisierung fehlschlägt, überprüfe deine Konfiguration. Stelle beispielsweise sicher, dass diese Einstellungen vorhanden sind:

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

    lintOptions {
        abortOnError false
    }
}

Für große AAR-Dateien musst du möglicherweise die Speicherzuweisung von Gradle in erhöhen gradle.properties:

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

Sobald die Synchronisierung erfolgreich abgeschlossen ist, sollten deine AAR-Dateien vollständig integriert und testbereit sein.

AAR-Funktionen mit Capacitor verbinden

Die Plugin-Klasse schreiben

Sobald deine Gradle-Dateien synchronisiert sind, ist es an der Zeit, deine AAR-Funktionalität zu verbinden, indem du die erweiterst Plugin Klasse. Dieser Schritt verknüpft 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 hier ist, was du für die Initialisierung der AAR-Bibliothek brauchst:

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

Plugin-Methoden erstellen

Definiere als Nächstes 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 Konversionsmethode
Objekt JSObject call.getObject()
Array JSArray call.getArray()
String String call.getString()
Number Integer/Double call.getInt()/call.getDouble()
Boolean Boolean call.getBoolean()

Zum Bereinigen von Ressourcen überschreiben Sie die handleOnDestroy Methode:

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

Sobald diese Methoden eingerichtet sind, ist Ihre native Bridge bereit. Testen Sie Ihre Implementierung in der Debug-Umgebung von Android Studio, um sicherzustellen, dass alles wie erwartet funktioniert.

Testen und Fehler beheben

Debugging in Android Studio

Android Studio

Um Ihre AAR-Integration in Android Studio zu debuggen, aktivieren Sie zunächst den Debug-Modus in Ihrem Projekt- build.gradle Datei:

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

Fügen Sie Breakpoints in Ihren Plugin-Methoden hinzu, um den Datenfluss zu verfolgen und potenzielle Probleme zu identifizieren:

@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);
}

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

Debugging-Bereich Prüfpunkte Häufige Probleme
Logcat AAR-Initialisierungsnachrichten Fehlende Berechtigungen oder falscher Kontext
Variablen Datentypkonvertierungen Nullwerte oder Typ-Mismatches
Stacktrace Ablauf der Methodenausführung Ungültige Methodenaufrufe oder Threading-Probleme
Speicher 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, gehen Sie häufige Probleme mit diesen Schritten an:

1. Abhängigkeitskonflikte

Prüfen Sie auf Versionskonflikte in Ihrer build.gradle Datei. Sie können bestimmte 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-Bibliotheken

Stellen Sie sicher, dass die AAR die erforderlichen .so Dateien in den entsprechenden Verzeichnissen enthält, z. B.:

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

3. Manifest-Merger-Probleme

Wenn Sie auf Manifest-Konflikte stoßen, fügen Sie Folgendes in Ihre AndroidManifest.xml Datei zum Überschreiben problematischer Bibliotheken:

<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 Speicherverwaltung

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

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 korrekt konfigurieren und alles gründlich testen.

Wichtige Implementierungsphasen

Phase Anforderungen Erfolgskriterien
Entwicklungssetup Android Studio 4.0+, Gradle 7.0+ Build läuft ohne Fehler durch
AAR-Integration Korrekte Dateiablage, richtige Dependencies Keine Manifest-Konflikte
Plugin-Entwicklung Klare Plugin-Struktur, präzises Method-Mapping Methoden werden wie erwartet ausgeführt
Testen 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 optimieren, konzentriere dich auf diese Bereiche:

  • Performance-Optimierung
    Nutze den Android Studio Profiler, um die Speichernutzung zu überwachen und sicherzustellen, dass Ressourcen korrekt freigegeben werden.

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

  • Wartungsstrategie
    Automatisiere Tests, verwalte AAR-Versionen mit Versionskontrolle, pflege ein Changelog und richte Error Reporting ein, um Produktionsprobleme zu beheben.

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

Weiterlesen unter: How to Use AAR Files in Capacitor Plugins

Wenn du es nutzt So nutzt du AAR-Dateien in Capacitor-Plugins Um die Arbeit an nativen Plugins zu planen, verbinde sie mit Capgo Plugin-Verzeichnis für den Produkt-Workflow im Capgo Plugin-Verzeichnis, Capacitor Plugins von Capgo für das Implementierungsdetail in Capacitor Plugins von Capgo, Plugins hinzufügen oder aktualisieren für die Implementierungsdetails unter „Plugins hinzufügen oder aktualisieren“, Ionic Enterprise Plugin-Alternativen für den Produkt-Workflow in Ionic Enterprise Plugin-Alternativen und Capgo Native Builds optimieren für den Produkt-Workflow in Capgo Native Builds.

Live-Updates für Capacitor-Apps

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

Neues aus unserem Blog

Capgo gibt dir die besten Insights, um eine wirklich professionelle Mobile App zu erstellen.