【问题标题】:Phonegap 3 Plugin causing build error or plugin not initializedPhonegap 3 插件导致构建错误或插件未初始化
【发布时间】:2014-02-26 19:39:28
【问题描述】:

让我从一些背景开始。我有一个 Java 文件和一个 .jar 库,其中包含一个带有 Activity、其布局和另一个 jar 库的 Android 项目。当然,我的插件也有 javascript 接口。换句话说,这就是我所拥有的:

plugins/com.phonegap.example.activity.plugin/www/myplugin.js
plugins/com.phonegap.example.activity.plugin/src/android/MyPlugin.java
plugins/com.phonegap.example.activity.plugin/src/android/libs/myJar.jar
plugins/plugin.xml

我的插件应该在我的 MyPlugin.java 文件中执行一个方法,该方法应该随后启动 myJar.jar 文件中的 Activity。 该插件的 plugin.xml 内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<plugin xmlns="http://www.phonegap.com/ns/plugins/1.0"
       id="com.phonegap.example.activity.plugin"
  version="0.1.0">
<name>MyPlugin</name>
<description>Launch an Android Activity from PhoneGap 3</description>
<author>Author</author>
<license>MIT</license>
<keywords>phonegap,activity</keywords>

<js-module src="www/myplugin.js" name="MyPlugin">
        <clobbers target="window.MyPlugin" />
</js-module>

<!-- android -->
<platform name="android">
    <config-file target="res/xml/config.xml" parent="/*">
        <feature name="MyPlugin">
            <param name="android-package" value="com.phonegap.example.activity.plugin"/>
        </feature>
    </config-file>
    <config-file target="AndroidManifest.xml" parent="/*">
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <activity 
            android:name="com.phonegap.example.activity.ExampleActivity" 
            android:label="@string/app_name">
                <intent-filter>
                    <action android:name="com.phonegap.example.action.EXAMPLE" />
                </intent-filter>
        </activity>
    </config-file>
    <source-file src="src/android/MyPlugin.java" target-dir="src/com/phonegap/example/activity" />
    <source-file src="src/android/libs/myJar.jar" target-dir="libs" />
 </platform>          
</plugin>

我使用npm install 安装了Phonegap 3.3 和Cordova 3.4,并且还安装了Ruby 2.0.0。我在 Mac OS X 上运行所有这些。

关于问题:

  1. 我创建了一个 phonegap 应用来测试这个插件 (phonegap create TestApp)
  2. 我添加Android平台(cordova platform add android
  3. 我在新创建的应用中运行 phonegap local plugin add /path/to/plugin/folder
  4. 我运行phonegap build android,编译失败并出现以下错误:

    [错误] 构建 android 项目时发生错误。执行“ant debug -f”/path/to/TestApp/platforms/android/build.xml“”时出错: 构建失败 /path/to/ant/build.xml:720:执行此行时出现以下错误: /path/to/ant/build.xml:734:编译失败;有关详细信息,请参阅编译器错误输出。

    总时间:4秒

我完全不明白为什么会这样。当我安装插件时,它似乎已成功添加,并出现在 plugins/android.json 文件中。

在某一时刻,项目自动决定正确编译(我不知道是什么使它工作)。我试图通过在www/js/index.js 中添加一行读取var p = window.MyPlugin 的行来访问我添加的插件,就在onDeviceReady 函数中的app.receivedEvent('deviceready'); 之后。我使用了console.log(p);,结果发现它是未定义的,就好像我的插件从来没有被加载/初始化过一样。

我想这是我的插件定义中的一个问题,因为 Java 部分已经在 Android 原生应用程序上进行了测试,并且可以正常工作。我的插件哪里出错了?我能做些什么来解决它?为什么没有初始化?非常感谢任何帮助/指导。

======更新=====

我按照 Dawson 的建议使用 cordova build android -d,这是我收到的输出:

[javac] /path/to/TestApp/platforms/android/src/com/phonegap/example/MyPlugin.java:10: 
    error: package com.phonegap.example.activity does not exist
[javac] import com.phonegap.example.activity.ExampleActivity;

这个 com.phonegap.example.activity 包是在myJar.jar 文件中定义的,所以MyPlugin.java 似乎找不到myJar.jar 文件。 我认为plugin.xml 应该在插件安装期间正确处理包含 jar 文件。这就是它在plugin.xml 中添加的方式:

 <source-file src="src/android/libs/myJar.jar" target-dir="libs" />

对这里可能出现的问题有什么想法吗?

【问题讨论】:

  • 在我构建自己的 Android 插件时经常发生这种情况。这很可能是您的 java 文件中的编译错误。运行cordova build android -d,你会看到很多输出。在那里你应该能够找到对编译错误的直接引用。
  • 谢谢你,道森。这确实暴露了问题。我用运行该命令得到的输出编辑了我的问题。
  • 检查以确保MyJar.jarplatforms/android/lib 中,如果不是,请尝试将plugin.xml 行更改为&lt;source-file src="libs/myJar.jar" target-dir="libs" /&gt; 或手动将文件放入正确的文件夹,然后重试。
  • 在 plugin.xml 文件中从您的插件引用文件时,假设系统知道在 src/PLATFORM 中查找您正在引用的文件。所以src/android/lib 中的文件需要引用为lib/FILE_NAME

标签: android cordova build phonegap-plugins


【解决方案1】:

多亏了 Dawson,问题得以解决。

我运行cordova build android -d 并查看了它的输出。注意到放错位置的库(myPlugin.java 找不到 myJar.jar)所以我只是按照 Dawson 的建议将它们移动到正确的位置。

非常感谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 2016-05-10
    • 2018-05-28
    • 1970-01-01
    • 2016-09-30
    相关资源
    最近更新 更多