it-swarm.com.de

Cordova Plugin-Entwicklung - Hinzufügen von Aar

Ich bin neu in der Entwicklung des Cordova-Plugins ... Ich möchte ein Plugin schreiben, das in der Lage ist, eine neue Android-Aktivität zu öffnen und Werbung zu zeigen.

Also folgte ich einem einfachen Tutorial hier . Das funktioniert sehr gut und wie erwartet.

Der nächste Schritt ist, dieses Android Studio Gradle-Projekt in mein Plugin aufzunehmen.

Mein erster Versuch: Hinzufügen des Gradle-Projekts zu einem Unterordner meines Cordova-Plugins und Hinzufügen der folgenden Zeile zur Datei plugin.xml:

<framework src="libs/Broper/build.gradle" custom="true" type="gradleReference" />

auch ich habe versucht:

<framework src="libs/Broper/app/build.gradle" custom="true" type="gradleReference" />

Die Satteldateien werden von Cordova erkannt. Aber etwas geht nicht. Daher kann ich die Klassen dieses Android-Studio-Projekts nicht in meine Java-Plug-In-Dateien importieren.

Dann ist es eine bessere Lösung (ich dachte schon), stattdessen einen AAR hinzuzufügen. Aber ich habe keine Ahnung, was ich tun muss, um diesen AAR in meinem Cordova-Plugin hinzuzufügen.

Die Frage ist also: Wie füge ich meinem Cordova-Plugin ein Android-Studioobjekt (oder eine Bibliothek) richtig hinzu?

31
SleepingMole

Folgendes habe ich gemacht, um eine Gradle-Referenz mit einem Cordova-Plugin zu verwenden. Ich denke, das könnte Ihnen helfen.

Globale Struktur:

pluginFolder/
  build-extras.gradle
  plugin.xml
  yourDirContainingYourAAR/
  src/
    Android/
      yourFile.gradle
      myPlugin.Java

Legen Sie Ihre Bibliothek, z. B. foo.aar, in das Verzeichnis yourDirContainingYourAAR (erstellen Sie sie bei Bedarf).

  • In der plugin.xml-Datei:

    <platform name="Android">
        <!-- your configuration elements, references, source files, etc... -->
    
        <framework src="src/Android/yourFile.gradle" custom="true" type="gradleReference" />
    
        <resource-file src="yourDirContainingYourAAR/foo.aar" target="libs/foo.aar" />
    </platform>
    
  • In der Gradle-Datei yourFile.gradle:

    repositories{    
      jcenter()
      flatDir {
          dirs 'libs'
       }
    }
    
    dependencies {
       compile(name:'foo', ext:'aar')
    }
    
    Android {
      packagingOptions {
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
      }
    }
    
  • Erstellen Sie im Ordner root Ihres Plugins (auf derselben Ebene wie plugin.xml) einen build-extras.gradle. Fügen Sie ggf. minSdkVersion und targetSdkVersion hinzu oder entfernen Sie sie entsprechend Ihren Projektanforderungen:

    Android {
        defaultConfig {
            minSdkVersion 16
            targetSdkVersion 22
        }
    
       packagingOptions {
           exclude 'META-INF/NOTICE'
           exclude 'META-INF/LICENSE'
       }
    }
    
52
Niko

Die Antwort von Nikos

Wenn Gradle die Kompilierung mit der Antwort von Niko ausführt, sucht es nach den Bibliotheken in app/libs, die nicht im Projekt vorhanden sind (dies ist im Standardprojekt von Android Studio der Fall, in der Cordova-Android-Projektstruktur ist der Ordner libs jedoch unterschiedlich). Das Plugin kopiert jedoch die AAR-Bibliothek nach app/src/main/libs, wodurch wir denken könnten, dass es die Aar nach app/libs kopiert.

<resource-file src="yourDirContainingYourAAR/foo.aar" target="libs/foo.aar" />

Daher sollte die gradle-Datei sein 

repositories{    
 jcenter()
   flatDir {
     dirs 'src/main/libs'
   }
}

dependencies {
  compile(name:'foo', ext:'aar')
}

Android {
 packagingOptions {
  exclude 'META-INF/NOTICE'
  exclude 'META-INF/LICENSE'
 }
}

Dadurch erhalten Sie eine erfolgreiche Zusammenstellung der App

Prost!!

5
Amey Kshirsagar

Nach der Erstellung des Cordova-Projekts ist das Hinzufügen der Plattform und das Hinzufügen des Plugins abgeschlossen.

Nehmen wir an, die aar-Datei wird in den libs-Ordner kopiert. (Angenommen, der Dateiname lautet cards.aar)

geben Sie dann in der App build.gradle Folgendes an und klicken Sie auf Projekt mit Gradle-Dateien synchronisieren.

repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    compile(name:'cards', ext:'aar')
}

Für mich geht das!! Ein Nachteil dieser Lösung ist jedoch: Sie müssen das Projekt aus dem Plattformordner in Android Studio öffnen und die obigen Zeilen zu Ihrem build.gradle hinzufügen

0
Sathis Kumar