大背景:昨晚子公司的合作方来了两个技工,她们碰到难题。在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中。
跑出来,诶,你会辨认出,须要实用性AppKey,appid;
HBuilder,帐号登入,导入UniPlugin-Hello-AS下的uniapp实例工程建设源代码。接着如下表所示图操作方式
装箱天然资源,有点费时间
接着登入HBuilder控制面板
填写包名,证书SHA1(证书生成就不讲了),这个时候就有appid和Appkey了;
回到Androidstudio,打开app-AndroidManifest.xml,最底下
导出App天然资源
找到刚刚HBuilder导出的天然资源包,复制到app-src-main-assets-apps,注意是以appid文件夹文件夹名称,全部复制。原先的文件夹就删掉了。检查www路径下的manifest.jsonappid是否是刚才申请的;至此,就能运转了。
二、写应用程序
demo带了3个应用程序能点击体
以这个版本作为基础,把源代码浏览下来,为了避免多重提及库,间接挪代码到应用程序中集成,避开点坑。
新建uniplugin-zebra module
切换到Androidstudio在UniPlugin-Hello-AS工程建设下,新建module-library(uniplugin-zebra);
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” }
提及zbar
接着把barcodescaner项目的天然资源挪到应用程序中;
把上图三个module的天然资源复制到应用程序module下,结论如下表所示图
整理好res,实用性好AndroidManifest.xml;
编译没难题;
开始写应用程序。
新建TestModule.java继承UniModule,不要问为甚么,模仿的;
这边是跳转NativePageActivity,改成我们要的SimpleScannerActivity;
至此,搬砖完成一半。
装箱,实用性应用程序
装箱出aar,在HBuilderX实用性应用程序。也可在gradle生成;
切到HBuilderX,在工程建设下新建文件夹nativeplugins并创建应用程序文件夹uniplugin_zebra-debug;
重点实用性文件package.json,还有Android和ios应用程序包,这里没iOS跳过,在uniplugin_zebra-debug下创建android文件夹,把刚刚的aar文件放进来。结构如下表所示。
这边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”: { } } } }
接着在manifest.json选择本地原生应用程序
初始化应用程序;
打开pages/sample/ext-module.nvue;
导入应用程序:var zebraModule = uni.requireNativePlugin(“ZebraModule”)
初始化方法:zebraModule.gotoNativePage();
完成,如上装箱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规范中有提到
也就是应用程序中的jar,so都得丢进来咯;
2、o “J” field “peer” in class “Lnet/sourceforge/zbar/ImageScanner;”很明显就是混为一谈引起的,应用程序module没有实用性混为一谈,那就是基座app有实用性,果不其然
统统重新装箱。诶,是不是还没
至此,uniapp应用程序合作开发自学;有不足、欢迎指正;
感谢https://github.com/dm77/barcodescanner