Cordova插件开发 - 添加aar

时间:2015-06-10 13:03:53

标签: android cordova plugins android-studio aar

我是cordova插件开发的新手。 我想写一个插件,它能够打开一个新的android激活并显示一些广告。

所以我遵循了一个简单的教程here。这非常有效并且符合预期。

下一步是将此Android Studio Gradle项目包含在我的插件中。

我的第一次尝试:将gradle项目添加到我的cordova插件的子文件夹中,并将以下行添加到plugin.xml文件中:

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

我也尝试过:

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

gradova文件被cordova识别。但有些东西不起作用。所以我无法将android studio项目的类导入到我的插件java文件中。

然后一个更好的解决方案(我想是这样)就是添加一个AAR。但在那里,我甚至不知道如何在我的cordova插件中添加AAR。

所以,问题是:如何以正确的方式将android atudio aroject(或库)添加到我的cordova插件中?

4 个答案:

答案 0 :(得分:56)

以下是我使用带有Cordova插件的gradle引用所做的工作,我认为这可能会对您有所帮助。

全球结构:

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

将您的图书馆说foo.aar,放在yourDirContainingYourAAR目录中(如果需要,可以创建)

  • 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>
    
  • 在gradle文件中yourFile.gradle

    repositories{    
      jcenter()
      flatDir {
          dirs 'libs'
       }
    }
    
    dependencies {
       compile(name:'foo', ext:'aar')
    }
    
    android {
      packagingOptions {
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
      }
    }
    
  • 在插件的根文件夹中(与plugin.xml相同)创建build-extras.gradle。 如果需要,请根据您的项目需求添加或删除minSdkVersiontargetSdkVersion

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

答案 1 :(得分:11)

必须对Niko's answer

进行一些修改

当gradle使用Niko's answer运行编译时,它将在app/libs中搜索项目中不存在的库(它在标准Android Studio项目中进行,但在Cordova Android项目结构中, libs文件夹不同)。但是,该插件将aar库复制到app/src/main/libs,这可以使我们认为它正在将aar复制到app/libs

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

因此gradle文件应为

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

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

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

这将为您成功编译该应用程序

干杯!

答案 2 :(得分:0)

创建cordova项目后,添加平台,添加插件。

让我们说aar文件被复制到libs文件夹中。 (假设文件名是cards.aar)

然后在app build.gradle中指定以下内容并单击与Gradle文件同步项目。

repositories {
    flatDir {
        dirs 'libs'
    }
}

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

对我有用!!但是这个解决方案的一个缺点是......您需要从Android Studio上的平台文件夹打开项目,并将上面的行添加到build.gradle

答案 3 :(得分:0)

如果以上所有方法都像对我一样失败...尝试这些更改:

  1. 使用 lib-file 而不是 resource-file
<lib-file src="yourDirContainingYourAAR/foo.aar"/>
  1. 使用 implementation 而不是 compile
dependencies {
    implementation fileTree(include: ['*.aar'], dir: 'libs')
}

参考:https://forum.ionicframework.com/t/add-aar-file-to-cordova-plugin/168675/3