Cordova插件开发——添加aar

Cordova plugin development - adding 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" />

不起作用。所以我无法将 android 工作室项目的 类 导入我的插件 java 文件。

那么更好的解决方案(我是这么认为的)是添加一个 AAR。但是我什至不知道如何在我的 cordova 插件中添加该 AAR。

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

以下是我将 gradle 参考与 Cordova 插件结合使用所做的工作,我认为这可能对您有所帮助。

全局结构:

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'
       }
    }
    

创建cordova项目后,添加平台,添加插件就完成了。

假设 aar 文件被复制到 libs 文件夹中。 (假设文件名为 cards.aar )

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

repositories {
    flatDir {
        dirs 'libs'
    }
}

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

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

必须对

稍作修改

当 gradle 使用 运行编译时,它会在 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'
 }
}

这将使您成功编译应用程序

干杯!!

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

  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

好的,因为这里有多个答案,其中 none 完全涵盖了需要完成的所有事情,所以我将创建一个包罗万象的答案。希望它能为人们节省一些时间和挫败感。

这很简单,您只需更新 plugin.xml 以说明 .aar 文件应该放在 android 项目中的什么位置。然后你必须告诉gradle去哪里找。

所以我有这个目录结构(你可以使用不同的):

-- my-plugin/
   |-- deps/
       |-- some-dependency.aar
   |-- src/
       |-- MyPlugin.java
   |-- www/
       |-- plugin.js
   |-- package.json
   |-- plugin-settings.gradle
   |-- plugin.xml

步骤 1

第一步是告诉cordova把.aar文件放在哪里。您可以通过在 plugin.xml:

中包含一行来做到这一点
<resource-file src="deps/some-dependency.aar" target="libs/some-dependency.aar" />

这将从源文件中的 deps 文件夹中获取文件,并将其粘贴到生成的 android 项目中的 platforms/android/app/src/main/libs/ 文件夹中。显然 target 路径是相对于 platforms/android/app/src/main 文件夹的。不确定是否可以更改。

在继续第 2 步之前,运行 cordova build android 验证 .aar 文件是否被复制到正确的位置可能是个好主意。

第 2 步

因此,一旦它起作用,下一步就是告诉 gradle 文件的位置,以便它可以在构建过程中正确解析它。为此,您可以创建自己的 .gradle 文件,该文件将与 cordova 为您创建的 gradle 主文件合并。

创建一个名为 plugin-settings.gradle 的文件并将以下行放入其中:

repositories{    
  flatDir {
      dirs 'src/main/libs'
   }
}

dependencies {
   compile(name:'some-dependency', ext:'aar')
}

请注意,dirs 'src/main/libs' 行告诉 gradle 在何处查找 .aar 文件。它不指定 cordova 将该文件放在哪里,只是 gradle 查找它的地方。另请注意,该路径是相对于 platforms/android/app/ 文件夹的,并且生成的路径必须与 cordova 放置 .aar 文件的位置相匹配。

所以在我的 plugin.xml 文件中我有 target="libs/some-dependency.aar" 因此在我的 plugin-settings.gradle 文件中我有 dirs 'src/main/libs'。如果这些不一致,您将遇到构建错误。

步骤 3

现在告诉您的插件使用 .gradle 文件:

<framework src="plugin-settings.gradle" custom="true" type="gradleReference" />

请注意,您可以将 pllugin-settings.gradle 文件放在任何您想要的地方,您可以随意调用它。只需确保 <framework> 条目匹配。

差不多就是这些了。此时您应该能够构建 运行 您的应用程序。不客气。