ionic²å¼þ(plugin)µÄʹÓÃ
±¾Îĵµ½éÉÜionicµÄ²å¼þÄ£¿é
Table of Contents
1. Cordova Plugin»ù´¡
1.1. Ŀ¼½á¹¹²ã´Î
1.2. ²å¼þ¹¤×÷ÔÀí·ÖÎö
1.3. Êý¾ÝµÄ½»»¥
2. ÖÆ×÷²å¼þ
2.1. plugman
2.2. ±àд²å¼þ
2.3. ×¢ÒâÊÂÏî Further Reading
1. Cordova Plugin»ù´¡
1.1. Ŀ¼½á¹¹²ã´Î
IONICϵIJå¼þ¶¼ÊÇ×ñÑCORDOVA²å¼þ([BIBAPACHECORDOVA])¹æ·¶£¬Í¬Ê±ÌṩÓëCORDOVAÀàËÆµÄPLUGIN×ÓÃüÁîÀ´¹ÜÀí²å¼þ(IONIC
PLUGIN XXX)¡£
ÏÂÃæÊDzå¼þ¹ÜÀíÃüÁîÖеÄÌí¼Ó¡¢É¾³ý¼°ÁоٵȻù±¾Ê¹Ó÷½·¨£º
$ ionic plugin list cordova-plugin-camera 1.2.0 "Camera" cordova-plugin-console 1.0.1 "Console" cordova-plugin-device 1.0.1 "Device" cordova-plugin-splashscreen 2.1.0 "Splashscreen" cordova-plugin-statusbar 1.0.1 "StatusBar" cordova-plugin-whitelist 1.0.0 "Whitelist" ionic-plugin-keyboard 1.0.7 "Keyboard" plugin-mydemo 1.0.0 "MyDemo" |
Ìí¼Ó(add)Ò»¸ö²å¼þµÄʱºò£¬ÈôÖ¸¶¨µÄÊDZ¾µØµÄ·¾¶£¬ÔòÊǽ«±¾µØÂ·¾¶ÏµÄĿ¼Îļþcopyµ½plugins/Ï¡£ÈôÊDzå¼þÃû£¬Ôò»á×Ô¶¯Á¬½Óµ½ÍøÉÏÏÂÔØ¶ÔÓ¦µÄ²å¼þ¡£
ÓÉÓÚ²å¼þÊÇ×ñÑCordova²å¼þ¹æ·¶£¬ËùÒÔÿ¸ö²å¼þµÄ´úÂëĿ¼²ã´Î½á¹¹¶¼ÊǸ߶ÈÀàËÆµÄ¡£Ã¿Ò»¸ö²å¼þ¶¼ÊÇplugins/µÄÒ»¸ö×ÓĿ¼£¬Figure-1ÃèÊöÁ˲å¼þ¹²Í¬µÄ»ù±¾Ä¿Â¼½á¹¹¿ò¼Ü¡£

Figure 1. ²å¼þµÄĿ¼½á¹¹
´ÓͼÖпÉÒÔ¿´³ö£¬²å¼þ¿ò¼ÜÖн«²»Í¬Æ½Ì¨µÄʵÏÖ´úÂë¶¼·ÅÔÚ¸÷×Ô²»Í¬µÄĿ¼ÏÂ(android/ios)£¬Í¨¹ýionicͳһÉú³É¸÷×Ô¶ÔӦƽ̨µÄÓ¦ÓóÌÐò¡£
ΪÁË·½±ã¹ÜÀíplugins/϶à¸ö²å¼þ£¬Í¨³£ÔÚplugins/Ï»áÓÐÒ»¸ö×ܵĹÜÀíÎļþ£¬±ÈÈç±àÒëandroidƽ̨µÄʱºò£¬»áÓÐÒ»¸öandroid.jsonÎļþ£¬ÀïÃæ·Å×ŵ±Ç°²å¼þµÄ¼òµ¥ÐÅÏ¢¡£
µ±Óû§Ê¹ÓÃionic plugin add/removeÃüÁîÀ´Ìí¼Ó¡¢É¾³ý²å¼þµÄʱºò£¬android.jsonÒ²»á×Ô¶¯µÄ°ÑÏàÓ¦²å¼þ¶¨ÒåÌõÄ¿Ìí¼Ó»òÕßɾ³ýµô¡£
1.2. ²å¼þ¹¤×÷ÔÀí·ÖÎö
ÉÏÒ»½ÚÎÒÃÇÒѾÇå³þÁËÒ»¸ö²å¼þµÄ´úÂëĿ¼½á¹¹£¬ÄÇôһ¸ö²å¼þÊÇÈçºÎÕýÈ·µØÔÚIONIC¿ò¼ÜÏÂÔËÐеÄÄØ?
ǰ̨µÄHTML/JS´úÂëÓÖÊÇÈçºÎÓëºóÃæ¾ßÌåÆ½Ì¨×öÊý¾Ý½»»¥µÄÄØ?
Õâ¸ö¾ÍÐèÒª¶Ô²å¼þµÄ¹¤×÷ÔÀí¼°¸÷¸öÄ£¿éÖ®¼äµÄÁ÷³Ì¹ØÏµÓÐÒ»¸ö»ù±¾µÄÁ˽â[1]
ΪÁËÈòå¼þÄܹ»·ÃÎʾßÌåÆ½Ì¨ÏµÍ³µÄ´úÂ룬CordovaÌṩÁ˶ÔÓ¦µÄ±ê×¼·â×°APIÀ´Íê³É£¬ÏÂÃæµÄͼ¼òµ¥µØÊ¾ÒâÁËAndroidƽ̨Çé¿öϵķâ×°¹ý³Ì£º

