W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
AndroidStudio版模塊包是標準的AAR包。APICloud模塊擴展SDK是基于DeepEngine(以下稱引擎)開放的一套標準化擴展機制,用于支持開發(fā)者靈活擴展任意原生功能到APICloud平臺。 平臺現有的模塊如果無法滿足您的需求,可通過該SDK進行模塊擴展,在多個項目中復用,為應用開發(fā)節(jié)省大量的重復性工作,您也可以將開發(fā)完成的模塊提交到模塊商店,分享給開發(fā)者使用。 本SDK提供給有一定Android原生開發(fā)基礎的開發(fā)者,通過簡單的接口實現和標準的Android開發(fā)流程,快速擴展模塊,輕松接入APICloud平臺。
一個完整的SDK包命名類似:ModulesDevProject_Android.zip。解壓后是一個標準的Android Studio工程目錄,如圖所示:
本文檔面向所有使用該SDK的Android開發(fā)人員、測試人員、合作伙伴以及對此感興趣的其他用戶。閱讀該文檔要求用戶熟悉Android應用開發(fā),熟悉Android Studio開發(fā)工具的基本使用,并且對Html、CSS、Javascript有一定了解,熟悉Java和Javascript中JSON格式數據的操作。
本SDK是開發(fā)者快速了解使用APICloud跨平臺移動應用開發(fā)引擎,并熟練掌握模塊開發(fā)技巧及了解APICloud移動應用云平臺的橋梁。
引擎通過實現對操作系統(tǒng)底層能力的封裝和擴展,基于H5引擎開放API給JS調用的形式,實現了HTML+CSS+JS開發(fā)語言和Object-C/Java/C/C++等原生開發(fā)語言之間的橋接,極大的豐富和增強了標準H5的能力。令前端開發(fā)者通過JS即可調用移動設備的底層功能,如:電話、短信、定位、多媒體、跨域http請求等,并能將如百度地圖、支付寶等第三方廠商的SDK很容易的集成至App中來。
本SDK開放橋接機制,方便具有一定Android基礎的開發(fā)者靈活擴展模塊,豐富JS的能力,提升App的用戶體驗。引擎框架橋接層設計如圖:
本SDK主要提供以下功能和接口:
-被映射Java類的函數、屬性及常量書寫規(guī)范
-module.json文件的聲明
-直接插入View至window
-獲取一個Activity的View并插入window
-直接啟動Activity
-啟動Activity并獲取返回值
-在module中調用引擎的widget管理能力啟動widget
-向APP的某活動window注入并執(zhí)行一段Javascript
-動態(tài)初始化和分配內存
-生命周期事件回調等
PC:Windows XP/Win7/8/10 Mac OS;
JDK1.8及以上,默認使用1.8;
Android Studio3.0及以上;
Gradle5.6.4及以上(對應官方gradle-5.6.4-all.zip),Gradle插件版本3.6.1。建議提前下載好Gradle,并在開發(fā)工具中設置使用本地離線的Gradle;
Android SDK 21(5.0)及以上,建議使用30;
Android Studio下載地址:https://developer.android.google.cn/studio/index.html
詳細的SDK幫助文檔:docs.apicloud.com/superwebview/Android/(未處理)
Android在線API文檔:https://developer.android.google.cn/reference/packages.html
Javascript規(guī)范及入門:http://www.w3school.com.cn(未處理)
JSON數據在線Viewer:http://www.bejson.com/go.html?u=http://www.bejson.com/jsonview2/(未處理)
將項目管理視圖切換為“project”,導入后的工程結構如圖:
1.創(chuàng)建模塊
APICloud模塊包為標準的AAR包,遵循Studio的模塊開發(fā)流程。在項目APICloudModuleSDK上右鍵 ->New ->Module,為項目新建一個Module,并命名為moduleDemo,如圖:
創(chuàng)建完畢后項目結構如圖:
2.在項目中配置引用模塊
在app的build文件中配置引用moduleDemo模塊,操作步驟:打開app ->build.gradle,在dependencies中加入引用
compile project(':moduleDemo')
如圖:
3.在模塊中配置引用引擎jar包
在moduleDemo模塊的build文件中配置引用引擎的jar包,操作步驟:打開moduleDemo ->build.gradle,在dependencies中加入引用
provided files('../app/libs/apiEngine v1.1.0.jar')
注意:使用provided進行引用,即僅依賴引用,但不會被編譯到AAR中
如圖:
4.創(chuàng)建用于綁定映射至JS對象的Java類
在moduleDemo模塊中新建Java類(以下以APIModuleDemo.java類為例,映射的JS對象為moduleDemo),繼承自引擎Jar包中的APIModule或者UZModule類,并重寫相關函數。如下圖:
5.在模塊聲明文件module.json中聲明Java類
開發(fā)者務必在module.json文件中聲明被映射Java類的class路徑,以及其所開放給JS的模塊名稱,引擎將根據該配置檢索相應的Java類,并在適當時候將其初始化。
module.json文件固定存放于app下的assets/uzmap目錄中,如圖:
存儲格式為JSON格式,包含modules、name、class等字段。聲明標準如下:
{
"modules":[
{
"name":"moduleDemo",
"class":"com.apicloud.moduleDemo.APIModuleDemo"
},
{
"name":"xxxDemo",
"class":"com.xxx.Objxxx"
},
{
"name":"xxxDemo1",
"class":"com.xxx.Objxxx1"
}
]
}
字段解釋:
6.定義開放API
若希望將Java類中的某個函數開放給JS調用,只需將該函數聲明以“jsmethod_”開頭,并且聲明該函數為public,同時接收且僅接收一個類型為UZModuleContext的參數即可。
函數聲明格式:
public void jsmethod_func(final UZModuleContextmoduleContext){
}
引擎會在初始化的時候,根據Java函數是否包含“jsmethod_”的前綴,而將該函數映射至JS對象。例如聲明“jsmethod_showAlert”,引擎會將“jsmethod_showAlert”函數映射至模塊對應JS對象的“showAlert”函數,開發(fā)者在Html頁面中即可使用moduleDemo.showAlert(argument)的方式直接調用至Java的jsmethod_showAlert函數,并進行相關操作。
如下圖中的定義:
實現了向JS對象映射:
對應在JS中使用:
即可調用到對應的Java函數中;
注意:
以“jsmethod_”前綴聲明的Java函數,引擎默認在UI線程中操作該函數,因此請勿在該函數內部做耗時的操作,避免引起UI阻塞,拋出異常,耗時操作可另起線程進行。
7.獲取來自JS傳入的參數
擴展機制規(guī)范要求前端JS開發(fā)者必須使用JSON格式數據作為JS與原生(Java)之間交換數據的傳參。引擎將對JS傳入的參數進行處理并封裝,通過包裝成UZModuleContext類傳遞給聲明“jsmethod_”前綴的函數。
UZModuleContext類是JS與原生(Java)之間通信的運行時上下文封裝,既是JS提交給Java數據的載體,同時也是Java回調JS的執(zhí)行者。UZModuleContext內部封裝了JSON數據操作的所有方法,如optInt、optString等,UZModuleContext同時還封裝了success、error等回調JS的方法。
例如Html頁面代碼為:
uzmoduledemo.showAlert({msg:"Hello APICloud!"});
在Java中可通過類似如下方式獲取JS傳入的msg值:
public void jsmethod_showAlert(final UZModuleContext moduleContext){
String showMsg = moduleContext.optString("msg");
}
8.將操作結果回調至JS
JS與原生之間遵循異步訪問機制,Java做完相關操作后,應該將操作結果回調給JS,或者通知JS本次操作成功與否,錯誤提示等。該回調過程由UZModuleContext下的success、error等函數完成。如下代碼實現了對“showAlert”結果的回調,將用戶點擊對話框按鈕的操作通知JS:
JSONObject ret = new JSONObject();
try {
ret.put("buttonIndex", 1);
} catch (JSONException e) {
e.printStackTrace();
}
moduleContext.success(ret, true);
1.導出模塊包
模塊開發(fā)調試完畢后,需將該模塊編譯為AAR包,并按照APICloud模塊包要求打包,通過APICloud網站控制臺提交。 打包步驟:
{
"name":"moduleDemo",
"class":"com.apicloud.moduleDemo.APIModuleDemo"
}
本SDK默認展示5個擴展模塊demo。其中:
本章節(jié)提供引擎所有與模塊擴展相關的API說明。
本SDK開放數個關鍵類:APIModule(UZModule)、ApplicationDelegate、UZModuleContext、ModuleResult、RefreshHeader,以及若干工具類API及常量,如:UZUtility、APICloudHttpClient等。
類 | 描述 |
---|---|
APIModule(UZModule) | 所有擴展模塊的基類,Java類通過繼承該類并聲明相應函數,實現Java類綁定映射至JS對象,并開放API |
UZModuleContext | JS函數映射至Java函數時,傳遞參數的載體,同時也是Java回調結果至JS的執(zhí)行者。包含操作標準JSON的方法 |
ApplicationDelegate | 應用生命周期的回調代理類??赏ㄟ^定義類繼承實現該類,并在module.json中配置聲明,實現對應用生命周期的監(jiān)聽。 |
ModuleResult | 模塊同步接口,返回結果時的包裝類。模塊開放同步接口時,在使用"sync"標識某接口為同步接口的同時,該接口需將數據結果通過ModuleResult包裝后返回 |
RefreshHeader | 下拉刷新頭模塊的父類,所有下拉刷新頭類的模塊,必須繼承該類,并實現相關函數,同時必須在module.json中配置該類。 |
UZUtility | 基礎工具類,定義了許多實用函數,如獲取外部存儲路徑,相對/絕對路徑轉換等 |
UZResourcesIDFinder | 動態(tài)獲取資源ID的工具類。在模塊開發(fā)過程中不允許直接通過引用R文件進行資源引用,必須通過本類下的接口動態(tài)獲取資源ID |
APICloudHttpClient | api.ajax(http、https)的原生API,管理所有請求,支持get、post、delete、download等常見操作,支持同步請求,取消等功能??芍苯诱{用,實現遠程數據的獲取,圖片異步下載,資源緩存等 |
APIModule(UZModule)對象:
API | 描述 |
---|---|
runOnUiThread | 在UI線程中執(zhí)行操作 |
startActivityForResult | 啟動一個Activity并要求返回值。所有使用APICloud SDK擴展的模塊,在需要startActivityForResult時,都必須調用該接口,而不能直接調Activity的startActivityForResult |
getFeatureValue | 獲取當前應用widget的config文件中feature字段的值 |
insertViewToCurWindow | 插入一個自定義的View到當前window中 |
removeViewFromCurWindow | 從當前window移除某個自定義View |
makeRealPath | 將一個任意協(xié)議的路徑,如標準的content://,res://,以及APICloud擴展的widget://,fs://,cache://轉換為系統(tǒng)可識別的真實路徑 |
inImmerseState | 當前app是否處于"沉浸式"效果下。 |
onActivityResult | 通過startActivityForResult時,回調結果可重寫此接口獲取 |
getContext | 獲取運行時上下文 |
getSecureValue | 獲取當前應用widget的key.xml文件中字段的值。 |
onClean | 引擎主動回調函數,當window或者frame關閉以及當前頁面發(fā)生url變化時,引擎會主動回調該接口,開發(fā)者應該在此接口中清理當前模塊占用的資源,如網絡資源,內存資源等 |
UZModuleContext對象:
API | 描述 |
---|---|
success | 模塊正?;卣{結果給JS |
error | 當模塊內部發(fā)生異常時,通過此接口回調結果給JS |
interrupt | 不處理回調。建議模塊開發(fā)中,不想處理回調JS時,調用一下該函數 |
opt* | 各種操作JSON數據的方法 |
{
"name":"moduleDemo",
"class":"com.apicloud.moduleDemo.APIModuleDemo"
}
如果一個模塊包中包含多個模塊入口,則配置類似如下:
{
"name":"moduleDemo",
"class":"com.apicloud.moduleDemo.APIModuleDemo"
},
{
"name":"moduleDemo1",
"class":"com.demo.ModuleDemo1"
},
{
"name":"moduleDemo2",
"class":"com.demo.ModuleDemo2"
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.apicloud.sdk.moduledemo">
<uses-sdk android:minSdkVersion="15" android:targetSdkVersion="28"/>
<uses-permission android:name="android.permission.VIBRATE" />
<meta-data android:name="android.useAndroidX" android:value="true" />
<application>
</application>
</manifest>
云編譯在獲得模塊該標識后,將自動為當前所編譯項目增加androidx支持庫。
建議開發(fā)者在開發(fā)過程中對資源文件的命名遵循如下規(guī)則:mo + 模塊名 + 功能或UI類型 + 資源類型。
例如(以moduleDemo模塊為例):
命名一個布局資源文件:
mo_moduledemo_demo_activity_layout.xml
命名一個圖片資源文件:
mo_moduledemo_backbtn_press_bg.png
mo_moduledemo_layout_bg.png
命名一個字符資源文件:
mo_moduledemo_init_msg
mo_moduledemo_error_msg
特別說明:SDK工程目錄下的任意原有資源文件,開發(fā)者不應隨意改動,需保持其原狀,否則SDK可能在啟動過程中報找不到引擎資源的警告而強制退出,或者破壞模塊開發(fā)環(huán)境與云編譯環(huán)境的一致性。
在開始模塊開發(fā)之前,建議閱讀《開發(fā)模塊設計規(guī)范》(未處理)。
開發(fā)者開發(fā)的模塊務必遵守《模塊審核規(guī)范-Android》(未處理)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: