uniapp导入(android)jar

官方文档:开发者须知 | 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)

uniapp导入(android)jar_第1张图片

uniapp导入(android)jar_第2张图片

点击android-project这样可以看到其他文件

uniapp导入(android)jar_第3张图片

示例删除

 uniapp导入(android)jar_第4张图片

uniapp导入(android)jar_第5张图片

uniapp导入(android)jar_第6张图片

把插件的注册都删了

uniapp导入(android)jar_第7张图片

3.新建module(用于导入jar并生成插件提供uniapp使用)

 uniapp导入(android)jar_第8张图片uniapp导入(android)jar_第9张图片

 创建完会报错

 uniapp导入(android)jar_第10张图片

 找到module下的AndroidManifest.xml添加package="java下的包路径"

uniapp导入(android)jar_第11张图片

 注释 namespace点击try again,发现成功了

uniapp导入(android)jar_第12张图片

libs下可以放需要导入的jaruniapp导入(android)jar_第13张图片

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

uniapp导入(android)jar_第14张图片

 导入依赖:

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刷新依赖

uniapp导入(android)jar_第15张图片

4.编写插件类

uniapp导入(android)jar_第16张图片

uniapp导入(android)jar_第17张图片

 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')

uniapp导入(android)jar_第18张图片

 5.编写Uniapp

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

编写pages下的index.vue



6.生成本地资源放入android项目中

uniapp导入(android)jar_第19张图片

 找到资源文件

 

 复制到apps下

uniapp导入(android)jar_第20张图片

 7.注册Android Key

这边本人是看这边博客的,注册key的照着一步步写就可以了

uni-app官方demo(Android sdk):未配置appkey或配置错误。(uni原生插件开发,Android插件开发)_break妖的博客-CSDN博客_未配置appkey或配置错误

本人的配置 ,配置完点击右上角 Sync Now刷新gradle (如出现未配置app key,请检查下面这几处填写是否有误!!!!!)

uniapp导入(android)jar_第21张图片

 签名填写uniapp导入(android)jar_第22张图片

 uniapp导入(android)jar_第23张图片

8.运行

插上数据线连接手机,手机设置usb调试允许,android studio会识别到设备,这样就可以在android直接运行了

uniapp导入(android)jar_第24张图片

 如果出现报错请检查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: [])
}

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

手机运行成功截图

uniapp导入(android)jar_第25张图片

扫描

uniapp导入(android)jar_第26张图片

uniapp导入(android)jar_第27张图片

9.将andorid项目打包用uniapp调用

 uniapp导入(android)jar_第28张图片

 在项目文件夹里搜索aar

把aar复制到下面的android文件夹下

 uniapp导入(android)jar_第29张图片

 配置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
		}
	}
}

插件配置

uniapp导入(android)jar_第30张图片

 uniapp导入(android)jar_第31张图片

uniapp导入(android)jar_第32张图片

 10.uniapp运行

自定义基座---》直接打包

uniapp导入(android)jar_第33张图片

uniapp导入(android)jar_第34张图片

 uniapp导入(android)jar_第35张图片

 运行就行了,如果没有设备刷新试试,还是没有请检查手机是否连接上电脑,是否开启可调试,是否是文件传输。uniapp导入(android)jar_第36张图片

 运行成功!!!和上面的android运行结果是一样的,这里就不截图了。

更多细节请参考官方文档:开发者须知 | uni小程序SDK

你可能感兴趣的:(uni-app)