Figure 2. ²å¼þ·â×°µ÷ÓÃͼ
µ±Óû§ionic build android½øÐеÚÒ»´Î±àÒëµÄʱºò£¬»á×Ô¶¯½«²å¼þϵÄJavaÎļþcopyµ½platform/android/Ŀ¼ÏÂÃæ£¬Í¬Ê±½«JSÒ²copyµ½platform/android/Ŀ¼Ï£¬×îÖÕʹÓÃAndroidµÄ±àÒ빤¾ß(aapt/aidl/dx/apkbuilderµÈ)Éú³É.APKÓ¦ÓóÌÐò¡£
ÕâÀïÐèҪעÒâµÄÊÇ£¬²å¼þÖеÄJavaÎļþĬÈÏÏÂÖ»»áÔÚµÚÒ»´Î±àÒëµÄʱºò×Ô¶¯·Åµ½platform/android/£¬Ö®ºó¼´Ê¹Óû§ÐÞ¸ÄÁ˲å¼þĿ¼ÏÂÃæµÄJavaÎļþ£¬±àÒëµÄʱºòÈÔÈ»ÊÇʹÓÃplatform/android/ϵÄJavaÎļþ¡£
½â¾öµÄ·½·¨¿ÉÒÔÊÇÔÚ±àд×Ô¼º²å¼þµ÷ÊÔµÄʱºò£¬ÔÚplatform/android/Ͻ¨Á¢Ò»¸ösymbol
link, Ö¸Ïò²å¼þÖеÄJavaÎļþ¡£
ÕâÑù¿ÉÒÔ±£Ö¤Ð޸ĵÄJavaÎļþ»á²Î¼Ó±àÒë¡£
1.3. Êý¾ÝµÄ½»»¥
´Ó\REF{SECIONICPLUGINFLOW}½ÚÎÒÃÇÒѾÇå³þJSºÍANDROIDƽ̨֮¼ä·Ö±ðͨ¹ýJSµÄCORDOVA.EXEC()ºÍJAVAµÄCORDOVAPLUGIN.EXECUTE()º¯ÊýÀ´¶Ô½Ó¡£
ÕâÁ½¸ö½Ó¿ÚµÄ²ÎÊý¶ÔÓ¦¹ØÏµÈçÏÂËùʾ£º
ÓÉÓÚJS·¢Ë͵½JavaµÄÊý¾ÝÒѾ×÷Ϊº¯ÊýµÄ²ÎÊý´«Èë, ËùÒÔº¯ÊýÖеĻص÷²ÎÊý£¬Ö÷ÒªÊǰïÖúJava²à·´À¡Êý¾Ý¸øJS²àËùÓá£
CordovaʹÓÃÁËorg.apache.cordova.PluginResultÀ´Íê³É£¬µ±ÖеÄPluginResult.Staus´ú±íJSµ÷Óòå¼þ³É¹¦Óë·ñµÄ״̬¡£
ͨ³£´úÂëÖÐÅжÏ״ֵ̬ÊÇ·ñΪPluginResult.Staus.OK£¬À´È·Èϵ÷Óýá¹û³É¹û»òÕßʧ°Ü
2. ÖÆ×÷²å¼þ
ʵ¼Ê¹¤×÷ÖУ¬ÎÒÃÇÍùÍùÐèÒª×Ô¼º±àдÂú×ã×Ô¼ºÏîÄ¿ÐèÇóµÄ²å¼þ¡£ÕâÀォÖð²½½éÉܱàд²å¼þµÄ²½ÖèºÍ×¢ÒâÊÂÏî¡£
2.1. PLUGMAN
Ò²ÐíIONICµÄ¿ò¼Ü±àдÕß¾õµÃJS¿ª·¢ÈËÔ±Ö»Òª»áÔõôµ÷ÓúÍɾ³ý²å¼þ¾Í×ã¹»ÁË¡£
ËùÒÔĬÈÏÏ£¬ionicµÄplugin×ÓÃüÁֻÊǸøJS¿ª·¢ÕßÀ´add/remove±àдºÃµÄ²å¼þ¡£Ëü²¢Ã»ÓÐ,
Ò²²»Ìṩstart/createµÈÀàËÆµÄÉú³É²å¼þ´úÂë¿ò¼ÜµÄ¹¦ÄÜÑ¡Ïî¡£
ÈôÎÒÃÇÐèÒª×Ô¼º±àд×Ô¼ºµÄ²å¼þ£¬Ôò¿ÉÒÔʹÓöîÍâµÄÒ»¸ö½Ð×öplugmanµÄ¹¤¾ß[2],
¸Ã¹¤¾ß¿ÉÖ±½Óͨ¹ýnpmÀ´°²×°¡£
°²×°³É¹¦ºó£¬¾Í¿ÉÒÔʹÓÃplugmanÃüÁîÀ´×Ô¶¯Éú³É²å¼þ´úÂë¿ò¼Ü£¬±ÜÃâÊÖ¹¤½¨Á¢ºÍÊäÈë´úÂëÎļþµÄ¹¤×÷£º
$ sudo npm install -g plugman $ plugman create --name plugin-myspeech --plugin_version 0.1 --plugin_id org.foo $ cd plugin-myspeech $ plugman platform add --platform_name android |
ÉÏÊöÃüÁ»áÉú³ÉÒ»¸öplugin-myspeechµÄĿ¼£¬Í¬Ê±»á×Ô¶¯Éú³Éplugin.xml¡¢srcÒÔ¼°wwwĿ¼¡£
µ±Ê¹ÓÃplatform addÌí¼ÓÍêandroidÖ§³Öºó£¬¶ÔÓ¦µÄAndroid
Java´úÂë¿ò¼ÜÒ²»á×Ô¶¯Éú³É¡£
ͬÀí£¬plugman platform add --platform_name
iosÌí¼ÓiOSÖ§³Öºó£¬ºÍiOSÏà¹ØµÄ´úÂë¿ò¼ÜÒ²×Ô¶¯Éú³É¡£
2.2. ±àд²å¼þ
ÕâÀï½éÉÜÒ»¸ö×Ô¼ºÐ´µÄANDROIDƽ̨ϵļòµ¥PLUGIN£¬ÑÝʾǰ̨µ½ºóÃæ¾ßÌåÆ½Ì¨ÊµÏÖµÄÁ÷³Ì¡£
²å¼þ±¾ÉíÂß¼·Ç³£¼òµ¥: µÃµ½JSÇëÇóºó£¬°Ñµ±Ç°ÊÖ»úµÄAndroidϵͳµÄ°æ±¾ÐÅÏ¢£¬²¢·¢ËÍ»ØÇ°¶Ë¡£
ͨ¹ýplugmanÃüÁîÉú³É»ù±¾²å¼þ´úÂë¿ò¼Ü£º
$ plugman create --name MyDemo --plugin_version 0.1 --plugin_id org.ioniconline $ cd MyDemo $ plugman platform add --platform_name android |
×Ô¶¯Éú³ÉµÄ´úÂë¿ò¼ÜÖУ¬¶¨ÒåÁËcoolMethod·½·¨£¬ÎÒÃÇ¿ÉÒÔÔÚJava´úÂëÖд¦Àí¸ÃÇëÇó
public
class MyDemo extends CordovaPlugin {
public boolean execute() {
if (action.equals("coolMethod")) {
Log.e("MyDemo", "process the req");
String str = android.os.Build.VERSION.RELEASE;
PluginResult r = new PluginResult(PluginResult.Status.OK,
str);
r.setKeepCallback(true);
callbackContext.sendPluginResult(r);
return true;
}
return false;
}
} |
ÖÁ´Ë£¬Ò»¸ö²å¼þµÄ¹¦ÄÜÒѾÍê³É¡£
½ÓÏÂÀ´ÎÒÃÇÔÚ×Ô¼ºµÄionicÓ¦ÓÃÖÐÌí¼Ó¸Ã²å¼þ¡£Óû§¿ÉÒÔÖ¸¶¨×Ô¼º¸Õ¸Õ±àдµÄ¿Ø¼þÎļþĿ¼λÖ᣸ÃʾÀý²å¼þÒѾ´æ·ÅÔÚgithubÉÏ£¬ËùÒÔ¿ÉÒÔ´ÓgithubÉÏÖ±½ÓÌí¼Ó£º
$ ionic plugin add https://github.com/yangsongx/MyDemo |
ÕâÑù»áÔÚµ±Ç°Ó¦ÓõÄpluginsĿ¼ÏÂÉú³Éorg.ioniconlineĿ¼£¬ÀïÃæ·ÅµÄ¾ÍÊÇÇ°Ãæ±àдµÄ²å¼þ´úÂë¡£
ÔÚÐèÒªµ÷ÓÃAndroid½Ó¿ÚµÄµØ·½¼ÓÉÏJS´úÂ룺
function
getVersion() {
cordova.plugins.MyDemo.coolMethod('useless',
function(okData) {
alert(okData);
},
function(failData) {
alert(failData);
});
} |
³É¹¦Çé¿öÏ£¬»áµ¯³ö°üº¬Androidϵͳ°æ±¾ºÅÊý¾ÝµÄ¶Ô»°¿ò¡£±ÈÈçÔÚÎÒ»ªÎªP7ÉÏ·µ»ØµÄÊÇ4.4.2
Figure-\ref{figIOnicMyDemo}ÑÝʾÁËÕû¸ö´úÂëÔÚ¸÷¸öÄ£¿é¼äµÄµ÷ÓùØÏµ¡£ÍêÕûµÄMyDemoµÄ²å¼þ´úÂë¿ÉÒÔ´Ógithub[3]Éϵõ½¡£

