반응형

1. Apache cordova -  App 개발 기본

2. Apache cordova - plugin 사용( for android )

3. Apache cordova -  plugin 개발( for android )

4. Apache cordova - Activity를 포함하는 plugin 개발 ( for android ) 

 

개발 환경:

OS: Windows

개발툴: VS Code

support Platform : Androd ( iOS - windows에서는 빌드 불가 : 나중에 정리 )

 

간단한 cordova plugin 개발을 통해, cordova plugin 구조에 대해 알아보자.

 

Plugman

plugman은

Apache Cordova 프로젝트 와 함께 사용할 플러그인을 설치 및 제거하는 명령줄 도구입니다 .

라고 설명되어 있습니다.

https://github.com/apache/cordova-plugman

plugman을 통해 cordova plugin 프로젝트를 생성 할수 있습니다.

 

Cordova plugin 개발

plugman 설치

npm install -g plugman

 

plugin 프로젝트 생성

plugman create

지정된 경로에 Cordova 플러그인 프로젝트에 대한 템플릿 구조를 생성

명령 구문:

plugman create 
--name <pluginName> 
--plugin_id <pluginID> 
--plugin_version <version> 
[--path <directory>] 
[--variable NAME=VALUE]

인수:

값설명

--name <pluginName> 플러그인 이름
--plugin_id <pluginID> 플로그인 ID
--plugin_version <version>           플러그인 버전기본값 : 파일 의 요소를 HelloCordova

- config.xml의 name element와 매핑됨
- 어플리케이션의 타이틀로 표시되는 이름

 

코도바 플러그인 프로젝트를 생성해 봅니다.

plugman create --name cdvplugin --plugin_id com.thirteenrains.cdvplugin --plugin_version 0.0.1

[src] 폴더

플랫폼별 플러그인 코드가 작성될 폴더 입니다.

- www/cdvplugin.js 파일

cordova plugin에서 노출할 API가 정의될 파일 입니다.

'플로그인 이름'과 함수 명을 인자로 cordova.exec() 를 호출하는

coolMethod를 Export하고 있는 것을 확인 할 수 있습니다.

 

 plugin.xml 파일

플러그인의 설정이 저장될 파일 입니다.

- 프로젝트 생성 커맨드 실행시 입력한 인자와 비교해보면 되겠습니다.

 

음 기본 템플릿은 심플하네요.

 

www / cdvplugin.js가 cordova app쪽에서 호출할 API가 정의 되는 파일 이고,

src / 하위에 각 플랫폼별 동작 코드가 들어가는 구조인것 같습니다.

 

그럼 Android 플랫폼을 지원하도록 추가 해 보겠습니다.

Cordova plugin Platfom 추가

cd cdvplugin
plugman platform add --platform_name android

src / android 폴더 하위에 cdvplugin.java파일이 생성됩니다.

예상한 것처럼 coolMethod의 실행 코드가 포함되어 있습니다.

성공하면 success callback을

실패하면 error callback을 호출 하는 군요.

package com.thirteenrains.cdvplugin;

import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * This class echoes a string called from JavaScript.
 */
public class cdvplugin extends CordovaPlugin {

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        if (action.equals("coolMethod")) {
            String message = args.getString(0);
            this.coolMethod(message, callbackContext);
            return true;
        }
        return false;
    }

    private void coolMethod(String message, CallbackContext callbackContext) {
        if (message != null && message.length() > 0) {
            callbackContext.success(message);
        } else {
            callbackContext.error("Expected one non-empty string argument.");
        }
    }
}

 

이전 글의 플러그인 함수 호출 코드를 소환해 보면 호출 흐름이 파악됩니다.

document
  .getElementById("reqCamPermission")
  .addEventListener("click", requestCameraPermission);

function requestCameraPermission() {
  var permissions = cordova.plugins.permissions;
  permissions.requestPermission(permissions.CAMERA, onSuccess, onError);
}

function onSuccess(status) {
  if (status.hasPermission) {
    alert("SUCCESS - get permission");
  } else {
    alert("FAIL - get permission");
  }
}

function onError() {
  alert("error ");
}

 

플러그인 기능 추가

그러면 내가 만든 플러그인에 'toast'를 팝업 시키는 간단한 기능을 추가해 보겠습니다.

www / cdvplugin.js

exports.toast = function (arg0, success, error) {
  exec(success, error, "cdvplugin", "toast", [arg0]);
};

src / android / cdvplugin.java

 public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        if (action.equals("toast")) {
            String message = args.getString(0);
            if (message != null && message.length() > 0) {
                android.widget.Toast.makeText(cordova.getActivity().getApplicationContext()
                , message, android.widget.Toast.LENGTH_SHORT).show();
                callbackContext.success(message);
            } else {
                callbackContext.error("message is empty");
            }
            
            return true;
        }
        
        return false;
    }

 

cordova app에 플러그인 사용

이전 글에서 생성한 cdvapp에 cdvplugin을 추가해서 호출해 보겠습니다.

로컬에 존재하는 플러그인도 cordova plugin add 명령어를 통해 추가 할 수 있습니다.

 

다만 package.json파일을 먼저 생성해야 합니다.

plugman createpackagejson ./

 

cordova app프로젝트에 플러그인 추가

cdvapp과 cdvplugin폴더가 동일한 폴더에 있다고 가정하면

아래의 커맨드를 통해 로컬 폴더의 플러그인을 app에 추가 할 수 있습니다.

 

cordova plugin add ../cdvPlugin

--link 옵션을 추가로 주면, plugin 폴더를 sysbolic link로 참조하여 플러그인 변경사항이 바로 적용됩니다.

(플러그인 개발 중에는 --link옵션이 유용할 것 같네요)

* --link 옵션으로 command를 실행시, 아래와 같은 에러가 발생할 수 있는데 이경우 cmd창을 관리자권한으로 실행 한후 명령어를 실행하면 정상 설치 됩니다.

 

플러그인 추가

플러그인 리스트 확인

플러그인 삭제

 

cordova app프로젝트에서 플러그인 사용

www / index.html

- toast 버튼 추가

<button id="btnToast">toast</button>

 

www / js / my.js

- toast plugin 호출 코드 추가

document.getElementById("btnToast").addEventListener("click", toast);

function toast() {
  var cdvplugin = cordova.plugins.cdvplugin;
  cdvplugin.toast("hi! cordova plugin", onSuccess, onError);
}

function onSuccess(status) {
  alert("SUCCESS");
}

function onError(error) {
  alert("ERROR : " + error);
}

 

 

다음 글에서는 Activity ( View ) 혹은 resource를 포함하는 plugin 개발에 대해 좀 더 알아 보겠습니다.

 

4. Apache cordova - Activity를 포함하는 plugin 개발 ( for android ) 

반응형

+ Recent posts