-
uniapp安卓官方SDKAndroid 離線SDK - 正式版 | uni小程序SDK
-
官方uni原生插件開發(fā)教程(android)網(wǎng)址:簡介 | uni小程序SDK
第一步,開發(fā)環(huán)境的準(zhǔn)備
-
下載uniapp安卓官方SDK待后面使用,解壓完成如下圖所示。

-
JAVA環(huán)境 jdk,打開cmd輸入java -version查看自己的jdk版本,官方文檔中提示jdk版本應(yīng)在1.7及以上,如果達(dá)不到標(biāo)準(zhǔn),自行下載相關(guān)版本配置好環(huán)境變量即可。

-
Android Studio 下載,下載地址下載 Android Studio 和應(yīng)用工具 - Android 開發(fā)者 ?|? Android Developers
第二步,創(chuàng)建自己的項目
打開AndroidStudio,在菜單欄選擇File>New>New Project,新建自定義項目

填寫項目名稱點擊完成

創(chuàng)建完成后為了方便使用我們轉(zhuǎn)為Project視圖,我這里是漢化后的

接下來創(chuàng)建模板,點擊菜單欄選擇File>New>New Module

選擇Android Library,填寫module name點擊完成

創(chuàng)建完畢后如圖所示

配置剛創(chuàng)建的Module(testplugin)的build.gradle信息

將dependencies下默認(rèn)生成的依賴注釋掉,添加uni-app所需庫依賴
//必須添加的依賴
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.2.83'

導(dǎo)入官方提供的uni插件原生項目


將UniPlugin-Hello-AS下的app>libs下的文件復(fù)制到自己項目的app>libs

回到剛剛創(chuàng)建的testplugin的build.gradle中,進(jìn)行導(dǎo)入aar需要的配置操作,在dependencies內(nèi)添加
compileOnly fileTree(include: ['uniapp-v8-release.aar'], dir: '../app/libs')

然后點擊Sync Now進(jìn)行同步處理

第三步,原生插件的開發(fā)
在我們所創(chuàng)建的module(testPlugin)>src>main>java>com.test.testPlugin創(chuàng)建類TestModule

-
Module 擴(kuò)展必須繼承 UniModule 類
-
擴(kuò)展方法必須加上@UniJSMethod (uiThread = false or true) 注解。UniApp 會根據(jù)注解來判斷當(dāng)前方法是否要運行在 UI 線程,和當(dāng)前方法是否是擴(kuò)展方法。
我只做了最簡單的返回插件調(diào)用成功的語句,可根據(jù)自己的業(yè)務(wù)邏輯自行編寫
package com.test.testplugin;
import com.alibaba.fastjson.JSONObject;
import io.dcloud.feature.uniapp.annotation.UniJSMethod;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;
public class TestModule extends UniModule {
@UniJSMethod(uiThread = false)
public void open(UniJSCallback callback) {
JSONObject data = new JSONObject();
data.put("code","插件調(diào)用成功");
callback.invoke(data);
}
}
第四步,注冊插件
在app>src>main目錄下創(chuàng)建assets文件夾



在app>src>main>assets目錄下創(chuàng)建dcloud_uniplugins.json文件



將官方dcloud_uniplugins.json復(fù)制過來進(jìn)行修改
dcloud_uniplugins.json說明
-
nativePlugins: 插件跟節(jié)點 可存放多個插件
-
hooksClass: 生命周期代理(實現(xiàn)AppHookProxy接口類)格式(完整包名加類名)
-
plugins: 插件數(shù)組
-
name : 注冊名稱
-
class : module 或 component 實體類完整名稱
-
type : module 或 component類型。
{
"nativePlugins":[
{
"hooksClass":"uni.dcloud.io.uniplugin_richalert.apphooks",
"plugins":[
{
"type":"module",
"name":"DCloud-RichAlert",
"class":"uni.dcloud.io.uniplugin_richalert.RichAlertModule"
}
]
}
]}

第五步,打包插件
打包插件到uniapp中使用,選擇右側(cè)Gradle>testplugin>Tasks>other>assembleRelease,雙擊assembleRelease等待系統(tǒng)module的arr文件。
注意:官方文檔中是選擇Gradle--->插件module--->Tasks--->build--->assembleRelease編譯module的aar文件


成功后在testPlugin>build>outputs>aar目錄下就可以找到相關(guān)插件了

第六步,HBuilderX導(dǎo)入和使用本地插件
新建uniapp項目如圖所示

按照官方目錄,創(chuàng)建目錄nativeplugins>插件文件夾名稱(最好和dcloud_uniplugins.json文件里填寫的name一樣)>android目錄下,將剛才打包的插件放到android下,創(chuàng)建package.json文件,放入到插件文件夾目錄下。

配置package.json,官方描述uni小程序SDK

注意:插件標(biāo)識id必須和name一致,plugins下的class是注冊插件的類名要填對(同dcloud_uniplugins.json文件中的class一致)。配置文件為 json 格式,不能有注釋,否則會解析失敗
最后在manifest.json下選擇我們開發(fā)的插件點擊確認(rèn)

在uniapp項目中獲取插件
通過使用uni.requireNativePlugin獲取插件對象。

第五步,運行項目
1.通過在線打包制作自定義基座來運行
選擇運行>運行到手機(jī)或模擬器>制作自定義調(diào)試基座

我這里使用自用證書(證書沒有的可自行申請),填寫完成后點擊打包

打自定義調(diào)試基座成功后,運行項目選擇自定義調(diào)試基座

然后運行到Android App基座

