前言
當HBuilderX中提供的能力無法滿足App功能需求,需要通過使用Andorid/iOS原生開發(fā)實現(xiàn)時,可使用App離線SDK開發(fā)原生插件來擴展原生能力。這里舉兩個例子來說明具體的流程。
官網(wǎng)文檔地址:
https://nativesupport.dcloud.net.cn/NativePlugin/README
一、安裝開發(fā)工具
JAVA: jdk1.8
Android Studio: 下載地址Android Studio官網(wǎng) OR Android Studio中文社區(qū)
App離線SDK下載: 請下載2.9.8+版本的android平臺SDK
HBuilderX 下載地址: 官網(wǎng)下載
二、導入uni插件原生項目
安裝好開發(fā)工具后,先導入下載的Uniapp Demo中解壓后有一個叫UniPlugin-Hello-AS安卓項目
UniPlugin-Hello-AS工程請在App離線SDK中查找
打開Android Studio菜單選項File—>New—>Import Project。
不同的Android 的Sdk和gradle的版本是存在對應關系的,如果gradle sync失敗更換gradle版本或更換Android
Studio版本,不然的話會報各種錯誤
導入成功之后,等待一會,它會自動下載一些依賴的包,如過程中控制臺報錯,仔細去看,與下圖類似的就提示你缺SDK,問你要不要下載,你點Install,然后選擇accept,點擊next下載,完了error就沒了。
如果下載的依賴包速度很慢,可以在build.gradle中配置鏡像。
三、開發(fā)Module
可以根據(jù)自己的業(yè)務進行定制自己的功能。
主要分為兩類擴展:
1、Module 擴展 非 UI 的特定功能。
2、Component 擴展實現(xiàn)特別功能的 Native 控件。
在項目根目錄右擊new——》Module——》Android Library——》next
新建的module結構如下:
此時創(chuàng)建一個名為TestModule的類,繼承UniModule。
在新建好類之后,在app中assets的dcloud_uniplugins.json文件中加入如下代碼,將新建的類注冊進去:
{
"plugins": [
{
"type": "module",
"name": "szjplugin_testmodule",
"class": "com.example.szjplugin.testmodule.TestModule"
}
]
}
之后在Gradle Scripts的build.gradle(app)中添加如下代碼,將新建的模塊進行注冊進去:
// 添加uni-app插件
implementation project(':uniplugin_component')
implementation project(':uniplugin_module')
implementation project(':uniplugin_richalert')
implementation project(':szjplugin_testmodule')
之后在TestModule中寫一個add方法(用來計算兩個數(shù)的和)。 代碼如下:
@UniJSMethod
public void add(JSONObject json, UniJSCallback callback){
final int a = json.getIntValue("a");
final int b = json.getIntValue("b");
callback.invoke(new JSONObject(){{
put("code",200);
put("result",a+b);
}});
}
@UniJSMethod注解就和@Controller的作用是一樣的,上述代碼調(diào)用理解成JS代碼的話,可以看做是如下代碼:
Module.add({
},e => {
});
還需要進行配置,使項目可以調(diào)試,生成自定義基座,需要在根節(jié)點下添加debug="true"和syncDebug=“true”,如下圖:
此時Android
Studio就告一段落,接下來來到HbuilderX中,新建一個uniapp項目。并創(chuàng)建nativeplugins目錄(后面用到),結構如下:
在pages的index文件的index.nvue中的中添加代碼:
<button type="default" @click="testAdd">2+5=</button>
TestAdd方法如下:
testAdd(){
const testModule = uni.requireNativePlugin("szjplugin_testmodule")
testModule.add(
{
a:2,
b:5
},
e => {
uni.showToast({
title:JSON.stringify(e),
icon:"none"
})
}
)
}
}
uni.requireNativePlugin(“szjplugin_testmodule”)中的參數(shù)要和在app中assets的dcloud_uniplugins.json文件中加入的plugins相同
這時候就可以進行發(fā)行,本地打包
再回到Android Studio中,將下圖的文件刪除,替換成剛剛打包得到的文件。
此時在dcloud_control.xml中將appid換成打包得到的文件名稱。
一切就緒之后,就可以在Android Studio中進行調(diào)試了,也可以打斷點調(diào)試,確保集成到uniapp是沒有問題,免得一直重復打包調(diào)試
運行到手機效果如下:
四、開發(fā)Component
過程大致和Module類似,模仿一個原生輸入框,在TestModule相同的包下創(chuàng)建TestComponent類,繼承UniComponent,并使用super調(diào)用父類構造函數(shù)
public class TestComponent extends UniComponent<EditText> {
public TestComponent(UniSDKInstance instance, AbsVContainer parent, AbsComponentData componentData) {
super(instance, parent, componentData);
}
}
重寫方法:這個方法對組件進行初始化
@Override
protected EditText initComponentHostView(@NonNull Context context) {
return new EditText(context);
}
@UniComponentProp(name = "setText")
public void setText(String text){
getHostView().setText(text);
}
寫好之后不要忘記在app中assets的dcloud_uniplugins.json文件中加入如下代碼,將新建的類注冊進去。
就緒后再回到HbuilderX,在button的下方添加代碼使用組件:
<sn-input ref=”input” style="width: 400rpx;height: 60rpx;border-width: 2rpx;border-color: #2C405A;background-color: #2C405A"/>
<button type="default" @click="testSetText"></button>
testSetText(){
this.$refs.input.setText("hello uni plugin");
}
組件名稱要和app中assets的dcloud_uniplugins.json一致。之后本地打包,替換app下文件目錄,Android
Studio中運行。如下圖:
五、合并原生代碼到uniapp項目中
點擊右邊欄gradle進行打包,如下圖:
打包好之后在項目文件目錄中找到
在HbuilderX中新建文件夾,結構如下:
第二級文件名稱要和package.json中的id相同。Package.json如下:
{
"name":"Android插件開發(fā)Demo",
"id":"szj-textmodule",
"version":"1.0.0",
"description":"提供Android插件開發(fā)Demo",
"_dp_type":"nativeplugin",
"_dp_nativeplugin": {
"android": {
"integrateType":"aar",
"plugins":[
{
"type": "module",
"name": "szjplugin_testmodule",
"class": "com.example.szjplugin.testmodule.TestModule"
},
{
"type": "module",
"name": "sn-input",
"class": "com.example.szjplugin.testmodule.TestComponent"
}
]
}
}
}
文件好了之后,就可以在uniapp項目中看到原生的插件:
之后云打包,運行到安卓基座,就可以運行這個原生插件了,效果如下:
插件目前暫時不支持Kotlin。如果再必要情況下,必須使用Kotlin的時候,可以在package.json中加入dependences。當然我沒有試過,有興趣的小伙伴可以嘗試一下。
文章來源:http://www.zghlxwxcb.cn/news/detail-664652.html
總結
好了,當我們在開發(fā)中需要通過使用Andorid/iOS原生開發(fā)實現(xiàn)時,就可以使用App離線SDK開發(fā)原生插件來擴展原生能力了,覺得有用的話煩請收藏加關注??????
下面是小弟的公眾號有興趣的大哥可以關注一下??
文章來源地址http://www.zghlxwxcb.cn/news/detail-664652.html
到了這里,關于Uniapp安卓原生插件開發(fā)Demo的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!