原生安卓使用cordova制作插件教程(二)

前言


請原諒我這么久才開始寫制作插件教程(二) ,由于公司技術可能又到了一個技術棧選型的過渡期,后面可能沒有那么多機會寫插件了.很多小伙伴給我發(fā)郵件,催促我寫第二篇教程, 那今天我們手把手的教大家寫一個原生插件吧!


首先,我們確認環(huán)境是否一致

請確保在開發(fā)前,有以下環(huán)境:(右側是我的版本)

Nodejs:   v10.15.1  (此版本不同也可)
Cordova:   v8.0.0   (如閱讀此教程,此版本請務必和我保持一致)
Android Studio : 3.0+(有AS方便調試和開發(fā))

在寫插件之前,我們需要思考的問題

我們開發(fā)插件,肯定是想實現(xiàn)某些功能給前端同事調用,我們完全可以想象就像是做一個SDK一樣,提供一些類或者方法被第三方調用.我們這里,也是如此,做插件的原理,就好比如圖所示:


image.png
所有的插件在Cordova項目中都以Module的形式被引入, 注冊,以及調用.

插件的作用:是為了彌補和擴展Cordova項目無法直接操作原生硬件或者改變系統(tǒng)某種設置的能力,如相機,OCR識別等

一. 創(chuàng)建一個Cordova項目和一個插件

這里我用自己開發(fā)的桌面工具進行生成,目前只支持Windows平臺,有需要的點CordovaHelp

  • 創(chuàng)建Cordova項目


    創(chuàng)建Cordova項目.png
  • 創(chuàng)建Plugin插件


    image.png

不想使用該工具的,請自行敲命令.(_!)

以下步驟,默認你已經(jīng)和我的步驟保持一致.

現(xiàn)在我們已經(jīng)分別生成了Cordova項目和插件了,那么怎么把他們連貫起來呢?
先別著急.我們先了解下CordovaPluginDemo文件夾下的目錄結構.

了解插件的文件結構和文件用途

|-- src                                   //存放源碼的地方
    |-- android                  //區(qū)分于平臺. 可能會有多個平臺, 如android , iOS
        |-- CordovaPluginDemo.java        // H5調用原生插件的入口
|-- www                                         //原生插件提供給H5的組件入口
    |---- CordovaPluginDemo.js
|-- package.json                         //包名信息
|-- plugin.xml                           // 插件的配置文件, 非常重要,相當于插件的核心

二. CordovaPlugin.js文件解讀

image.png
  1. CordovaPluginDemo 表示組件名稱
  2. coolMethod 表示組件內部的方法
  3. 至于arg0 ,success,error 都是調用時傳入的參數(shù)和回調

三. plugin.xml文件解讀

image.png
  1. js-module節(jié)點 配置給H5調用的組件,其中,clobbers節(jié)點的target是用來給H5調用的組件名稱
  2. platform節(jié)點下,對應了所有平臺的屬性,根據(jù)name的不同進行區(qū)分, 以下以Android為例


    image.png

這個屬性的配置,是所有插件都會有的,feature 節(jié)點下,主要是配置調用組件時,對應的包名進行匹配,如果你發(fā)現(xiàn), 兩個CordovaPluginDemo不匹配, 那么,你肯定寫的有問題, 調用時,肯定會出現(xiàn)找不到對應組件的錯誤.

然后下面的 config-file 以及source-file或者還有其他的配置項,如resource-fileedit-config等等,都是都是源碼導入項.(名字是我自己取的,為了方便理解)

怎么解釋這個源碼導入項呢? 因為這些配置它的目的是為了把一些源碼,資源文件,以及清單文件(AndroidManifest.xml)的配置數(shù)據(jù),都copy的形式導入到Cordova項目下的\platforms\android,

所以,我們安裝插件,其實最終結果是,把插件的所有源碼和配置項,都復制到platform/adnroid下,相當于組合起來,然后能夠正常運行, 讓前端通過組件的形式調用.

題外話:如果你去了解Cordova項目原理,它其實就是通過原生Webview
進行渲染所有的前端頁面, 而前端所有寫的的頁面,都會在platform/adnroid中找得到.
如果你對JsBridge框架有所了解, 你學習制作Cordova項目的插件會非常輕松. 

調用插件(手把手教你怎么解決問題)

注意:其實上述插件的代碼中有很多幾個隱藏的問題.

  • 編寫調用插件的代碼
    1.在前端頁面定義一個方法


    定義調用方法.png

    2.調用定義的方法


    image.png

然后執(zhí)行添加插件命令,或者使用工具也是可以的! 設置項目路徑和插件路勁點擊紅色框框按鈕執(zhí)行安裝.


image.png

然后連接手機(能夠有效識別), 然后點擊編譯項目,運行到手機上,然后點擊按鈕,查看日志


image.png

問題一: 未找到組件的定義

非常顯眼的字樣:

Uncaught ReferenceError: CordovaPluginDemo is not defined   //翻譯的意思是找不到引用,可能未被定義

