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包,具体教程贴在下方,可根据下面做适配
官方教程离线打包

相关推荐
xiangpanf7 小时前
Laravel 10.x重磅升级:五大核心特性解析
android
robotx9 小时前
安卓线程相关
android
消失的旧时光-194310 小时前
Android 面试高频:JSON 文件、大数据存储与断电安全(从原理到工程实践)
android·面试·json
dalancon11 小时前
VSYNC 信号流程分析 (Android 14)
android
dalancon11 小时前
VSYNC 信号完整流程2
android
dalancon11 小时前
SurfaceFlinger 上帧后 releaseBuffer 完整流程分析
android
用户693717500138412 小时前
不卷AI速度,我卷自己的从容——北京程序员手记
android·前端·人工智能
程序员Android12 小时前
Android 刷新一帧流程trace拆解
android
墨狂之逸才13 小时前
解决 Android/Gradle 编译报错:Comparison method violates its general contract!
android
阿明的小蝴蝶14 小时前
记一次Gradle环境的编译问题与解决
android·前端·gradle