Apicloud 之 Android studio 原生封裝

19年年底離職,回家過年之前,嘗試性投遞了幾家公司,面試機會蠻多的,就選了兩家近的去看看,第一家面試就通過了,安心的回家,迎接新年新氣象------疫情…反正以Android開發成功入職後,到公司後發現原生只是偶爾維護迭代,更多的精力放在hybird開發-------Apicloud開發。
順便打個廣告,這是我學習一週,就開始參加迭代和維護的跨平臺工程。
蕉梨健身APP(其他應用市場也都有)
雖然之前用Vue開發過,也瞭解過apicloud框架,但是說實話用Apicloud開發還是有點慫的,畢竟不曾瞭解的東西,總的需要親身去填坑。
關於Apicloud開發暫時不做整理,目前也在系統的去總結一個從0到1的工程,等完結會配合自己寫的練手工程去總結下(同樣工程也會開源出來)。
今天總結下自己這幾天用Android studio 封裝原生功能所遇到的費時操作,關於apicloud(自定義模塊)。
不曾瞭解的先看下官方文檔:模塊開發指南_Android_Studio

摘要:先簡單論述下,證明官方sdk是能運行的,是騾子是馬,跑起來看看再說

開發工具:Android studio 最新版
開發準備:先到官方去下載最新的SDK,傳送地址

在這裏插入圖片描述
下載下來後,解壓,找到Android工程,用Android studio打開
在這裏插入圖片描述
demo工程版本較低,打開的時候,需要自己簡單調整下(比如把compile換成api,minSDK寫在哪裏等—根據提示完成就好了)
在這裏插入圖片描述
主工程也就是你下載的module_SDK中的uzmap中的類似於路由或者配置文件;widget中的則是HTML資源----相當於Apicloud studio2中的工程。打開index_frm你會看到
在這裏插入圖片描述
真機運行就可以驗證封裝的demo。
運行成功後,先認真的去看官方給工程裏的module,大概四五個的樣子,每個module都代表了不同的需求。比如ApplicationDelegate類似於原生中的Application,一些三方初始化的地方都可以在這裏初始化,前提是先在module.js配置路徑,該工程運行的時候,會先運行該類 ;另外,雖然官方給的是不同的module,其實是可以放到同一module中,比如ApplicationDelegate放在你新建的module中,你再自己重新建js映射文件,不過需要注意的是,你的js映射文件ApplicationDelegate都要在module.js中配置。

新建module

如果是比較新的studio,新建module時你會看到Project needs to be converted to androidx.* dependeces
在這裏插入圖片描述
解決方案:
在這裏插入圖片描述
對比上圖,在工程裏找到改文件,複製下面到你的文件中

android.useAndroidX=true
android.enableJetifier=true

sync now ;然後新建module,建立成功後把上面的true都改爲false,再sync now。
根據官方給的module樣式,把自己新建的module依賴到APP主工程中去。

開發tips

流程,官方文檔其實已經很仔細了,我現在簡單描述下需要被知道的事:

  • ApplicationDelegate類可以進行三方初始化,或者自己工程需要Application初始化的地方,都可以放到該類裏面去,不過要記得在module,js中配置
  • 在這裏插入圖片描述
  • 原生中的context可以用context()代替;
  • 你的module中所依賴的三方都可以放到你新建的module中去,如果只是簡單的原生方法進行js封裝,打包還是很easy的;如果有其他依賴,比如三方arr,就麻煩了點(這個下面講,畢竟我自己爲了上傳到apicloud控制檯,折騰了一天)
  • js封裝
public void   jsmethod_isPermissionOpen(final UZModuleContext moduleContext) {
        boolean b = false;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                 b = NotificationManagerCompat.from(context()).getImportance() != NotificationManager.IMPORTANCE_NONE;
            }else
                 b = NotificationManagerCompat.from(context()).areNotificationsEnabled();

             JSONObject ret = new JSONObject();
             try {
                 ret.put("state", b);
             } catch (JSONException e) {
                 e.printStackTrace();
             }
             moduleContext.success(ret, true);   //這個就是官方給的回調方法,就是原生的callback

        }

jsmethod_ 這個是官方定義的前綴,isPermissionOpen這個則是自己定義的方法名,比如你的模塊名字叫module

var isP = api.requre("module);
isP .isPermissionOpen({},funcation(ret,err){

});

簡單來說,就是你寫的方法,方法名前加上jsmethod_,然後在結果處做個 moduleContext.success(ret, true);成功或失敗回調。其他邏輯,原生如此就如此。

  • 監聽回調
    其實跟普通方法js封裝一樣,在你的原生監聽方法裏寫上 moduleContext.success(ret, true);成功或失敗回調。
  • 依賴包衝突
    該sdk提供的還是V4包,但是我們新的module需要的是最新的,那就果斷把sdk依賴的v4包刪除,在module中添加所需要的依賴。
  • Android studio 鼠標點擊下你自己的module 然後 build ==》 build Module ' ** '打出來的包是debug,官方說的是release包啊
    解決方案1:在你的Terminal中輸入gradlew assembleReleaseEnter按一下,靜等release包;
    解決方案2:其實debug包也無所謂,都可以的,所以不用處理。
    (先寫這麼多,其他注意的後期補)

打包

如果只是簡單的原生方法封裝,比如調什麼權限,直接js封裝就好,打包的時候,在module.js中配置好—

  • name爲你的module名字
  • class爲你封裝的js方法,也就是你那個繼承UZModule的類的路徑

在這裏插入圖片描述

  • 新建文件夾(以你的module名爲文件夾名字),在你的文件夾裏新建文件module.js,裏面寫上如此樣式的 json
    在這裏插入圖片描述
    把你的module的arr文件也放到該文件夾中
    在這裏插入圖片描述
    然後打成zip包就可以重新上傳了。

如果你的module中有第三方依賴,官方文檔給的不太細緻,假如你按照文檔成功上傳到平臺,那麼別往下看了

本次封裝,我加入了一些jar包、依賴還有三方ARR,自我調用自己的module arr文件是成功的,但是就是上傳不上去,折騰了一下午,最終總結出:

  • 如果有三方arr,在你打arr文件的時候,該三方arr是不會被打入你的arr包中;
  • 如果有三方jar,在你打arr文件的時候,該三方jar是會被打入你的arr包中;

上述兩個可以自己查看,把你的arr包後綴改成.zip就可以解壓查看。
在這裏插入圖片描述

  • 即使按照官方說的,把第三方arr也放進文件中一起打包,發現也是無濟於事,根據上面的兩條,我建議把arr包換成jar包進行依賴
    arr轉jar方法:比如上圖的clsaa.jar就是你需要的jar,把名字換掉可以了。
    需要注意的是,你查看下libs文件夾下有沒有該jar所依賴的包,有的話一起放入到你的工程裏去
    在這裏插入圖片描述
    還要查查有沒有需要的so庫,有的話在你打包的時候放到你的文件夾中的target文件夾裏
    在這裏插入圖片描述
    新建zip包,上傳自定義模塊裏
    到此,算是成功了,再此做個筆記,供需要的參考,到目前封裝了幾個了,最大的就是騰訊的IM,有需要探討的,歡迎來撩。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章