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

相关推荐
三声三视10 小时前
uni-app 鸿蒙端传参变成 [object Object]?顺着源码追到 ArkTS router 底层才搞明白
人工智能·ai·uni-app·aigc·ai编程·harmonyos
执明wa13 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio
404_coder14 小时前
源码视角下的 Android 开机流程:从 Zygote、SystemServer 到 Launcher
android
二流小码农14 小时前
鸿蒙开发:以登录案例了解代码架构MVVM
android·ios·harmonyos
用户693717500138415 小时前
从代码生产者到 AI 协作者:软件工程师的角色重构
android·前端·后端
GitLqr15 小时前
别在 Flutter 的 main() 里乱锁屏幕方向,小心 iPad 分屏功能被你搞没了
android·flutter·ios
sg_knight15 小时前
MySQL 存储过程详解:从入门到实战
android·数据库·mysql·database·dba·关系型数据库·db
爱笑鱼15 小时前
Binder(四):ioctl(BINDER_WRITE_READ) 之后,事务怎样到达目标进程?
android
AFinalStone15 小时前
Android 7系统休眠唤醒(二)开机全链路—BootROM到Launcher
android·电源管理·休眠唤醒