web-dev-qa-db-fra.com

Développement du plugin Cordova - ajout de aar

Je suis nouveau dans le développement de plugins cordova ..__ Je veux écrire un plugin capable d'ouvrir une nouvelle activité Android et d'afficher des publicités.

J'ai donc suivi un tutoriel simple ici . Cela fonctionne très bien et comme prévu.

La prochaine étape consiste à inclure ce projet Android Studio Gradle dans mon plugin.

Mon premier essai: Ajouter le projet Gradle à un sous-dossier de mon plugin Cordova et ajouter la ligne suivante au fichier plugin.xml:

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

aussi j'ai essayé:

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

Les fichiers graddle sont reconnus par cordova. Mais quelque chose ne fonctionne pas. Je ne peux donc pas importer les classes de ce projet de studio Android dans mes fichiers Java de plug-in.

Ensuite, une meilleure solution (je le pensais bien) consiste à ajouter un AAR à la place. Mais là, je ne sais même pas quoi faire pour ajouter cet AAR dans mon plugin cordova.

La question est donc de savoir comment ajouter correctement un objet Android (ou une bibliothèque) Android à mon plugin cordova.

31
SleepingMole

Voici ce que j'ai fait pour utiliser une référence Gradle avec un plugin Cordova. Je pense que cela pourrait vous aider.

Structure globale:

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

Placez votre bibliothèque, par exemple foo.aar, dans le répertoire yourDirContainingYourAAR (créez-la si nécessaire)

  • Dans le fichier plugin.xml:

    <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>
    
  • Dans le fichier gradle yourFile.gradle:

    repositories{    
      jcenter()
      flatDir {
          dirs 'libs'
       }
    }
    
    dependencies {
       compile(name:'foo', ext:'aar')
    }
    
    Android {
      packagingOptions {
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
      }
    }
    
  • Dans le dossier root de votre plug-in (même niveau que plugin.xml), créez un build-extras.gradle. Si nécessaire, ajoutez ou supprimez minSdkVersion et targetSdkVersion en fonction des besoins de votre projet:

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

Il doit y avoir une légère modification de réponse de Niko

Lorsque gradle exécute la compilation à l'aide de Niko's answer , il recherche les bibliothèques dans app/libs qui ne sont pas présentes dans le projet (dans le projet standard Android Studio, mais dans la structure de projet Cordova Android, le dossier libs est différent). Cependant, le plugin copie la bibliothèque aar dans app/src/main/libs, ce qui peut nous faire penser qu'il copie l'Aar dans app/libs

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

Par conséquent, le fichier de classement doit être 

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

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

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

Cela vous donnera une compilation réussie de l'application

À votre santé!!

5
Amey Kshirsagar

Après la création du projet Cordova, l'ajout d'une plateforme, l'ajout d'un plugin est terminé.

Disons que le fichier aar est copié dans le dossier libs. (en supposant que le nom du fichier est cards.aar)

puis dans l'application build.gradle, indiquez ce qui suit et cliquez sur le projet de synchronisation avec les fichiers Gradle.

repositories {
    flatDir {
        dirs 'libs'
    }
}

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

Ça marche pour moi!! mais un inconvénient de cette solution est .. vous devez ouvrir le projet depuis le dossier de la plate-forme sur Android Studio et ajouter les lignes ci-dessus à votre build.gradle

0
Sathis Kumar