2017-01-09 4 views
0

사용자 정의 플러그인을 작성하고 추가 할 때 Android 플랫폼 용 Cordova 빌드를 만드는 데 문제가 있습니다. 내가 만든 폴더 구조는 다음과 같습니다응용 프로그램 빌드시 사용자 정의 Cordova 플러그인 오류가 발생합니다.

TestPlugin 
-src 
--android 
---TestPlugin.java 
-www 
--TestPlugin.js 
plugin.xml 
project.json 

및 각 파일의 내용은 다음과 같습니다

TestPlugin.java

package com.test.plugin; 

import org.apache.cordova.CallbackContext; 
import org.apache.cordova.CordovaPlugin; 
import org.json.JSONArray; 
import org.json.JSONException; 

public class TestPlugin extends CordovaPlugin { 

    @Override 
    public boolean execute(String action, JSONArray data, CallbackContext callbackContext) throws JSONException { 
     if (action.equals("greet")) { 
      String name = data.getString(0); 
      String message = "Hello, " + name; 
      callbackContext.success(message); 

      return true; 
     } 
     else { 
      return false; 
     } 
    } 
} 

TestPlugin.js

module.exports = { 
    greet: function (name, successCallback, errorCallback) { 
     cordova.exec(successCallback, errorCallback, "TestPlugin", "greet", [name]); 
    } 
}; 

plugin.xml에

<?xml version="1.0" encoding="UTF-8"?> 
<plugin xmlns="http://www.phonegap.com/ns/plugins/1.0" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    id="com.test.plugin" 
    version="1.0.0"> 
    <name>TestPlugin</name> 
    <description>This is a test</description> 
    <license>MIT</license> 

    <js-module src="www/TestPlugin.js" name="TestPlugin"> 
     <clobbers target="TestPlugin" /> 
    </js-module> 

    <platform name="android"> 
     <config-file target="res/xml/config.xml" parent="/*"> 
      <feature name="TestPlugin"> 
       <param name="android-package" value="com.test.plugin" /> 
      </feature> 
     </config-file> 

     <source-file src="src/android/TestPlugin.java" target-dir="src/com/test/plugin/TestPlugin.java" /> 
    </platform> 
</plugin> 

package.json이

{ 
    "name": "TestPlugin", 
    "version": "1.0.0", 
    "description": "TestPlugin", 
    "cordova": { 
    "platforms": [ 
     "android" 
    ] 
    }, 
    "keywords": [ 
    "cordova", 
    "test" 
    ], 
    "engines": [ 
    { 
     "name": "cordova-android", 
     "version": ">=4.0.0" 
    } 
    ], 
    "author": "Me", 
    "license": "Apache 2.0" 
} 

내가 명령 프롬프트에서 "안드로이드 구축 코르도바"실행, 즉시 다음과 같은 오류 반환 :

C:\inetpub\wwwroot\test\mobile>cordova build android 
shell.js: internal error 
Error: EISDIR: illegal operation on a directory, read 
    at Error (native) 
    at Object.fs.readSync (fs.js:603:19) 
    at Object.fs.readFileSync (fs.js:438:24) 
    at C:\inetpub\wwwroot\test\mobile\platforms\android\cordova\node_modules\shelljs\src\grep.js:41:23 
    at Array.forEach (native) 
    at Object._grep (C:\inetpub\wwwroot\test\mobile\platforms\android\cordova\node_modules\shelljs\src\grep.js:35:9) 
    at Object.grep (C:\inetpub\wwwroot\test\mobile\platforms\android\cordova\node_modules\shelljs\src\common.js:186:23) 
    at C:\inetpub\wwwroot\test\mobile\platforms\android\cordova\lib\prepare.js:196:22 
    at Array.filter (native) 
    at updateProjectAccordingTo (C:\inetpub\wwwroot\test\mobile\platforms\android\cordova\lib\prepare.js:195:44) 

그게 전부입니다. Android 플랫폼을 제거하고 다시 추가하려고 시도했지만 동일한 오류가 발생합니다. 사용자 정의 플러그인을 제거하면 빌드가 성공적입니다. 나는 또한 Plugman을 사용하여 플러그인을 성공적으로 만들지 않으려 고 노력했다. 목표 API 수준은 24입니다.

도움을 주시면 감사하겠습니다.

답변

0

지난 밤에 주위를 놀고 나서이 문제에 대한 해결책을 찾았습니다. plugin.xml에, 소스 파일의 태그는 목표 디렉토리 속성에 파일 이름이 안되기 때문에이 라인에서 이동해야합니다 제거

<source-file src="src/android/TestPlugin.java" target-dir="src/com/test/plugin/" /> 

과 :

<source-file src="src/android/TestPlugin.java" target-dir="src/com/test/plugin/TestPlugin.java" /> 

에 플러그인을 추가 한 다음 빌드를 생성하면 올바르게 작동합니다.