一、下載原生開發SDK
? ? ? ??? ?Android 離線SDK - 正式版 | uni小程序SDK (dcloud.net.cn)、
? ? ? ? ? ?https://nativesupport.dcloud.net.cn/AppDocs/download/android.html
? ? ? ? ? 將開發uniappa原生android的插件解壓到ben本地目錄,目錄結構如下:
? ? ? ? ? 接下就可以使用?UniPlugin-Hello-AS這個工程制作原生插件
二、制作原生插件
1、androidstudio打開UniPlugin-Hello-AS
? ? ? ? 調整好本地androidsdk和gradle環境進行下一步
2、創建一個library的module
3、配置gradle依賴
? ? ? ? 將uniplugin_modle模塊下的gradle依賴全部拷貝到新建的mylibrary的gradle中
compileOnly fileTree(dir: 'libs', include: ['*.jar'])compileOnly fileTree(dir: '../app/libs', include: ['uniapp-v8-release.aar'])compileOnly 'androidx.recyclerview:recyclerview:1.0.0'compileOnly 'androidx.legacy:legacy-support-v4:1.0.0'compileOnly 'androidx.appcompat:appcompat:1.0.0'implementation 'com.alibaba:fastjson:1.2.83'implementation 'com.facebook.fresco:fresco:1.13.0'
4、編寫android代碼
/*** 提供給uni的js調用的類需要繼承 io.dcloud.feature.uniapp.common.UniModule
* 這里定義的java類名就是后面uniapp調用的插件名稱
*/
public class MyLibraryPlugin extends UniModule {/*** 暴露一個給js調用的方法* UniJSMethod注解標記是否需要主線程調用* @return*/@UniJSMethod(uiThread = false)public String getTimeFromNative(){SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);return "get time from native " + sdf.format(new Date());}}
5、打包aar文件
? ? ? ? ?進入到工程的根目錄,執行assembleRelease命令
./gradlew mylibrary:assembleRelease
? ? ? ? 在build->outputs->aar提取aar文件
? ? ? 這樣就生成了一個名為mylibrary-release.aar的插件
6、編寫插件打包配置package.json
{ "name": "MyLibraryPlugin", "id": "MyLibraryPlugin", "version": "1.0", "description": "uniapp原生android插件", "_dp_type":"nativeplugin", "_dp_nativeplugin":{ "android": { "plugins": [ { "type": "module","name": "SunMiUtilsService","class": "com.example.mylibrary.MyLibraryPlugin"}], "integrateType": "aar", "minSdkVersion": "21" } }
}
? ? ? ?這樣package.json文件就配置好了?
三、uniapp集成插件
?1、導入原生插件
? ? ? ? 在uniapp項目目錄下創建一個名為nativeplugins的文件夾,在nativeplugins目錄下創建目錄以插件名稱MyLibraryPlugin命名,在MyLibraryPlugin插件目錄下創建一個android目錄,將mylibrary-release.aar插件拷貝進去,在android的統計目錄中獎package.json文件拷貝進去,整體目錄結構如下:

2、在manifest.json中配置插件
3、測試代碼
methods: {clickNative(){const libPlugin = uni.requireNativePlugin("MyLibraryPlugin");uni.showModal({title:'提示',content: libPlugin.getTimeFromNative(),})},
}
? ? ? ? ?注意:新引入插件一定要重新對自定義基座進行打包,不然插件引入會失效
? ? ?