Uniapp——开发Android插件教程

文章目录

提示:当我们Uniapp无法实现时需要使用到原生API

1.创建module;




提示:这里自己创建的插件,默认是一个App工程目录,编译之后是一个APK,并不是一个arr或者jar

如图所示:可以看到,插件包样式页变了;

这里testAsyncFunc方法,可以执行通过Uniapp代码中执行调用穿参回调,当然你也可以在方法里面执行跳转原生界面代码,你可以自行尝试;

1.1添加dcloud_uniplugins.json文件

提示:放到assets/dcloud_uniplugins.json

bash 复制代码
{
  "nativePlugins": [
    {
      "plugins": [
        {
          "type": "module",
          "name": "testModule",
          "class": "com.zy.testmodule.DeviceModule"
        }
      ]
    }
  ]
}

2.uniapp中使用教程

javascript 复制代码
static testModule = uni.requireNativePlugin("TestModule");

this.testModule.testAsyncFunc({'key':'原生端获取'}, (value) => {
				console.log('testAsyncFunc 回调:', value)
			})

下面完整js代码:

javascript 复制代码
<template>
	<div>
		<button type="primary" @click="testAsyncFunc">testAsyncFunc</button>
		<button type="primary" @click="testSyncFunc">testSyncFunc</button>
		<button type="primary" @click="gotoNativePage">跳转原生Activity</button>
	</div>
</template>

<script>
	// 获取 module 
	var testModule = uni.requireNativePlugin("TestModule")
	const modal = uni.requireNativePlugin('modal');
	export default {
		onLoad() {
			plus.globalEvent.addEventListener('TestEvent', function(e){
				modal.toast({
					message: "TestEvent收到:"+e.msg,
					duration: 1.5
				});
			});
		},
		methods: {
			testAsyncFunc() {
				// 调用异步方法
				testModule.testAsyncFunc({
						'name': 'unimp',
						'age': 1
					},
					(ret) => {
						modal.toast({
							message: ret,
							duration: 1.5
						});
					})
			},
			testSyncFunc() {
				// 调用同步方法
				var ret = testModule.testSyncFunc({
					'name': 'unimp',
					'age': 1
				})
				modal.toast({
					message: ret,
					duration: 1.5
				});
			},
			gotoNativePage() {
				testModule.gotoNativePage();
			}
		}
	}
</script>

3.HBuiderX打包项目资源;

注意:将这一块移动到原生项目assets/apps/__UNI__3F040目录下

如图所示:

提示:data目录下也需要放入相应的dcloud_control.xml、dcloud_error.html、dcloud_properties.xml三个文件;

以下是具体代码;
dcloud_control.xml

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
这里是开启debug模式
<hbuilder debug="true" syncDebug="true">
这里是打正式包时使用
<!--<hbuilder>-->
    <apps>
    appid这里填写你项目的__UNI__3F40
        <app appid="__UNI__3F40" appver="1.0.0" />
    </apps>
</hbuilder>

dcloud_properties.xml

这里填写你项目当中所用到的第三方库就好了,不需要就删掉,否则运行后会有意想不到的提示;

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<properties>
    <features>
        <feature name="Contacts" value="io.dcloud.feature.contacts.ContactsFeatureImpl" />
        <feature name="Console" value="io.dcloud.feature.pdr.LoggerFeatureImpl" />
        <feature name="Device" value="io.dcloud.feature.device.DeviceFeatureImpl" />
        <feature name="File" value="io.dcloud.js.file.FileFeatureImpl" />
        <feature name="Proximity" value="io.dcloud.feature.sensor.ProximityFeatureImpl" />
        <feature name="Storage" value="io.dcloud.feature.pdr.NStorageFeatureImpl" />
        <feature name="Cache" value="io.dcloud.feature.pdr.CoreCacheFeatureImpl" />
        <feature name="Invocation" value="io.dcloud.invocation.Invocation" />
        <feature name="Navigator" value="io.dcloud.feature.ui.navigator.NavigatorUIFeatureImpl" />
        <feature name="NativeUI" value="io.dcloud.feature.ui.nativeui.NativeUIFeatureImpl" />
        <feature name="UI" value="io.dcloud.feature.ui.UIFeatureImpl">
            <module name="Navigator" value="io.dcloud.feature.ui.NavView" />
        </feature>
        <feature name="Gallery" value="io.dcloud.js.gallery.GalleryFeatureImpl" />
        <feature name="Downloader" value="io.dcloud.net.DownloaderFeatureImpl" />
        <feature name="Uploader" value="io.dcloud.net.UploadFeature" />
        <feature name="Audio" value="io.dcloud.feature.audio.AudioFeatureImpl" />
        <feature name="Runtime" value="io.dcloud.feature.pdr.RuntimeFeatureImpl" />
        <feature name="XMLHttpRequest" value="io.dcloud.net.XMLHttpRequestFeature" />
        <feature name="Accelerometer" value="io.dcloud.feature.sensor.AccelerometerFeatureImpl" />
        <feature name="Orientation" value="io.dcloud.feature.sensor.OrientationFeatureImpl" />
        <feature name="NativeObj" value="io.dcloud.feature.nativeObj.FeatureImpl" />
        <feature name="Geolocation" value="io.dcloud.js.geolocation.GeolocationFeatureImpl" />
        <feature name="Stream" value="io.dcloud.appstream.js.StreamAppFeatureImpl" />
        <feature name="Zip" value="io.dcloud.feature.pdr.ZipFeature" />
        <feature name="Speech" value="io.dcloud.feature.speech.SpeechFeatureImpl" />
        <feature name="VideoPlayer" value="io.dcloud.media.MediaFeatureImpl" />
        <feature name="Sqlite" value="io.dcloud.feature.sqlite.DataBaseFeature" />
        <feature name="Payment" value="io.dcloud.feature.payment.PaymentFeatureImpl">
            <module name="Payment-Weixin" value="io.dcloud.feature.payment.weixin.WeiXinPay"/>
        </feature>
        <feature name="Payment" value="io.dcloud.feature.payment.PaymentFeatureImpl">
            <module name="AliPay" value="io.dcloud.feature.payment.alipay.AliPay"/>
        </feature>
        <feature name="Share" value="io.dcloud.share.ShareFeatureImpl">
            <module name="Weixin" value="io.dcloud.share.mm.WeiXinApiManager"/>
        </feature>
    </features>
    <services></services>
</properties>

小结

提示:以上是属于App离线打包,还需要配置一些Uniapp基座所需要的aar包,具体教程贴在下方,可根据下面做适配
官方教程离线打包

相关推荐
Lei活在当下1 小时前
【Perfetto从入门到精通】1. 初识 Perfetto
android·性能优化·架构
用户41659673693552 小时前
深度解析 Android 权限机制:从清单注册到 Android 14 适配实战
android
Nerve3 小时前
GalleryPicker:一个基于 Android 官方 Photo Picker API 封装的现代图片/视频选择库
android
伐尘4 小时前
【MySQL】MySQL 有效利用 profile 分析 SQL 语句的执行过程
android·sql·mysql
Haha_bj4 小时前
七、Kotlin——扩展(Extensions)
android·kotlin
urkay-4 小时前
Android getDrawingCache 过时废弃
android·java·开发语言·kotlin·iphone·androidx
技术摆渡人5 小时前
Android 14系统深度分析
android·linux·驱动开发
帅得不敢出门5 小时前
Android8 Framework实现Ntp服务器多域名轮询同步时间
android·java·服务器·python·framework·github
走在路上的菜鸟5 小时前
Android学Dart学习笔记第十一节 错误处理
android·笔记·学习·flutter