Figure 3. MyDemo²å¼þÂß¼Á÷³Ì
ÿ¸öPluginÐèÒªÊä³ö(export)µÄ½Ó¿Ú¶¼ÐèҪʹÓÃmodule.exportsµÄÃüÁîÀ´Íê³É¡£
var myApis = {};
myApis.foo1 = function(a,b) {
cordova.exec(...);
};
myApis.foo2 = function(a,b,c) {
cordova.exec(...);
}; |
2.3. ×¢ÒâÊÂÏî
²»ÒªÖ±½ÓÐÞ¸ÄPluginÖеÄJava´úÂ룬Õâ¸ö´úÂë²»²ÎÓë±àÒë¡£
ÔÒò£º µÚÒ»´Î±àÒëÄ¿±êÓ¦ÓÃʱ£¬ionic»á½«PluginÖеÄJava´úÂëcopyµ½platform/ϱàÒë¡£µ«Ï´ÎÔÙ½øÐбàÒëµÄʱºò²»»áÔÚcopyrJava´úÂ룬ËùÒԲμӱàÒëµÄʵ¼ÊÉÏÖ»ÊÇplatform/ϵÄJava´úÂë¡£
pluginÖеÄjs¿ÉÒÔÖ±½ÓÐ޸쬶øÇÒÿ´ÎÖØÐ±àÒë¶¼²Î¼Ó±àÒë¡£
ÔÒò£º ionicϵÄJSÊÇÔÚCordovaÉÏ·â×°ÁËÒ»²ã£¬ËùÒÔÿ´Î±àÒ룬ÐèÒª½«ionicϵÄJSת»»³ÉCordova
JS²ÅÄÜÕýÈ·¹¤×÷
ʹÓÃexec()ÖеÄservice²ÎÊý±ØÐèºÍ²å¼þplugin.xmlÖеÄfeatur¶¨ÒåµÄÒ»Ö£¬·ñÔò»áÓÐclass
not found´íÎó
±¨method not foundÒì³£, ²å¼þÖеÄjs½Å±¾Î´ÕýÈ·µØÊ¹ÓÃmodule.exportsÉùÃ÷¡£
|