Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cordova plugin development - adding aar

I am new to the cordova plugin development stuff. I want to write a plugin which is able to open a new android activty and showing some advertisement.

So I followed a simple tutorial here. That works very well and as expected.

Next step is to include this Android Studio Gradle project to my plugin.

My first try: Adding the gradle project to a subfolder of my cordova plugin and adding the following line to the plugin.xml file:

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

also I tried:

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

doesn't work. So I can't import the classes of that android studio project to my plugin java files.

Then a better solution (I thought so) is to add an AAR instead. But there I don't even have a clue what to do to add that AAR in my cordova plugin.

So, the question is: How do I add an android studio project (or library) to my cordova plugin the right way?

like image 785
SleepingMole Avatar asked Jun 10 '15 13:06

SleepingMole


2 Answers

Here's what I've done to use a gradle reference with a Cordova plugin, I think this might help you.

Global structure :

pluginFolder/   build-extras.gradle   plugin.xml   yourDirContainingYourAAR/   src/     android/       yourFile.gradle       myPlugin.java 

Put your library, say foo.aar, in the yourDirContainingYourAAR directory (create it if needed)

  • In the plugin.xml file :

    <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 the gradle file yourFile.gradle :

    repositories{       jcenter()   flatDir {       dirs 'libs'    } }  dependencies {    compile(name:'foo', ext:'aar') }  android {   packagingOptions {     exclude 'META-INF/NOTICE'     exclude 'META-INF/LICENSE'   } } 
  • In the root folder of your plugin (same level as plugin.xml ) create a build-extras.gradle. If needed, add or remove minSdkVersion and targetSdkVersion according to your project needs :

    android {     defaultConfig {         minSdkVersion 16         targetSdkVersion 22     }     packagingOptions {        exclude 'META-INF/NOTICE'        exclude 'META-INF/LICENSE'    } } 
like image 105
Niko Avatar answered Oct 02 '22 00:10

Niko


There has to be a slight modification to Niko's answer

When gradle runs the compilation using Niko's answer, it searches for the libs in app/libs which is not present in the project (it does in the standard Android Studio project, but in Cordova Android project structure the libs folder is different). However the plugin copies the aar library to app/src/main/libs which can make us think it is copying the aar to app/libs

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

Hence the gradle file should be

repositories{      jcenter()    flatDir {      dirs 'src/main/libs'    } }  dependencies {   compile(name:'foo', ext:'aar') }  android {  packagingOptions {   exclude 'META-INF/NOTICE'   exclude 'META-INF/LICENSE'  } } 

This will give you a successful compilation of the app

Cheers!!

like image 31
Amey Kshirsagar Avatar answered Oct 01 '22 23:10

Amey Kshirsagar