点击android-project这样可以看到其他文件
示例删除
把插件的注册都删了
创建完会报错
找到module下的AndroidManifest.xml添加package="java下的包路径"
注释 namespace点击try again,发现成功了
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刷新依赖
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;
/**
* 这边需要继承UniModule
*/
public class ScanModule extends UniModule {
/**
* uiThread = false run JS thread 使用js线程
* 测试提示
* UniJSMethod 这个注册是uni通过反射可以获得对接的方法
* @param options json参数
* @param callback 回调
*/
@UniJSMethod(uiThread = true)
public void tips(JSONObject options, JSCallback callback){
if(callback != null) {
JSONObject data = new JSONObject();
data.put("name", "调用插件成功");
//回调返回
callback.invoke(data);
}
}
/**
* uiThread = true run ui thread 一般用于非耗时操作
* 使用第三方包实现扫描条码
* @param options json参数
* @param callback 回调
*/
@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')
新建一个项目选择普通模板
编写pages下的index.vue
找到资源文件
复制到apps下
这边本人是看这边博客的,注册key的照着一步步写就可以了
uni-app官方demo(Android sdk):未配置appkey或配置错误。(uni原生插件开发,Android插件开发)_break妖的博客-CSDN博客_未配置appkey或配置错误
本人的配置 ,配置完点击右上角 Sync Now刷新gradle (如出现未配置app key,请检查下面这几处填写是否有误!!!!!)
插上数据线连接手机,手机设置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'
/*uniapp所需库-----------------------开始*/
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'com.facebook.fresco:fresco:1.13.0'
implementation "com.facebook.fresco:animated-gif:1.13.0"
/*uniapp所需库-----------------------结束*/
// 基座需要,必须添加
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: [])
}
通过对比修改,不出意外是可以运行的。
手机运行成功截图
扫描
把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
}
}
}
插件配置
自定义基座---》直接打包
运行就行了,如果没有设备刷新试试,还是没有请检查手机是否连接上电脑,是否开启可调试,是否是文件传输。
运行成功!!!和上面的android运行结果是一样的,这里就不截图了。
更多细节请参考官方文档:开发者须知 | uni小程序SDK