當你遇到這個問題的時候 ,你要非常肯定是插件的問題,
首先,你要排查一下,是不是你的引用寫的有問題,也就是看調用的組件名稱和插件的plugin.xml的clobbers定義的是不是保持一致, 對比之后,發(fā)現(xiàn)是真的寫的有問題,那么我們修改clobbers名稱,
把它修改成CordovaPluginDemo,修改之后,需要重新插件,然后重新點擊調用,發(fā)現(xiàn)沒有出現(xiàn)剛剛那個錯誤了.這種錯誤就比較簡單了, 當然,還有一些錯誤,就沒有那么好解決了!

問題二, 由于包名不一致導致

我們一般通過AS排查問題,首先把\CordovaProject\platforms\android這個路徑導入到AS中,

image.png

然后進行構建, 中途可能報錯,會需要你點擊移除minSdkVersion和TargetSdkVersion,點一下然后可能也會彈出讓你更新什么什么的,這里不要點擊更新,直接點擊忽略選項就行了,然后項目就能正常了,我們打開我們編寫的插件源碼,
image.png

觀察發(fā)現(xiàn),我們的包名不一致導致的,我們需要怎么修改呢?
是改成和Java包名一樣的還是應該改成爆紅的那個呢?這里建議改成爆紅的這個,因為在之前,我們創(chuàng)建的時候,寫的包名是com.senjoeson.plugin,這可能是通過命令生成后的一個小問題吧,我們把CordovaPluginDemo移動到plugin下,那么,是不是移動了包的問題,就能夠解決這個問題呢,我們試著編譯然后運行一下,
image.png

然后有時候會出現(xiàn),怎么還是會報錯呢?這不科學啊,其實這和cordova框架 的機制有關系,
還有如果在android源碼中這樣移動包名,可能之前由于包名的配置數(shù)據(jù)沒有被更改, 從這里你就可以看出來,這里,建議是直接從插件的源碼中修改,
image.png

這里的包名引導的位置是src/com/senjoesons/plugin/CordovaPluginDemo/實質上,我們找到CordovaPluginDemo.Java文件應該找的是src/com/senjoeson/plugin/CordovaPluginDemo.java,因此,這里我們一般要手動修改一下,這個也是非常容易出錯的地方,很多時候,找不到引用,也可能是由于這個原因.
這里我們把插件的plugin.xml修改下,然后重新安裝插件,并且編譯項目,
image.png

最終發(fā)現(xiàn),運行成功了!

好了,這里基本上把整個制作插件的流程中講了一遍,下面把可能遇到的問題,簡單的給大家歸類總結一下:

    1. 前端調用時的組件名稱,注意是與插件中的plugin.xml的clobbers中對應
  • 2.定義方法,在組件名稱入口內部定義的action名稱請和www/xxxx.js中的方法名稱保持一致,方便追溯問題.
  • 3.包名的引用,請和對應的android項目中Java包名保持一致,如果不一致, 可以通過plugin.xml中的android-package對應,上文中,
 //這里的CordovaPluginDemo請理解成是Java類名稱,而不是包的路徑
 <param name="android-package" value="com.senjoeson.plugin.CordovaPluginDemo"/> 
  • 4.對于第三點,補充下,可以通過按住ctrl鍵點擊這個類


    image.png

    如果能夠正常跳轉,就表示,你的組件是能夠對應上的.

  • 5.如果在platform/android下修改了源文件, 比如前端的index.html或者index.js,對應cordova前端項目是不會有改變的,雖然運行時候有改變,但是不會同步到外部,所以,如果想要生效,請直接修改cordova項目,然后重新添加平臺即可同步生效.
  • 6.插件的修改之后,并不會直接作用于platform/android 中,需要重新安裝才能夠生效.

以上,是所有的cordova制作插件的教程和注意事項, 如果大家在使用過程中, 有任何疑問,請隨時和我交流討論,
附上我的郵箱,給我發(fā)郵件:senjoeson@foxmail.com如有任何問題,都可以聯(lián)系我.

最后感謝大家閱讀此文,感謝!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市灿里,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異暑椰,居然都是意外死亡霍转,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門一汽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來避消,“玉大人,你說我怎么就攤上這事召夹⊙遗纾” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵监憎,是天一觀的道長纱意。 經(jīng)常有香客問我,道長鲸阔,這世上最難降的妖魔是什么偷霉? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮褐筛,結果婚禮上类少,老公的妹妹穿的比我還像新娘。我一直安慰自己渔扎,他們只是感情好硫狞,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般残吩。 火紅的嫁衣襯著肌膚如雪财忽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天世剖,我揣著相機與錄音定罢,去河邊找鬼。 笑死旁瘫,一個胖子當著我的面吹牛祖凫,可吹牛的內容都是我干的。 我是一名探鬼主播酬凳,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼惠况,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宁仔?” 一聲冷哼從身側響起稠屠,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翎苫,沒想到半個月后权埠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡煎谍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年攘蔽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呐粘。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡满俗,死狀恐怖,靈堂內的尸體忽然破棺而出作岖,到底是詐尸還是另有隱情唆垃,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布痘儡,位于F島的核電站辕万,受9級特大地震影響,放射性物質發(fā)生泄漏沉删。R本人自食惡果不足惜蓄坏,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丑念。 院中可真熱鬧涡戳,春花似錦、人聲如沸脯倚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至恍涂,卻和暖如春宝惰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背再沧。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工尼夺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人炒瘸。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓淤堵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親顷扩。 傳聞我的和親對象是個殘疾皇子拐邪,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容