【问题标题】:How to import an android aar library in a cordova plugin如何在cordova插件中导入android aar库
【发布时间】:2017-11-01 14:52:42
【问题描述】:

我正在为现有的高级移动 SDK 构建一个 cordova 插件(包装器)

我是根据目前可用的各种教程开始使用 Android 的

到目前为止,我已经成功设置了本地cordova插件项目和cordova测试应用程序,并测试了cordova应用程序和我的虚拟java插件包装器实现之间的js绑定

继续前进,我必须在插件中添加多个 aar 依赖项,我希望在使用“cordova plugin add /path/to/my/”添加插件时会在 cordova android 应用程序的 gradle 构建脚本中自动配置这些依赖项本地/插件'

但是,在实践中,我似乎没有找到正确的方法,并且所有与此事相关的答案和说明都需要手动编辑 build.gradle 文件

crodova dependencies configuration documentation所示,在我的plugin.xml文件中,我添加了:

 <platform name="android">
     ......
     <source-file framework="true" 
                  src="native-libs/android/myNativeLib.aar"
                  target-dir="libs"/>
 </platform>

我的期望是,除了复制目标 /libs 目录中的 .aar 文件之外,属性“framework=true”的设置也会导致“cordova plugin add /path/to/local/plugin/ ' 自动生成样板 build.gradle 配置:

启用本地依赖库

repositories {
    ...
    flatDir {
        dirs 'libs'
    }
}

以及配置规定的 aar gradle 依赖项

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

问题是,编写插件的全部目的是让它按原样工作,就像任何高级集成体验一样 - 无需任何其他特殊设置说明

我真的很好奇 Cordova 目前是否可以做到这一点,或者最终我可以尝试使用这样一个新功能为项目做出贡献

期待了解更多相关信息

【问题讨论】:

    标签: android cordova cordova-plugins build.gradle


    【解决方案1】:

    framework 属性仅在我的经验中是 iOS,在您链接的文档中也被标记为 iOS 属性。

    正如您已经提到的,任何用户都希望插件在添加后无需任何设置即可工作,这就是您不希望他在platforms 文件夹中摆弄的原因。要完成这项工作,您可以扩展cordovas gradle 文件。您必须向您的 plugin.xml 添加一个框架标签,其类型为 gradleReference 并链接到您的 gradle 扩展(路径相对于您的 plugin.xml):

    <framework src="src/android/*.gradle" custom="true" type="gradleReference" />
    

    生成的 gradle-extension 将如下所示:

    repositories {    
        jcenter()
        flatDir {
            dirs 'libs'
        }
    }
    
    dependencies {
        compile(name: 'myNativeLib', ext: 'aar')
    }
    
    android {
        packagingOptions {
            exclude 'META-INF/NOTICE'
            exclude 'META-INF/LICENSE'
        }
    }
    

    这假设您已将 .aar 库放在名为 libs 的插件的子目录中。

    【讨论】:

    • 确实这是一个很好的解决方法,因为它会阻止手动编辑 build.gradle 文件;但是,aar 配置仍然很草率:为每个库添加 aar 复制指令,然后为每个库添加构建脚本扩展。我有 10 多个 aars 要添加。我正在为每个依赖项寻找单个配置条目,甚至可能超出此范围,为 libs 文件夹中的所有内容寻找一个条目
    • 这不是一种解决方法,这是它的设计工作方式。您不需要为 10 个 aar 库添加 10 个 gradle 扩展文件,您可以将它们全部放在一个文件中。在cordova 团队完成对cordova 项目的项目结构的重构之前,您将找不到更简单的东西。目前这是一个 WIP,但可能仍需要一些时间。
    • 我的意思是你仍然必须有一个条目来复制 aar 和 gradle 文件中的另一个条目来链接它
    • 是的,在某些时候需要花一点力气进行配置,你不会解决这个问题 :-) 你必须做一次,然后它就会为你的客户开箱即用,这就是像cordova这样可扩展和可配置的框架的“价格”。
    • 好的,我会将此标记为答案,因为似乎没有更好的方法来实现目标
    猜你喜欢
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    相关资源
    最近更新 更多