Phonegap 3插件导致生成错误或插件未初始化

时间:2014-02-26 19:39:28

标签: android cordova build phonegap-plugins

让我先从一些背景开始。我有一个Java文件和一个.jar库,其中包含一个带有Activity的Android项目,它的布局和另一个jar库。当然,我也有我的插件的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. 我从新创建的应用
  4. 中运行phonegap local plugin add /path/to/plugin/folder
  5. 我运行phonegap build android并且编译失败并出现以下错误:

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

    总时间:4秒

  6. 我不明白为什么会发生这种情况。当我安装插件时,它似乎已成功添加,它出现在plugins/android.json文件中。

    有一次,项目自动决定正确编译(我不知道是什么让它起作用)。我尝试通过在var p = window.MyPlugin内的www/js/index.jsapp.receivedEvent('deviceready');之后添加一行读取onDeviceReady的行来访问我添加的插件。我使用了console.log(p);,结果证明是未定义的,就好像我的插件从未加载/初始化一样。

    我认为这是我的插件定义中的一个问题,因为Java部分已经在Android原生应用程序上进行了测试,并且它正常运行。我的插件在哪里出错了?我该怎么做才能排除故障?为什么没有初始化?任何帮助/指导都非常受欢迎。

    == UPDATE =====

    我遵循道森的建议使用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" />
    

    这里可能有什么不妥的想法?

1 个答案:

答案 0 :(得分:1)

感谢道森解决了这个问题。

我跑了cordova build android -d并查看了它的输出。注意到错放的库(myPlugin.java找不到myJar.jar)所以我只是把它们移到了道森建议的适当位置。

非常感谢!