Cordova插件开发 - 添加aar

Sle*_*ole 37 plugins android cordova android-studio aar

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

所以我在这里遵循一个简单的教程.这非常有效并且符合预期.

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

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

<framework src="libs/Broper/build.gradle" custom="true" type="gradleReference" />
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

<framework src="libs/Broper/app/build.gradle" custom="true" type="gradleReference" />
Run Code Online (Sandbox Code Playgroud)

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

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

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

Nik*_*iko 62

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

全球结构:

pluginFolder/
  build-extras.gradle
  plugin.xml
  yourDirContainingYourAAR/
  src/
    android/
      yourFile.gradle
      myPlugin.java
Run Code Online (Sandbox Code Playgroud)

比如把你的库放在目录中(如果需要的话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>
    
    Run Code Online (Sandbox Code Playgroud)
  • 在gradle文件中yourFile.gradle:

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

    android {
        defaultConfig {
            minSdkVersion 16
            targetSdkVersion 22
        }
    
       packagingOptions {
           exclude 'META-INF/NOTICE'
           exclude 'META-INF/LICENSE'
       }
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • @Niko如果在`plugin.xml`中没有显式引用,那么`build-extras.gradle`是如何从插件根文件夹复制到android平台文件夹的?Cordova是否隐式查找此文件并将其部署为"platforms/android"?如果是这样,它将它复制到哪里? (3认同)
  • 我可以确认<resource-file src ="libs/foo.aar"target ="libs/foo.aar"/>也是必需的.另请注意,flatDir路径是该resrouce的目标路径,而不是src路径. (2认同)

Ame*_*gar 16

Niko的答案必须略有修改

当gradle使用Niko的答案运行编译时,它会搜索app/libs项目中不存在的库(它在标准的Android Studio项目中执行,但在Cordova Android项目结构中,libs文件夹不同).然而,插件复制了aar库app/src/main/libs,可以让我们认为它正在复制aarapp/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'
 }
}
Run Code Online (Sandbox Code Playgroud)

这将为您提供成功的应用程序编译

干杯!!