一、准备工作
1.Android Studio 下载地址:Android Studio官网 OR Android Studio中文社区
3.App离线SDK下载:最新android平台SDK下载
4.JAVA环境 jdk Java Downloads | Oracle 打开官网下载jdk
下载后可自行修改安装路径,但要记住路径方便后期配置环境。
5.配置jdk环境变量,右击电脑属性找到高级系统设置,在系统变量中添加JAVA_HOME=安装jdk的安装目录(例:D:\Program Files\Java\jdk-18.0.1.1),在path变量中添加 .;%JAVA_HOME%\bin,新建classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar。配置完成后win+r打开cmd输入java -version 出现版本号说明环境变量配置成功。
二、配置项目
1.通过Dcloud官方文档下载离线SDK,然后找到项目中的plugin示例项目UniPlugin-Hello-AS,项目中已有示例module,方便依赖引用等。
2.项目打开后点击file-》new-》new module进入新建module界面
3.选择library输入module名和module包名,语言选择java,插件不支持Kotlin
4.在module中的build.gradle添加如下依赖
//必须添加的依赖
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'
compileOnly fileTree(include: ['uniapp-v8-release.aar'], dir: '../app/libs')
5.在app的build.gradle中引用插件
6.给项目配置appkey,如没有appkey请参考uniapp-android离线打包_qiuzh01的博客-CSDN博客android studio,uniapp,android本地打包,android离线打包,本地打包,离线打包,Hbuildhttps://blog.csdn.net/weixin_43858377/article/details/125006108如已有appkey请在app下的AndroidManifest.xml文件中配置appkey
三、插件开发
1.new一个java class文件
2.将避免混淆代码写入到module中的consumer-rules.pro文件中
-keep public class * extends io.dcloud.feature.uniapp.common.UniModule{*;}
3.给新建的插件文件写上逻辑
// 加法运算
@UniJSMethod(uiThread = false)
public void mathAdd(int a,int b, UniJSCallback callback) {
callback.invoke(a + b);
}
// 原生toast提示
@UniJSMethod(uiThread = false)
public void showToast(String msg, UniJSCallback callback) {
Toast.makeText(mWXSDKInstance.getContext(),msg,Toast.LENGTH_SHORT).show();
callback.invoke(msg);
}
注: 扩展方法必须加上@UniJSMethod (uiThread = false or true) 注解。UniApp 会根据注解来判断当前方法是否要运行在 UI 线程,和当前方法是否是扩展方法。
UniApp是根据反射来进行调用 Module 扩展方法,所以Module中的扩展方法必须是 public 类型。
4.确认在app中dcloud_uniplugins.json文件注册插件
这里的包名指的是插件的包名,可以在自己上边创建的java文件中找package。
5.打插件包。新版android studio默认是关闭Gradle Task任务自动化打包的 ,解决方案点击file->setting->Experimental面板中Do not build Gradle task list during Gradle sync选项勾选去掉就行了
然后右上角点击gradle,打开任务列表面板,在任务other中双击assembleRelease就开始打包插件了。
打包的插件包路径在插件下build->outputs->arr->xxx.arr
三、在uniapp中使用插件
1.首先找到nativeplugins目录,没有则新建。在目录中创建我们的本地插件目录,命名规范可参考官方原生开发者支持
2.在插件目录下新建package.json来配置插件信息
3.在package同级创建一个android目录和ios目录来存放打包好的插件包,具体结构如下
因为没有没有mac所以没有测试ios插件打包
4.将上边打的插件包放入android目录中,然后在页面中使用插件。
5.在某一个页面文件中引入插件uni.requireNativePlugin('插件id'),给引用赋值,现在我们就可以开始写入逻辑了。
<template>
<view class="content">
<input type="number" v-model="a" />
<input type="number" v-model="b" />
<button type="default" @click="showtoast">showtoast</button>
<button type="default" @click="add">加法</button>
</view>
</template>
<script>
// 引入插件
let andoridModule = uni.requireNativePlugin('Qiu-testModule');
export default {
data() {
return {
a: 1,
b: 2
}
},
methods: {
add() {
andoridModule.mathAdd(this.a, this.b, (e) => {
andoridModule.showToast('A+B=' + e);
});
},
showtoast() {
andoridModule.showToast('hello world!', (e) => {
console.log('showToast reuslt:', e);
});
}
}
}
</script>
<style>
.content { padding-top: 200rpx; }
</style>
6.配置好插件包后在manifest.json中使用插件
四、运行app
1.运行时如果真机安装失败(一般vivo、oppo手机出现)在gradle.properties文件中添加
android.injected.testOnly=false
2.真机运行前需要自定义app基座,不然我们运行是没有插件的。
3.运行时一定要选择app基座
4.运行到Android App基座,接下来就等待打包完成,就可以真机运行了
注:作者为小白一名,此文是本人在测试原生打包时实际过程,以及参考其他大佬文章。
另:此文章非商业用途,如有侵权请联系作者