2014-02-26 58 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建議的適當位置。

非常感謝!