最近公司有個(gè)項(xiàng)目,需要調(diào)用客戶提供的sdk掃描rfid,項(xiàng)目又是用uni開(kāi)發(fā)的,客戶提供的sdk只有Java版本,我發(fā)現(xiàn)uni是提供集成原生sdk的,所以研究了一下怎么使用,并記錄下來(lái)過(guò)程。
準(zhǔn)備
SDK 文件
下載
首先下載uniapp原生插件開(kāi)發(fā)SDK,下載地址見(jiàn)App離線SDK下載
?
?解壓
解壓后相關(guān)文件如下圖,我們只需要用到里面的示例工程HBuilder-HelloUniApp來(lái)進(jìn)行插件開(kāi)發(fā)就好
示例工程導(dǎo)入
- ?打開(kāi)Android Studio,導(dǎo)入上邊標(biāo)出的工程
插件開(kāi)發(fā)
Module?創(chuàng)建
選擇新建 Module
?
?選擇Android Library,然后下一步
文件配置
build.gradle文件打開(kāi)
將編輯器文件視圖切換到Project,選擇我們剛創(chuàng)建的Module目錄,然后打開(kāi)其根目錄下的build.gradle文件
?注意,后邊會(huì)顯示是哪個(gè)的,這里選我們剛才新建的rfid的build.gradle
?build.gradle文件配置
加入以下配置,dependencies里面的初始配置可以刪除或注釋掉,然后點(diǎn)擊同步
android {
sourceSets {
main(){
jniLibs.srcDirs = ["libs"]
}
}
}
//導(dǎo)入aar需要的配置
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
//必須添加的依賴
compileOnly 'androidx.recyclerview:recyclerview:1.0.0'
compileOnly 'androidx.legacy:legacy-support-v4:1.0.0'
compileOnly 'androidx.appcompat:appcompat:1.0.0'
compileOnly 'com.alibaba:fastjson:1.1.46.android'
compileOnly fileTree(include: ['uniapp-v8-release.aar'], dir: '../app/libs')
}
配置混淆文件
打開(kāi)Module根目錄下的proguard-rules.pro文件,在最后一行末尾加入以下代碼
?
-keep public class * extends io.dcloud.feature.uniapp.common.UniModule{*;}
?
?
創(chuàng)建Module類
新建類文件
在Module的項(xiàng)目文件夾下創(chuàng)建我們需要的類 這里我新建了RFIDTool,必須繼承UniModule
擴(kuò)展方法必須加上@UniJSMethod (uiThread = false or true) 注解。UniApp 會(huì)根據(jù)注解來(lái)判斷當(dāng)前方法是否要運(yùn)行在 UI 線程,和當(dāng)前方法是否是擴(kuò)展方法。
UniApp是根據(jù)反射來(lái)進(jìn)行調(diào)用 Module 擴(kuò)展方法,所以Module中的擴(kuò)展方法必須是 public 類型。
?
import io.dcloud.feature.uniapp.annotation.UniJSMethod;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;
public class RFIDTool extends UniModule {
@UniJSMethod(uiThread = true)
public void doTest(UniJSCallback callback){
try {
String result = "doTest success" ;
callback.invoke(result);
}catch (Exception e){
e.printStackTrace();
}
}
}
?數(shù)據(jù)返回
數(shù)據(jù)使用UniJSCallback結(jié)果回調(diào),具體是使用invoke調(diào)用JavaScript的回調(diào)方法返回?cái)?shù)據(jù)。更多可以參考官方文檔,invoke需要傳入一個(gè)Object類型的返回?cái)?shù)據(jù),:
插件調(diào)試
證書申請(qǐng)
獲取 appid
打開(kāi)uniapp項(xiàng)目,在根目錄下找到manifest.json文件,在基礎(chǔ)配置中獲取到appid
證書生成?
- 在uniapp 開(kāi)發(fā)者后臺(tái)應(yīng)用管理找到對(duì)應(yīng)項(xiàng)目點(diǎn)擊名稱進(jìn)去
- ?選擇證書管理,點(diǎn)擊創(chuàng)建證書,等待生成成功就好
- ?
?生成成功后,刷新頁(yè)面,下載證書,放入原生插件項(xiàng)目的app目錄下
?
證書配置
證書詳情
在后臺(tái)證書管理頁(yè)面,點(diǎn)擊證書詳情獲取證書信息以及證書密碼
?配置
?在插件項(xiàng)目app目錄下的build.gradle文件中,將信息依次填入文件中的signingConfigs.config配置項(xiàng),然后點(diǎn)擊右上角同步完成配置,具體如圖
?
?插件配置
注冊(cè)插件
在插件項(xiàng)目的app\src\main\assets目錄下打開(kāi)dcloud_uniplugins.json,在nativePlugins配置項(xiàng)中添加一項(xiàng)插件配置,type必須為module,因?yàn)槲覀兊牟寮莔odule類型;name統(tǒng)一跟隨插件名;具體如下所示:
{
"nativePlugins": [
{
"hooksClass": "",
"plugins": [
{
"type": "module",
"name": "rfid",
"class": "cn.com.vs.rfid.tools.RFIDTool"
}
]
}
]
}
引入插件
在插件項(xiàng)目app目錄下的build.gradle文件中,引入剛剛注冊(cè)的module
離線打包Key
sha1值獲取
在證書管理頁(yè)面,證書詳情里面獲取證書sha1值
從Android項(xiàng)目中獲取包名
?獲取離線打包key
- 在uniapp應(yīng)用后臺(tái)各平臺(tái)信息頁(yè)面,將上兩步獲取的值填入對(duì)應(yīng)輸入框,然后點(diǎn)擊保存,如圖:
?
- ?保存后會(huì)生成離線打包Key如下:
?
?
?配置離線打包Key
在插件項(xiàng)目app\src\main目錄下的AndroidManifest.xml文件中,將上一步生成的離線打包key配置到相應(yīng)位置,如圖
?然后打包插件
插件包、APP以及uniapp項(xiàng)目的androidSDK版本應(yīng)該統(tǒng)一一下,避免后續(xù)編譯打包出錯(cuò),如圖:
?
開(kāi)始編譯?
打開(kāi)Android Studio,在插件項(xiàng)目中,打開(kāi)右上角Gradle欄目,選擇插件開(kāi)發(fā)項(xiàng)目,選擇插件打開(kāi),依次點(diǎn)開(kāi)Tasks-other,然后雙擊assembleRelease即可進(jìn)行插件編譯,如圖:
?
獲取插件
編譯成功后,就可以在插件目錄的build/outputs/arr目錄下找到編譯好的插件
引入插件
創(chuàng)建目錄
在uniapp項(xiàng)目中創(chuàng)建nativeplugins目錄,然后根據(jù)插件名創(chuàng)建插件目錄,再在其下一級(jí)創(chuàng)建插件相應(yīng)系統(tǒng)目錄,然后將插件復(fù)制到該目錄,如圖:
?這里需要注意一點(diǎn),如果自己開(kāi)發(fā)的原生sdk中引用了jar包,可以直接打到arr中,如果sdk中引用了arr,需要放在和sdk相同的目錄中,并且記得在build中配置
?
創(chuàng)建插件包配置文件
在包目錄下創(chuàng)建package.json包信息文件,用于配置包信息,具體配置如下:
name 和 id建議與插件名統(tǒng)一
plugins中的配置與插件配置-注冊(cè)插件步驟中所填一樣
dependencies:如果原生插件引入了第三方SDK,需要在此參數(shù)中配置,具體可以參考相關(guān)官方文檔dependencies
package.json:
{
"name": "rfid",
"id": "rfid-module",
"version": "1.1",
"description": "插件描述信息",
"_dp_type":"nativeplugin",
"_dp_nativeplugin":{
"android": {
"plugins": [
{
"type": "module",
"name": "rfid-module",
"class": "cn.com.vs.rfid.tools.RFIDTool"
}
],
"integrateType": "aar",
"compileOptions": {
"sourceCompatibility": "1.8",
"targetCompatibility": "1.8"
},
"minSdkVersion": "23",
"useAndroidX": false,
"permissions": [
"android.permission.BLUETOOTH",
"android.permission.MANAGE_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE"
],
"parameters": {
}
}
}
}
引入插件
在uniapp項(xiàng)目的manifest.json文件中添加配置好的插件,至此引入完成,如圖:
?
打包自定義基座
新建基座打包
如圖,依次點(diǎn)擊三者進(jìn)行自定義基座打包配置
?
?基座打包配置
如圖三個(gè)輸入框,分別填入前面在uniapp后臺(tái)獲取的證書以及相關(guān)信息,然后執(zhí)行打包就好
?
基座運(yùn)行測(cè)試?
選擇運(yùn)行基座
運(yùn)行基座類型選擇自定義基座
?
運(yùn)行自定義基座
?基座打包成功后,運(yùn)行自定義基座到手機(jī)測(cè)試
?到這里,基本上就簡(jiǎn)單的完成了原生sdk的開(kāi)發(fā)與配置文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-406112.html
本文借鑒了uniapp Android 原生插件開(kāi)發(fā)(Module 擴(kuò)展為例·2022)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-406112.html
到了這里,關(guān)于uniapp集成Android原生sdk的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!