Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÈçºÎ¿ª·¢Ionic²å¼þ--android
 
×÷Õߣºioniconline À´Ô´£º²©¿Í ·¢²¼ÓÚ£º2016-8-26
  2305  次浏览      28
 

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ÉùÃ÷¡£

 

 

   
2305 ´Îä¯ÀÀ       28
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