【SDK】安卓开发--uniapp原生插件开发(无三方库)

提示:本将系统化将分享快速实现uniapp原生插件开发


前言

提示:将安卓原生的功能制作成uniapp可以调用的原生插件:

大家好,本文将以最简单的方式介绍uniapp安卓原生插件制作。博主在初次制作插件时遇到许多坑,可谓是绞尽脑汁。
故编写文章,分享一段极其简练的uniapp原生插件的制作流程,同时将容易遇到的坑写进去,期待大家可以在收藏本文后⭐,每次都可以快速制作原生插件。


提示:大家可以配合uniapp官网的文章同步去研究制作插件
uniapp官网原生插件开发教程

一、创建模块 (安卓端)

1、右击app主项目新建Module

 注意:一定要右击app去新建module,否则可能无法使用

2、填写Module信息

①左边的Templates选择Android Library.
②右边的Module name是module的名称,其他信息可以不用修改(Minimum SDK 可以根据需要更改为合适版本)
③点击finish进行创建

注意:要规范Module的命名,避免后期修改带来的麻烦

二、导入依赖 (安卓端)

1.引入app主项目依赖

①到uniapp官网下载demo提取app主项目libs中四个aar文件
uniapp安卓离线打包SDK项目工程
注意:记住是UniPlugin-Hello-As项目中的aar文件

②将官方demo中的四个aar文件导入到自己app主项目的libs文件夹中
提示:注意在uniapp官网的demo中找到以下四个文件:

在这里插入图片描述

③将以下依赖配置覆盖进build.gradle(app)文件中的dependencies代码块中()
提示:注意是app的build.gradle文件:

dependencies {
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation fileTree(dir: 'libs', include: ['*.aar'])

    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.appcompat:appcompat:1.0.0'

    /*uniapp所需库-----------------------开始*/
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    implementation 'com.facebook.fresco:fresco:1.13.0'
    implementation "com.facebook.fresco:animated-gif:1.13.0"
    /*uniapp所需库-----------------------结束*/
    // 基座需要,必须添加
    implementation 'com.github.bumptech.glide:glide:4.9.0'
    implementation 'com.alibaba:fastjson:1.1.46.android'

    // 添加uni-app插件
    implementation 'com.google.android.material:material:1.3.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'

    implementation project(":ScanQrModule")  //将新建module引入主app项目
}

2.引入Module依赖

④将以下配置代码覆盖进插件的build.gradle("刚刚新建的module名")文件的dependencies代码块中()
提示:注意是Module的build.gradle文件:

在这里插入图片描述

    //uniapp依赖
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    //必须添加的依赖
    compileOnly 'com.android.support:recyclerview-v7:28.0.0'
    compileOnly 'com.android.support:support-v4:28.0.0'
    compileOnly 'com.android.support:appcompat-v7:28.0.0'
    compileOnly 'com.alibaba:fastjson:1.1.46.android'
    //uniapp依赖
    compileOnly fileTree(include: ['uniapp-v8-release.aar'], dir: '../app/libs')

3.制作插件内容

①在Module包名下新建java文件,建议class名与Module名一致

在这里插入图片描述

②将类继承至UniModule。在调用的方法上写上@UniJSMethod。方法必须是public。数据可以通过callback回调到uniapp。

提示:这里非常重要,建议仔细观看。

在这里插入图片描述

三.添加混淆与打包插件 (安卓端)

1.添加混淆

①在Module的proguard-rules.pro文件下添加混淆配置
注意是插件的proguard-rules.pro文件

### uniapp插件混淆配置文件
-keep public class * extends io.dcloud.weex.AppHookProxy{*;}
-keep public class * extends io.dcloud.feature.uniapp.UniAppHookProxy{*;}
-keep public class * extends io.dcloud.feature.uniapp.common.UniModule{*;}
-keep public class * extends io.dcloud.feature.uniapp.ui.component.UniComponent{*;}

2.打包成aar

①在项目界面的右侧点击 Gradle > “Module” > other > assembleRelease。即可将本Module制作成aar文件
注意是刚新建的module的other文件夹
②在项目左侧,点击刚新建的Module(“ScanQrModule”) > build > outputs > aar > 插件名.aar。最终这个aar文件就是咱们需要的插件,这个aar文件同时还可以直接放到安卓原生开发中进行使用。
注意是刚新建的module的aar文件夹
至此,安卓端的开发就完成啦!

四、插件配置

1、创建插件文件包

在这里插入图片描述
① 在桌面新建一个文件夹命名为刚刚新建的Module的名称(插件的id)
② 文件夹一级目录下,新建文件夹android,新建配置文件package.json(名字不能改),以下是package.json文件示例

{
	"name": "ScanQrModule",   //插件的名称,建议与module名称一致
	"id": "ScanQrModule",    //插件的id,建议与module名称一致
	"version": "0.0.1",
	"description": "",
	"_dp_type":"nativeplugin",
	"_dp_nativeplugin":{
		"android": {
			"plugins": [
				{
					"type": "module",   //插件的类型,目前是module版
					"name": "ScanQrModule",  //module的名称
					"class": "cn.kk.scanqrmodule.ScanQrModule"   //module包名.类名(包名和class类名两部分)
				}
			],
			"integrateType": "aar",
			"minSdkVersion" : 21,
		}
	}
}

③在三级目录中,将打包出来的aar文件放入到android文件夹下

至此,插件就配置好了

五、uniapp使用插件 (UNIAPP端)

1、导入插件

在这里插入图片描述

①在uniapp项目左侧找到nativeplugins文件夹(没有就创建一个),如何将刚刚在桌面创建的插件包导入到该文件夹下
②在uniapp项目manifest.json文件中,选择刚导入的插件

2、打包插件进基座

①制作自定义基座。在uniapp项目主页点击 运行 > 制作自定义调试基座 >进入制作基座界面。选择公共测试证书进行打包
在这里插入图片描述

2、uniapp调用

① 利用 var testModule = uni.requireNativePlugin(“插件名称”) 将插件引入uniapp项目。然后就可以直接调用原生插件中的函数啦!
重要提示:Module 扩展的方法可以使用 int, double, float, String, Map, List ,com.alibaba.fastjson.JSONObject 类型的参数

在这里插入图片描述

总结

如果你是小白的话,对于你来说,uniapp原生插件开发是一个复杂的过程,大家一定要静下心来仔细研究每一步的含义。如果你是大佬的话请直接阅读标题即可完成整个流程!

大家可以收藏起来慢慢看🤩

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值