Cordova 플러그인 개발 준비
- [플러그인 개발 가이드](https://cordova.apache.org/docs/ko/latest/guide/hybrid/plugins/) - 한글이지만 기계 번역으로 되어 있어 보기 어렵다.
- [Android Plugin Development Guide](http://cordova.apache.org/docs/en/latest/guide/platforms/android/plugin.html)
- [Add External Jar Library to Build Cordova Plugin (Ionic Framework)](http://stackoverflow.com/questions/34115571/add-external-jar-library-to-build-cordova-plugin-ionic-framework) - stackoverflow에서의 질문
[app]/platforms/android/res/xml/config.xml에서 feature 태그를 확인할 수 있다.
```xml
```
각각의 소스는 [app]/plugins 밑에서 확인 할 수 있다.
cordova-plugin-admobpro 플러그인으로 사용중인 AdMob.createBanner(bannerId) 함수를 예로 들어 따라가 본다.
AdMob은 plugins/cordova-plugin-admobpro/plugin.xml js-module로 정의되어 있다.
```xml
```
src 로 되어 있는 "www/AdMob.js"를 따라가 본다. 이곳에 createBanner 함수가 있다.
```js
admobExport.createBanner = function(args, successCallback, failureCallback) {
var options = {};
if(typeof args === 'object') {
for(var k in args) {
if(k === 'success') { if(typeof args[k] === 'function') successCallback = args[k]; }
else if(k === 'error') { if(typeof args[k] === 'function') failureCallback = args[k]; }
else {
options[k] = args[k];
}
}
} else if(typeof args === 'string') {
options = { adId: args };
}
cordova.exec( successCallback, failureCallback, 'AdMob', 'createBanner', [ options ] );
};
```
createBanner 에서 bannerId 하나만 파라미터로 전달된다.
exec 함수에 대한 정의는 [이곳](http://cordova.apache.org/docs/en/latest/guide/platforms/android/plugin.html#plugin-class-mapping)에서 확인할 수 있다.
```java
exec(, , , , []);
```
service 는 'AdMob'이고, action 은 'createBanner' 이다.
바라보고 있는 AdMobPlugin 클래스는 GenericAdPlugin 클래스를 상속받은 것이다.
GenericAdPlugin 클래스는 [app]/plugins/cordova-plugin-extension/src/android/cordova-generic-ad.jar 에 있다.
http://www.javadecompilers.com/ 에서 해당 jar 파일을 올리고 jadx decompiler로 선택하면 GenericAdPlugin.java 파일을 확인 할 수 있다.
이 곳에서 createBanner 함수를 확인할 수 있다.
```java
public boolean createBanner(String adId, boolean autoShow) {
if (!this.adlicInited) {
adlic();
}
Log.d(LOGTAG, "createBanner: " + adId + ", " + autoShow);
this.autoShowBanner = autoShow;
if (adId == null || adId.length() <= 0) {
adId = this.bannerId;
} else {
this.bannerId = adId;
}
if (this.testTraffic) {
if (this.adlicBannerId.length() > 0) {
adId = this.adlicBannerId;
} else {
adId = __getTestBannerId();
}
}
getActivity().runOnUiThread(new C00023(adId));
return true;
}
```