UniApp安卓扫码demo学习笔记

196 阅读3分钟

创建一个UniApp

使用如下方法请求扫一扫功能

// 将按钮事件绑定在scanCode函数上
const scanCode = () => {
        let hasRight = plus.navigator.checkPermission('CAMERA'); // 判断是否有权限
        if (hasRight != 'authorized') {
                // 请求相机权限
                plus.android.requestPermissions(['android.permission.CAMERA'], (e) => {
                        if (e.granted.length == 0) {
                                uni.showToast({
                                        title: '无相机权限',
                                        duration: 3000,
                                })
                        } else {
                                scanCodeFn();
                        }
                });
        } else {
                scanCodeFn();
        }
};
const scanCodeFn = () => {
        uni.scanCode({
                onlyFromCamera: true,
                success: function(res) {
                        console.log('条码类型:' + res.scanType);
                        console.log('条码内容:' + res.result);
                },
                fail: (error) => {
                        console.log("扫码失败 =>", error);
                }
        });
}

安装生成签名证书的工具:jdk1.8

生成安卓签名证书

  1. 打开cmd输入以下命令
    • testalias为密钥别名 可修改为xxxx
    • test.keystore为证书名称 可修改为xxxx.keystore
keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore
  1. 查看证书信息
keytool -list -v -keystore test.keystore
  1. 查看md5(若第二部没有MD5信息可用此步骤)
keytool -exportcert -alias testalias -keystore test.keystore -file output.crt
openssl x509 -inform der -in output.crt -noout -fingerprint -md5

// 若openssl提示找不到命令 请自行百度安装

申请UniApp的AppKey

应用列表 (dcloud.net.cn)

  1. 创建一个应用
  2. 点击应用的应用名称
  3. 切换到各平台信息栏
  4. 新增一个Android App信息
    • 填入一个包名(自定义) 如 com.unitest.android
    • 填入之前证书生成时查看的SHA1、SHA256、MD5密钥
    • 点击提交
    • 在"各平台信息栏"页面找到新生成的记录,点击“离线打包Key”栏下的生成按钮,点击后会变为查看按钮,此处查看的key在后续配置中需用到

uniApp生成离线打包资源

  1. 从上一步的应用列表中复制Appid, 例如__UNI__86E65xxx
  2. 将AppId粘贴到uniapp的manifest中 image.png
  3. 点击"发行 => 原生App-本地打包 => 生成本地打包App资源"

使用Android Studio导入离线打包SDK

  1. 下载Android本地打包SDK Android 离线SDK - 正式版 | uni小程序SDK (dcloud.net.cn)
  2. 下载Android Studio并安装 Download Android Studio & App Tools - Android Developers (google.cn)
  3. 解压SDK压缩包,之后复制HBuilder-HelloUniApp到开发相关的文件夹image.png
  4. 使用"Android Studio" Import "HBuilder-HelloUniApp"
  5. 点击File/Project Structure... 在弹出的面板中将Gradle Version修改为7.2(此处为点击build后提示的 可以根据具体提示修改为指定版本)

配置HBuilder-HelloUniApp

  1. 在根目录gradle.properties的org.gradle.jvmargs=xxx后增加如下配置
--add-exports=java.base/sun.nio.ch=ALL-UNNAMED \
--add-opens=java.base/java.lang=ALL-UNNAMED \
--add-opens=java.base/java.lang.reflect=ALL-UNNAMED \
--add-opens=java.base/java.io=ALL-UNNAMED \
--add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED
  1. 修改app\src\main\AndroidManifest.xml
  • 需要修改的位置1
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="${之前在uniApp创建的包名 com.com.unitest.android}">
  • 需要修改的位置2
<meta-data
    android:name="dcloud_appkey"
    android:value="${之前在uniApp创建的'离线打包Key'栏目下 查看到的key}" />
  1. 修改app\src\build.gradle
  • 需要修改的配置1
applicationId "${之前在uniApp创建的包名 com.com.unitest.android}"
"apk.applicationId"     : "${之前在uniApp创建的包名 com.com.unitest.android}",
  • 需要修改的配置2
config {
    keyAlias '${密钥别名}'
    keyPassword '${密钥密码}'
    storeFile file('${签名文件名称}')
    storePassword '${密钥密码}'
    v1SigningEnabled true
    v2SigningEnabled true
}
  1. 复制之前生成的xxxx.keystore文件到app/目录下

打包发布

  1. 点击 Android Studio 上方的 Build-->Generate Signed Bundle / APK...
  2. 弹出打包窗口,选择 APK,然后点击 Next
  3. 选择xxxx.keystore 填写别名与密码,点击Next
  4. 选择release之后点Finish
  5. 生成好的apk文件就在app/release目录下

参考文章

uniapp Android调用各种权限(主要解决webview使用相机无法获取权限)_codeyun.top的博客-CSDN博客 uni-app项目打包成apk(本地打包篇)_uniapp打包成app_欧根老婆的狗的博客-CSDN博客 Unable to make field private final java.lang.String java.io.File.path accessible: module java.base d-CSDN博客 uniapp 安卓离线打包后无法使用相机功能_uniapp离线包无法启动相机-CSDN博客