我是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插件中?
答案 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
。
如果需要,请根据您的项目需求添加或删除minSdkVersion
和targetSdkVersion
:
android {
defaultConfig {
minSdkVersion 16
targetSdkVersion 22
}
packagingOptions {
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
}
}
答案 1 :(得分:11)
当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)
如果以上所有方法都像对我一样失败...尝试这些更改:
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