2014-02-26 37 views
3

让我从一些上下文开始。我有一个Java文件和一个.jar库,其中包含一个带有Activity,其布局和另一个jar库的Android项目。当然,我也有我的插件的JavaScript界面​​。换句话说,这是我有:Phonegap 3插件导致构建错误或插件未初始化

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内的活动文件。 这个插件的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和3.4科尔多瓦,我有红宝石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和编译失败,出现以下错误:

    [error]构建android项目时发生错误。执行“ant debug -f”/path/to/TestApp/platforms/android/build.xml“”时出错:“ BUILD FAIL /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本机应用上测试过,并且它工作正常。我的插件出了什么问题?我能做些什么来排除故障?为什么不初始化?任何帮助/指导是非常值得赞赏的。

====== 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。活动包是在myJar.jar文件中定义的,所以看起来MyPlugin.java找不到myJar.jar文件。 我认为plugin.xml应该在插件安装过程中正确照顾包括jar文件在内。这是它是如何在plugin.xml添加:

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

的什么可能是错在这里的任何想法?

+0

构建我自己的Android插件时,这发生在我身上。这很可能是你的java文件中的编译错误。运行'cordova build android -d',你会看到很多输出。在那里你应该能够找到编译错误的直接引用。 –

+0

谢谢道森。这确实揭示了这个问题。我通过运行该命令得到的输出编辑了我的问题。 – Cramps

+1

如果没有,请检查以确保'MyJar.jar'在'platforms/android/lib'中,尝试将plugin.xml行更改为''或者只是手动将文件放入正确的文件夹并重试。 –

回答

1

Dawson解决了这个问题。

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

非常感谢!