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; } ```