Cordova 플러그인 개발 준비
- 플러그인 개발 가이드 - 한글이지만 기계 번역으로 되어 있어 보기 어렵다.
- Add External Jar Library to Build Cordova Plugin (Ionic Framework) - stackoverflow에서의 질문
[app]/platforms/android/res/xml/config.xml에서 feature 태그를 확인할 수 있다.
- snippet.xml
<feature name="AdMob"> <param name="android-package" value="com.rjfun.cordova.admob.AdMobPlugin" /> <param name="onload" value="true" /> </feature> <feature name="Device"> <param name="android-package" value="org.apache.cordova.device.Device" /> </feature> <feature name="InAppBrowser"> <param name="android-package" value="org.apache.cordova.inappbrowser.InAppBrowser" /> </feature> <feature name="SplashScreen"> <param name="android-package" value="org.apache.cordova.splashscreen.SplashScreen" /> <param name="onload" value="true" /> </feature> <feature name="StatusBar"> <param name="android-package" value="org.apache.cordova.statusbar.StatusBar" /> <param name="onload" value="true" /> </feature> <feature name="VideoPlayerPlugin"> <param name="android-package" value="jp.phi.cordova.plugin.videoplayer.VideoPlayerPlugin" /> </feature> <feature name="Whitelist"> <param name="android-package" value="org.apache.cordova.whitelist.WhitelistPlugin" /> <param name="onload" value="true" /> </feature> <feature name="Keyboard"> <param name="android-package" value="io.ionic.keyboard.IonicKeyboard" /> <param name="onload" value="true" /> </feature>
각각의 소스는 [app]/plugins 밑에서 확인 할 수 있다.
cordova-plugin-admobpro 플러그인으로 사용중인 AdMob.createBanner(bannerId) 함수를 예로 들어 따라가 본다.
AdMob은 plugins/cordova-plugin-admobpro/plugin.xml js-module로 정의되어 있다.
- snippet.xml
<js-module src="www/AdMob.js" name="AdMob"> <clobbers target="window.AdMob" /> </js-module>
src 로 되어 있는 “www/AdMob.js”를 따라가 본다. 이곳에 createBanner 함수가 있다.
- snippet.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 함수에 대한 정의는 이곳에서 확인할 수 있다.
- snippet.java
exec(<successFunction>, <failFunction>, <service>, <action>, [<args>]);
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 함수를 확인할 수 있다.
- snippet.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; }