uniapp生成android,集成商汤科技的android的sdk识别身份证信息
二、开发思路uniapp使用Dcloudx软件的“原生打包”,然后集成到android项目中(参考了DCloudx的例子),发布成android包。
三、遇到的问题 1、uniapp与android Studio集成问题- uniapp集成androiduniapp和android间进行数据传输,方法调用uniapp离线打包集成到android studio中运行到真机提示app key不正确问题
- android包升级到androidx包,报错问题页面需要在AndroidManifest.xml中声明android中各页面数据返回问题打包apk
- 图片的byte[]数组转base64nvue样式扭曲问题,flex布局的使用
- 生成Android签名证书:Android平台签名证书(.keystore)生成指南申请AppKey参考Hbuildx中提供的App离线打包SDK,进行配置android端将HBuilderX中的项目导出,将导出的资源复制到assets->apps下,如下图所示:
修改build.gradle中signingConfigs中的证书数据,将证书拷贝到相应位置
signingConfigs {
config {
keyAlias 'ecodeocrtests'// 别名
keyPassword 'admin1'// 密码
storeFile file('test.keystore')// key路径
storePassword 'admin1'// 密码
v1SigningEnabled true
v2SigningEnabled true
}
}
- 在build.gradle中引入需要导入sdk的arr文件,引入必要的jar包
dependencies {
implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'com.facebook.fresco:fresco:2.5.0'
implementation "com.facebook.fresco:animated-gif:2.5.0"
implementation 'com.github.bumptech.glide:glide:4.9.0'
implementation 'com.alibaba:fastjson:1.1.46.android'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
//rx
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.14'
implementation 'com.drewnoakes:metadata-extractor:2.12.0'
}
- 第三方sdk存在so库文件,需要在build.gradle中配置添加armeabi-v7a、arm64-v8a、x86
defaultConfig {
// ...省略代码
ndk {
abiFilters 'x86', 'armeabi-v7a', 'arm64-v8a'
}
}
2. uniapp和android间进行数据传输,方法调用
- 页面请求同步
(略)页面请求异步
(略)自动返回
// java中发送 Mapparams=new HashMap<>(); params.put("code", "success"); params.put("msg", "识别成功"); mWXSDKInstance.fireGlobalEventCallback("portraitEvent", params);
// 页面中接收
// 身份证人像照识别,返回数据监听
plus.globalEvent.addEventListener('portraitEvent', ret => {
modal.toast({
message: ret.msg,
duration: 5
});
this.idCardInfo.mName = ret.idCardInfo.mName;
// 将接收的图片byte数组转为arrayBuffer
let arrayBuffer = new Int8Array(ret.idCardInfo.mResultFrontImageData).buffer
// 由arrayBuffer转为base64字符串
const base64 = uni.arrayBufferTobase64(arrayBuffer)
// 拼接base64字符串显示图片
this.idCardInfo.portraitImgData = 'data:image/jpeg;base64,' + base64
});
3. uniapp离线打包集成到android studio中运行到真机提示app key不正确问题
由于1中uniapp和android代码配置有问题
2、android Studio中的问题 1. android包升级到androidx包,报错问题android包中的api,在androidx包中都有对应的实现,百度查一查,就可以完美修改
2. 页面需要在AndroidManifest.xml中声明新增的页面需要在AndroidManifest.xml中声明后才能使用,不然会报错。
3. android中各页面数据返回问题- 使用Intent保存数据,具有大小限制,太大的图片需要压缩使用静态变量存储
public class DataHelper {
private static final DataHelper helper= new DataHelper();
public static DataHelper getInstance() {return helper;}
Map data = new HashMap();
public void saveData(String id, Object object) {
data.put(id, object);
}
public Object getData(String id) {
return data.get(id);
}
public Object getDataAndRemove(String id) {
Object obj = data.get(id);
data.remove(id);
return obj;
}
}
4.打包apk
参考:https://blog.csdn.net/u012241616/article/details/108803154
3、 uniapp中的问题- 图片的byte[]数组转base64
let arrayBuffer = new Int8Array(ret.idCardInfo.mResultFrontImageData).buffer // 由arrayBuffer转为base64字符串 const base64 = uni.arrayBufferTobase64(arrayBuffer) // 拼接base64字符串显示图片 this.idCardInfo.portraitImgData = 'data:image/jpeg;base64,' + base64
- nvue样式扭曲问题,flex布局的使用
(略)
- android打包apk:https://blog.csdn.net/u012241616/article/details/108803154Android平台签名证书(.keystore)生成指南拍照图片过大时进行压缩:
https://www.cnblogs.com/duanxz/p/3651418.html
https://blog.csdn.net/u013928412/article/details/80358597android内数据传递:https://blog.csdn.net/gzyh_tech/article/details/82355585



