记一次Uniapp-插件学习之旅

2023-05-26 0 976

大背景:昨晚子公司的合作方来了两个技工,她们碰到难题。在uniapp中提及他们合作开发的应用程序,应用程序中包涵了硬体电子设备供应商给的Androidsdk,sdk中包涵了so库,结论App中初始化失利。再者收起的其原因她们也没说我(估算也要学拿源代码设计图增容看logcat);我给了她们两个结点去逐一摸查:1、so库是不是被装箱进来;2、logcat具体内容抛甚么极度;3、混为一谈;

她们也有问其它Android合作开发者,说是uniapp这类就不全力支持so库;谁知,是不是说也是个虚拟化架构、更何况咱也全力支持应用程序合作开发,是不是可能将是架构这类的难题。那就突发奇想试一试,以后没碰触过,刚好自学自学。

先看讲义咯。非官方文件格式;PS:SDK在玒盘,这个浏览速度,没团体会员的能提早浏览,天然资源已上载能间接浏览SDK浏览

工具预备出来:HBuilder X,Android studio 4.x;

与此同时要预备两个HBuilder帐号;登入控制面板(实用性appid之类重要信息

一、运转非官方demo

先把UniPlugin-Hello-AS工程建设导入到AndroidStudio中。

记一次Uniapp-插件学习之旅
记一次Uniapp-插件学习之旅

跑出来,诶,你会辨认出,须要实用性AppKey,appid;

HBuilder,帐号登入,导入UniPlugin-Hello-AS下的uniapp实例工程建设源代码。接着如下表所示图操作方式

记一次Uniapp-插件学习之旅
记一次Uniapp-插件学习之旅

装箱天然资源,有点费时间

记一次Uniapp-插件学习之旅
记一次Uniapp-插件学习之旅

接着登入HBuilder控制面板

记一次Uniapp-插件学习之旅
记一次Uniapp-插件学习之旅

填写包名,证书SHA1(证书生成就不讲了),这个时候就有appid和Appkey了;

记一次Uniapp-插件学习之旅
记一次Uniapp-插件学习之旅

回到Androidstudio,打开app-AndroidManifest.xml,最底下

<meta-data android:name=”dcloud_appkey” android:value=”替换成APPKEY” />

导出App天然资源

找到刚刚HBuilder导出的天然资源包,复制到app-src-main-assets-apps,注意是以appid文件夹文件夹名称,全部复制。原先的文件夹就删掉了。检查www路径下的manifest.jsonappid是否是刚才申请的;至此,就能运转了。

二、写应用程序

demo带了3个应用程序能点击体

这个版本作为基础,把源代码浏览下来,为了避免多重提及库,间接挪代码到应用程序中集成,避开点坑。

新建uniplugin-zebra module

切换到Androidstudio在UniPlugin-Hello-AS工程建设下,新建module-library(uniplugin-zebra);

记一次Uniapp-插件学习之旅
记一次Uniapp-插件学习之旅

build.gradle实用性如下表所示

apply plugin: com.android.library android { compileSdkVersion 29 defaultConfig { minSdkVersion 16 targetSdkVersion 28 versionCode 1 versionName “1.0” ndk { abiFilters armeabi,armeabi-v7a,arm64-v8a,mips,mips64,x86_64,x86 }//zbra全力支持的abi架构 testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(proguard-android-optimize.txt), proguard-rules.pro } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { //jar包 implementation fileTree(dir: libs, include: [*.jar]) compileOnly fileTree(dir: ../app/libs, include: [uniapp-v8-release.aar]) // implementation me.dm7.barcodescanner:zbar:1.5 compileOnly com.alibaba:fastjson:1.1.46.android 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” }

记一次Uniapp-插件学习之旅

提及zbar

接着把barcodescaner项目的天然资源挪到应用程序中;

记一次Uniapp-插件学习之旅
记一次Uniapp-插件学习之旅

把上图三个module的天然资源复制到应用程序module下,结论如下表所示图

记一次Uniapp-插件学习之旅
记一次Uniapp-插件学习之旅

整理好res,实用性好AndroidManifest.xml;

me.dm7.barcodescanner

编译没难题;

开始写应用程序。

新建TestModule.java继承UniModule,不要问为甚么,模仿的;

记一次Uniapp-插件学习之旅
记一次Uniapp-插件学习之旅

这边是跳转NativePageActivity,改成我们要的SimpleScannerActivity;

至此,搬砖完成一半。

装箱,实用性应用程序

装箱出aar,在HBuilderX实用性应用程序。也可在gradle生成;

记一次Uniapp-插件学习之旅
记一次Uniapp-插件学习之旅

切到HBuilderX,在工程建设下新建文件夹nativeplugins并创建应用程序文件夹uniplugin_zebra-debug;

重点实用性文件package.json,还有Android和ios应用程序包,这里没iOS跳过,在uniplugin_zebra-debug下创建android文件夹,把刚刚的aar文件放进来。结构如下表所示。

记一次Uniapp-插件学习之旅
记一次Uniapp-插件学习之旅

这边package.json内容:具体内容编写规则可言看文件格式package.json规范

{ “name”: “uniplugin_zebra”, “id”: “uniplugin_zebra-debug”, “version”: “1.0.0”, “description”: “zebra”, “_dp_type”:”nativeplugin”, “_dp_nativeplugin”:{ “android”: { “plugins”: [ { “type”: “module”, “name”: “ZebraModule” , “class”: “com.janbo.zebra.TestModule” } ], “hooksClass”: “”, “integrateType”: “aar”, “dependencies”: [ ], “compileOptions”: { //可选,Java编译参数实用性 “sourceCompatibility”: “1.8”, “targetCompatibility”: “1.8” }, “abis”: [//”可选, 全力支持的abi类型, 可取值armeabi-v7a|arm64-v8a|x86″,这边就全干上不管了 “armeabi|armeabi-v7a|arm64-v8a|mips|mips64|x86_64|x86” ], “minSdkVersion”: “16”, “useAndroidX”: false, //可选,是否兼容使用AndroidX “permissions”: [ “android.permission.CAMERA” ], “parameters”: { } } } }

记一次Uniapp-插件学习之旅

接着在manifest.json选择本地原生应用程序

记一次Uniapp-插件学习之旅
记一次Uniapp-插件学习之旅

初始化应用程序;

打开pages/sample/ext-module.nvue;

导入应用程序:var zebraModule = uni.requireNativePlugin(“ZebraModule”)

初始化方法:zebraModule.gotoNativePage();

记一次Uniapp-插件学习之旅
记一次Uniapp-插件学习之旅

完成,如上装箱App天然资源,到AS中替换,运转,不出甚么意外的话,点击按钮会闪退,收起,要嘛加载不到so库,要嘛no “J” field “peer” in class “Lnet/sourceforge/zbar/ImageScanner;” or its superclasses;

at net.sourceforge.zbar.ImageScanner.init(Native Method)

;没关系就是来解决难题的,

解决难题

1、so加载不到,要嘛没装箱进来,要嘛没有对应的库。细心的同学可能将就辨认出了,package.json规范中有提到

记一次Uniapp-插件学习之旅
记一次Uniapp-插件学习之旅

也就是应用程序中的jar,so都得丢进来咯;

2、o “J” field “peer” in class “Lnet/sourceforge/zbar/ImageScanner;”很明显就是混为一谈引起的,应用程序module没有实用性混为一谈,那就是基座app有实用性,果不其然

minifyEnabled true改为minifyEnabled false;

统统重新装箱。诶,是不是还没

至此,uniapp应用程序合作开发自学;有不足、欢迎指正;

感谢https://github.com/dm77/barcodescanner

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务