如何正确地包含一个科尔多瓦插件的外部 jar 文件?

Posted

技术标签:

【中文标题】如何正确地包含一个科尔多瓦插件的外部 jar 文件?【英文标题】:How do I properly include an external jar file for a cordova plugin? 【发布时间】:2014-10-15 18:50:24 【问题描述】:

我正在尝试制作一个需要在 jar 文件中定义的类的简单 cordova android 插件。我有一个测试项目here,其中包括示例用法和我的插件的简化版本。

在我的 plugin.xml 中,我有这个:

<platform name="android">
        <config-file target="res/xml/config.xml" parent="/*">
            <feature name="Pebble">
                <param name="android-package" value="com.jetboystudio.pebble.PebblePGPlugin"/>
            </feature>
        </config-file>
        <source-file src="src/android/PebblePGPlugin.java" target-dir="src/com/jetboystudio/pebble" />
        <source-file src="src/android/libs/pebble_kit.jar" target-dir="libs" />
    </platform>

在我的测试项目中,我在需要的地方有 pebblekit jar(我认为):plugins/com.jetboystudio.pebble.PebblePGPlugin/src/android/libs/pebble_kit.jar

当我“cordova build”时,我没有收到任何错误,但是当我安装 apk 文件时,我在 Chrome 设备检查中得到“找不到类”。我假设这个找不到的类是 pebble_kit.jar 中定义的类之一。此外,它似乎没有将此文件复制到平台/android 中。

如果我可以更好地调试(找不到哪个类?),那可能是一个好的开始,如果没有人知道为什么这不起作用的实际答案。

【问题讨论】:

【参考方案1】:

您的plugin.xml 是正确的。

将插件添加/安装到项目中后,请勿编辑plugin.xml。 当你运行cordova build或prepare时,它不会处理plugin.xml的原生部分,它只会处理cordova plugin add

使用包含 jar 文件的plugin.xml 更新您的插件存储库/文件夹,并且您拥有的行是正确的。

那就做吧

cordova plugin rm

cordova plugin add

cordova build

最终结果验证了在cordova构建之后/platforms/android/libs/pebble_kit.jar存在。

【讨论】:

可以复制它,但现在我收到各种其他“找不到符号”错误。我在此过程中的某个地方升级了 java,我认为这可能与此有关。 之前似乎缺少对 getApplicationContext() 和 JSONException 的引用。 好的,所以我更进一步,但仍然不知所措。这是我当前的插件 java & 构建结果:gist.github.com/konsumer/4bd186f06b29a45b99b1 我得到“getApplicationContext()”的“找不到符号”。我做错了什么? 我会接受这个答案。我的另一个问题是我现在需要使用 this.cordova.getActivity().getApplicationContext() 而不仅仅是 getApplicationContext()。【参考方案2】:

你也可以添加一个jar文件:

<lib-file src="src/android/libs/pebble_kit.jar" />

这会将 jar 添加到 platforms/android/app/libs/

【讨论】:

以上是关于如何正确地包含一个科尔多瓦插件的外部 jar 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地将 Spring 包含到 OSGified 包中

2017.5.1 使用fat jar插件来打包有引用外部jar包的项目

英特尔 xdk 科尔多瓦本地插件不起作用

如何在插件开发中正确使用第三方jar包

访问远程站点上的科尔多瓦

java中使用URLClassLoader访问外部jar包的java类