uniapp导入(android)jar

官方文档:开发者须知 | uni小程序SDK

1.下载对应示例代码及工具

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;

/**
 * 这边需要继承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')

 5.编写Uniapp

新建一个项目选择普通模板

编写pages下的index.vue

<template>
	<view class="content">
		<div>
			<button type="primary" @click="testTips">testTips</button>
			<button type="success" @click="testScan">testScan</button>
		</div>
	</view>
</template>

<script>
	// 获取 module,里面填插件名刚刚安卓的dcloud_uniplugins.json文件注册的插件名称
	var sc = uni.requireNativePlugin("Uni-Plugin-Scan") 
	export default {
		onLoad() {
			
		},
		methods: {
			testTips() {
				//调用插件的tips方法
				var ret = sc.tips({
				},(res)=>{
					 uni.showToast({
						title:res.name
					})
				})
			},
			testScan(){
				//调用插件的scan方法
				var ret = sc.scan({
				},(res)=>{
					 uni.showToast({
						title:res.name
					})
				})
			}
		}
	}
</script>

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'

    /*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: [])
}

通过对比修改,不出意外是可以运行的。

手机运行成功截图

扫描

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

猜你喜欢

转载自blog.csdn.net/ysfengshu/article/details/128189362