(아래 그림을 보면 cordova plugin 소스 파일인 cdvplugin.java 또한 프로젝트에 포함되어 있는 것을 확인 할 수 있다.
MainActivity.java
asset에 포함된 webapp의 코드를 webview에 로드할 것으로 추측
package com.thirteenrains.cdvapp;
import android.os.Bundle;
import org.apache.cordova.*;
public class MainActivity extends CordovaActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// enable Cordova apps to be started in the background
Bundle extras = getIntent().getExtras();
if (extras != null && extras.getBoolean("cdvStartInBackground", false)) {
moveTaskToBack(true);
}
// Set by <content src="index.html" /> in config.xml
loadUrl(launchUrl);
}
}
자, 여기까지 살펴보면 cordova app과 plugin이 어떻게 android project에 병합(?) 되는지 감이 오지 싶다.
다시 처음의 주제로 돌아와서 ....
cordova plugin의 소스를 대상 플랫폼의 빌드 구성안에 우겨 넣는 형태로 연동하는 것으로 보이는데
Custom Activity나 Resource를 plugin에 추가해서 배포하려면 어떻게 해야 할까?
하나의 방법을 제시하자면,
Androdi Library(AAR)에 리소스를 포함하고, 해당 aar을 plugin에서 참조하는 방법으로 구현이 가능하다.
- Ionic은 표준 WebApp을 개발하는데 사용되는 Anguler / React / Vue 등의 웹앱개발 프레임워크를 Cordova에 접목한 형태로 이해하면 될것 같다.( 최근에 들어 cordova를 대체 할 capacitor Framework를 추가하여 cordova를 대체해 가는 모양새 이지만 여전히 cordova flugin은 사용가능하다)
(한참 살펴보다 보니 '하이브리드 앱 개발 플랫폼'에 대한 이해는 cordova에 대한 이해와 결을 같이 한다고 결론을 내렸다.)
Ionic article중 Apache cordova 설명부분을 옮겨본다.
Apache Cordova 프레임워크란 무엇입니까?
코르도바는 어떻게 작동하나요? Apache Cordova는웹 개발자가 HTML, CSS 및 JavaScript 콘텐츠를 사용하여 다양한 모바일 플랫폼용 기본 애플리케이션을 만들 수 있도록 하는 하이브리드 오픈 소스 프레임워크입니다.
Apache Cordova의 작동 방식을 자세히 살펴보겠습니다.
Cordova는 웹 애플리케이션을 가져와 기본 WebView 내에서 렌더링합니다. WebView는 기본 애플리케이션 내에서 웹 콘텐츠를 표시하는 데 사용되는 애플리케이션 구성 요소(예: 버튼 또는 탭 표시줄)입니다. WebView는 URL 필드나 상태 표시줄과 같은 표준 사용자 인터페이스 요소가 없는 웹 브라우저로 생각할 수 있습니다. 이 컨테이너 내에서 실행되는 웹 애플리케이션은 모바일 브라우저 내에서 실행되는 다른 웹 애플리케이션과 마찬가지로 추가 HTML 페이지를 열고, JavaScript코드를 실행하고, 미디어 파일을 재생하고, 원격 서버와 통신할 수 있습니다. 이러한 유형의 모바일 애플리케이션을 흔히 하이브리드 애플리케이션이라고 합니다.
일반적으로 웹 기반 응용 프로그램은 샌드박스 내에서 실행됩니다. 즉, 장치의 다양한 하드웨어 및 소프트웨어 기능에 직접 액세스할 수 없습니다. 이에 대한 좋은 예는 모바일 장치의 연락처 데이터베이스입니다. 이름, 전화번호, 이메일 및 기타 정보로 구성된 이 데이터베이스는 웹 앱에서 액세스할 수 없습니다 . 기본 애플리케이션 내에서 웹 앱을 실행하기 위한 기본 프레임워크를 제공하는 것 외에도 Cordova는 연락처 데이터베이스와 같은 다양한 장치 기능에 액세스할 수 있도록 JavaScript API도 제공합니다. 이러한 기능은 플러그인 컬렉션을 사용하여 노출됩니다. 플러그인은 웹 애플리케이션과 장치의 기본 기능 사이에 다리를 제공합니다.
Apache Cordova의 아키텍처 구조도(?)를 참조하면 좀 더 구체적으로 살펴볼 수 있다.
애플리케이션은 각 플랫폼을 대상으로 하는 래퍼 내에서 실행되며 표준 호환 API 바인딩을 사용하여 센서, 데이터, 네트워크 상태 등과 같은 각 장치의 기능에 액세스합니다.