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
。
如果需要,根据您的项目需要添加或删除 minSdkVersion
和 targetSdkVersion
:
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'
}
}
这将使您成功编译应用程序
干杯!!
如果以上所有方法都像我一样失败...尝试这些更改:
- 使用
lib-file
代替resource-file
<lib-file src="yourDirContainingYourAAR/foo.aar"/>
- 使用
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>
条目匹配。
赞
差不多就是这些了。此时您应该能够构建 运行 您的应用程序。不客气。
我是 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
。 如果需要,根据您的项目需要添加或删除minSdkVersion
和targetSdkVersion
: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'
}
}
这将使您成功编译应用程序
干杯!!
如果以上所有方法都像我一样失败...尝试这些更改:
- 使用
lib-file
代替resource-file
<lib-file src="yourDirContainingYourAAR/foo.aar"/>
- 使用
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>
条目匹配。
赞
差不多就是这些了。此时您应该能够构建 运行 您的应用程序。不客气。