官方文档:开发者须知 | uni小程序SDK
1.下载对应示例代码及工具
- JAVA环境 jdk1.8
- Android Studio 下载地址:Android Studio官网 OR Android Studio中文社区
- App离线SDK下载:请下载2.9.8+版本的android平台SDK
- HBuilderX 下载地址:官方下载地址
2.项目准备(将下载的项目SDK解压导入Android Studio)
点击android-project这样可以看到其他文件
示例删除
把插件的注册都删了
3.新建module(用于导入jar并生成插件提供uniapp使用)
创建完会报错
找到module下的AndroidManifest.xml添加package="java下的包路径"
注释 namespace点击try again,发现成功了
libs下可以放需要导入的jar
module-->build.gradle下引用app的jar和自己导入的jar
compileOnly fileTree(include: ['uniapp-v8-release.aar'], dir: '../app/libs')implementation fileTree(dir: '../uniplugin_scan/libs', include: ['*.aar', '*.jar'], exclude: [])
导入依赖:
compileOnly 'androidx.recyclerview:recyclerview:1.2.1'compileOnly 'androidx.legacy:legacy-support-v4:1.0.0'compileOnly 'com.alibaba:fastjson:1.1.46.android'
点击右上角 Sync Now刷新依赖
4.编写插件类
ScanModule
package com.example.uniplugin_scan;import android.content.Context;import com.alibaba.fastjson.JSONObject;import com.huayusoft.barcodeadmin.IScanCallBack;import com.raindi.scanner.RDManager;import com.taobao.weex.bridge.JSCallback;import io.dcloud.feature.uniapp.annotation.UniJSMethod;import io.dcloud.feature.uniapp.common.UniModule;public class ScanModule extends UniModule { @UniJSMethod(uiThread = true) public void tips(JSONObject options, JSCallback callback){ if(callback != null) { JSONObject data = new JSONObject(); data.put("name", "调用插件成功"); //回调返回 callback.invoke(data); } } @UniJSMethod(uiThread = true) public void scan(JSONObject options, JSCallback callback){ if(callback != null) { JSONObject data = new JSONObject(); //导入jar包的回调定义 IScanCallBack callback1 =new IScanCallBack.Stub() { @Override public void onSuccess(final String bean) { //接收条码服务返回的数据 data.put("name", bean); System.out.println(bean); callback.invoke(data); } @Override public void onFiled(int errorCode) { //条码服务出错的数据 data.put("name", "服务出错"); } }; //创建扫描对象 RDManager instance = RDManager.getInstance(); //获得窗口 Context context = this.mWXSDKInstance.getContext(); //绑定扫描 boolean b = instance.bindScannerService(context,callback1 ); //初始化扫描 instance.init(callback1); //开启电源 instance.powerOn(); //开始扫描 instance.doScan(); } } }
插件注册app--》src--》asset-->dcloud_uniplugins.json
{ "nativePlugins": [ { "plugins": [ { "type": "module", "name": "Uni-Plugin-Scan", "class": "com.example.uniplugin_scan.ScanModule" } ] } ]}
依赖添加插件 app--》build.gradle
implementation project(':uniplugin_scan')
5.编写Uniapp
新建一个项目选择普通模板
编写pages下的index.vue
6.生成本地资源放入android项目中
找到资源文件
复制到apps下
7.注册Android Key
这边本人是看这边博客的,注册key的照着一步步写就可以了
uni-app官方demo(Android sdk):未配置appkey或配置错误。(uni原生插件开发,Android插件开发)_break妖的博客-CSDN博客_未配置appkey或配置错误
本人的配置 ,配置完点击右上角 Sync Now刷新gradle (如出现未配置app key,请检查下面这几处填写是否有误!!!!!)
签名填写
8.运行
插上数据线连接手机,手机设置usb调试允许,android studio会识别到设备,这样就可以在android直接运行了
如果出现报错请检查build.gradle配置(特别是版本和依赖),下面是本人的build.gradle配置
app build:gradle
apply plugin: 'com.android.application'android { compileSdkVersion 33 buildToolsVersion '28.0.3' defaultConfig { applicationId "com.android.UniPlugin" minSdkVersion 21 targetSdkVersion 33 //建议此属性值设为21 io.dcloud.PandoraEntry 作为apk入口时 必须设置 targetSDKVersion>=21 沉浸式才生效 versionCode 1 versionName "1.0" multiDexEnabled true ndk { abiFilters 'x86','armeabi-v7a' } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } signingConfigs { config { keyAlias '__uni__****请填写自己的别名' keyPassword 'key的密码' storeFile file('对应的签名文件') storePassword 'stroe密码' v1SigningEnabled true v2SigningEnabled true } } buildTypes { release { signingConfig signingConfigs.config zipAlignEnabled true minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { signingConfig signingConfigs.config zipAlignEnabled true minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } //使用uniapp时,需复制下面代码 aaptOptions { additionalParameters '--auto-add-overlay' //noCompress 'foo', 'bar' ignoreAssetsPattern "!.svn:!.git:.*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~" } }repositories { flatDir { dirs 'libs' }}dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.aar']) implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.appcompat:appcompat:1.0.0' implementation 'androidx.recyclerview:recyclerview:1.0.0' implementation 'com.facebook.fresco:fresco:1.13.0' implementation "com.facebook.fresco:animated-gif:1.13.0" // 基座需要,必须添加 implementation 'com.github.bumptech.glide:glide:4.9.0' implementation 'com.alibaba:fastjson:1.1.46.android' // 添加uni-app插件 implementation project(':uniplugin_scan')// implementation project(':uniplugin_component')// implementation project(':uniplugin_module')// implementation project(':uniplugin_richalert')}
module(uniplugin_scan) build.gradle
plugins { id 'com.android.library'}android { compileSdk 29// namespace 'com.example.uniplugin_scan'// compileSdkVersion 32 defaultConfig { minSdkVersion 19 targetSdkVersion 33 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles "consumer-rules.pro" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } buildToolsVersion '28.0.3'}dependencies { implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'com.google.android.material:material:1.5.0' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' //必须导入的依赖 compileOnly 'androidx.recyclerview:recyclerview:1.1.0' compileOnly 'androidx.legacy:legacy-support-v4:1.0.0' compileOnly 'com.alibaba:fastjson:1.1.46.android' //导入jar compileOnly fileTree(include: ['uniapp-v8-release.aar'], dir: '../app/libs') implementation fileTree(dir: '../uniplugin_scan/libs', include: ['*.aar', '*.jar'], exclude: [])}
通过对比修改,不出意外是可以运行的。
手机运行成功截图
扫描
9.将andorid项目打包用uniapp调用
在项目文件夹里搜索aar
把aar复制到下面的android文件夹下
配置package.json(用记得删注释,这个不能写错,写错会导致后面插件识别不到)
{"name": "AndroidScan", //插件名 "id": "Uni-Plugin-Scan", //id "version": "0.0.2", "description": "安卓条码扫描", "_dp_type":"nativeplugin", "_dp_nativeplugin":{ "android": { "plugins": [ { "type": "module", "name": "Uni-Plugin-Scan", //插件名称一般和id相同或以id为前缀 "class": "com.example.uniplugin_scan.ScanModule" //andorid插件对应类的路径 } ],"integrateType": "aar" //类型分为jar和aar}}}
插件配置
10.uniapp运行
自定义基座---》直接打包
运行就行了,如果没有设备刷新试试,还是没有请检查手机是否连接上电脑,是否开启可调试,是否是文件传输。
运行成功!!!和上面的android运行结果是一样的,这里就不截图了。
更多细节请参考官方文档:开发者须知 | uni小程序SDK
来源地址:https://blog.csdn.net/ysfengshu/article/details/128189362