運行后點擊按鈕調(diào)用插件方法獲取到了插件返回值,調(diào)用插件成功,接下來可以進(jìn)行自己的業(yè)務(wù)開發(fā)

上述運行是離線打包制作自定義基座來運行也可以通過AndroidStudio來運行條件基本一致,所以前期先把共同條件配置好
2.通過AndroidStudio來運行
配置AndroidManifest.xml,app>src>main>AndroidManifest.xml

添加內(nèi)容到application節(jié)點,復(fù)制官方文檔中的配置。

<activity
android:name="io.dcloud.PandoraEntry"
android:configChanges="orientation|keyboardHidden|keyboard|navigation"
android:label="@string/app_name"
android:launchMode="singleTask"
android:hardwareAccelerated="true"
android:theme="@style/TranslucentTheme"
android:screenOrientation="user"
android:windowSoftInputMode="adjustResize"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<action android:name="android.intent.action.VIEW" />
<data android:scheme=" " />
</intent-filter>
</activity>
<activity
android:name="io.dcloud.PandoraEntryActivity"
android:launchMode="singleTask"
android:configChanges="orientation|keyboardHidden|screenSize|mcc|mnc|fontScale|keyboard|smallestScreenSize|screenLayout|screenSize|uiMode"
android:hardwareAccelerated="true"
android:permission="com.miui.securitycenter.permission.AppPermissionsEditor"
android:screenOrientation="user"
android:theme="@style/DCloudTheme"
android:windowSoftInputMode="adjustResize">
</activity>
如下圖在build.gradle(app)中添加引用資源

implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation fileTree(include: ['*.aar'], dir: 'libs')
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'com.facebook.fresco:fresco:1.13.0'
implementation "com.facebook.fresco:animated-gif:1.13.0"
//基座需要必須添加
implementation 'com.github.bumptech.glide:glide:4.9.0'
implementation 'com.alibaba:fastjson:1.1.46.android'
uni-app配置時需要在build.gradle中添加aaptOptions配置,在android中配置
aaptOptions {
additionalParameters '--auto-add-overlay'
ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"
}
然后點擊右上角的Sync Now。然后回到uniapp項目中,如圖在發(fā)行選項>原生APP-本地打包(L)中選擇生成本地打包App資源(R)

成功后找到如下所示文件

回到Android studio中在assets文件夾下創(chuàng)建apps文件夾,將本地打包資源處理后的文件(我的是__UNI__D95B2DF)拷貝到apps文件夾下。



然后在build.gradle(app)下添加,implementation project(':testPlugin')用來引入本地插件

將下載的SDK在目錄Android-SDK@3.6.18.81676_20230117\SDK\assets中找到data文件夾,拷貝到app>src>main>assets下


自定義基座的配置
在app目錄下,將assets下apps文件夾中的manifest.json文件和data文件夾中的dcloud_control.xml文件打開,確保manifest.json中的id和dcloud_control.xml中的appid一致。并設(shè)置根節(jié)點的debug和syncDebug為true

在app>src>main>res>values配置strings.xml文件,將manifest.json文件中的name配置到strings.xml文件中

登陸dcloud開發(fā)者中心找到我們創(chuàng)建的uniapp項目,打開項目點擊安卓云端證書-創(chuàng)建證書,等待生成證書。


生成證書后點擊下載證書我們將下載好的證書重命名為demoKeys.keystore,將在Android studio中自己項目的app下創(chuàng)建文件夾key>testaline,將demoKeys.keystore放在此目錄下如下圖所示

然后在dcloud中點擊各平臺信息點擊修改

包名為build.gradle(app)文件中android下的defaultConfig下的applicationId。SHA1、MD5、SHA256的值在剛申請的證書詳情中,注意對應(yīng)



修改后點擊保存,創(chuàng)建離線打包Key

在Android studio項目中app>src>main>AndroidManifest.xml文件中添加代碼,android:value的值是我們創(chuàng)建的appkey,將第二張圖紅色框中的appkey復(fù)制進(jìn)去就行。


在build.gradle(app)文件中添加如下代碼,紅線框為需要添加部分

然后切換為app,點擊運行到你連接的設(shè)備就行了,我這里是運行到雷電模擬器


插件開發(fā)成功接下來可以進(jìn)行自己的業(yè)務(wù)開發(fā),調(diào)用第三方SDK。我涉及的是調(diào)用SDK獲取稱重數(shù)據(jù),將SDK導(dǎo)入module下的libs目錄下

在build.gradle(:testPlugin)中引入jar文件

然后編寫自己的業(yè)務(wù)邏輯,原本怎么調(diào)用SDK的就怎么調(diào)用。
關(guān)于獲取上下文
在module下新建MyApplication類,輸入下列代碼。然后將lib5+導(dǎo)入到libs下

import android.content.Context;
import io.dcloud.application.DCloudApplication;
public class MyApplication extends DCloudApplication{
public static Context context;
public static Context getContext() {
return context;
}
@Override
public void onCreate() {
super.onCreate();
context = this;
}
}

在AndroidMainfest.xml中配置


參考文章:
-
uni原生插件開發(fā)流程一覽—Module擴(kuò)展
-
uniapp開發(fā)android原生插件(二):引入依賴、開發(fā)插件 - 學(xué)海無涯網(wǎng)文章文章來源:http://www.zghlxwxcb.cn/news/detail-553758.html
小白分享自己的開發(fā)過程,如有錯誤請各位大佬指出。文章來源地址http://www.zghlxwxcb.cn/news/detail-553758.html
到了這里,關(guān)于uniapp原生插件開發(fā)調(diào)用第三方SDK的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!