这两天想要实现一个能扫码的app,找了一下,发现zxing用的比较多,就在网上找了找怎么用zxing。我主要是按照宇宝守护神的博文“Android 二维码的扫码功能实现(一)”的步骤完成的,博文链接在此:https://blog.csdn.net/qq_34902522/article/details/78384661

但是这个博文的时间比较早,2017年的,所以在按照他的步骤实现过程中,我遇到了非常非常多原作者没有遇见的坑,在这里我完整的把我的过程记录下来(真的是血泪史啊@~@)

zxing开源项目的地址:https://github.com/zxing/zxing/releases,把zxing项目下载下来。

1. 在Android Studio中新建一个空白项目。

2. 在新建项目中,file→new→import Module,将下载好的zxing项目作为module导入进来,注意,选择android这个文件夹。然后next→finish。这里面可以按照自己的需要给module取名,默认的“android”也是可以的。

3. 我们可以看到导进来之后,project中出现了一个名为“android”的文件夹

同时也出现了我们遇到的第一个bug,提示“The minSdk version should not be declared in the android manifest file. You can move the version from the manifest to the defaultConfig in the build.gradle file.” 根据提示,打开android(新导入的module名)→src→main→AndroidMainfest.xml,里面定义了一句

<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="22"/>

把它删掉就好了。重新Sync整个项目就没有问题了。

4. 导入的步骤还没有做完,打开新导入库(我这里是android)的build.gradle,① 把"apply plugin: ‘com.android.application’语句改成"apply plugin: ‘com.android.library",② 删掉"applicationId “com.google.zxing.client.android”";③ 添加

dependencies{implementation 'com.google.zxing:android-core:3.3.0'implementation 'com.google.zxing:core:3.3.3'implementation 'com.google.zxing:android-integration:3.3.0'
}

上面添加的代码段中,解决了第一个坑,core版本要选3.3.3的,因为在3.3.0版本中,会缺少一些我们扫码过程中必须要用的函数比如说getStartTimestamp()、getEndTimestamp()等,宇宝守护神也遇到了这个问题,但是他通过暴力地把函数改了来解决这个问题,可惜我不只有这个问题,还有暴力不能解决的。寻找问题的方法:下面这个链接里面有各个版本的jar包,下载下来,通过jd-gui将jar包反编译就可以发现其中的差别,通过查找自己缺失的函数来确定使用哪个版本的jar包。

https://repo1.maven.org/maven2/com/google/zxing/

5. 继续引库。右键项目,Open Module Settings→打开窗口中左边选择application module(app),右边选dependencies→点绿色加号→Module dependency→:android→OK,OK.

6.Sync后,又一个意外之喜来了,提示错误“java.lang.RuntimeException: Manifest merger failed with multiple errors, see logs”。接下来我们要看看是什么情况。点击左下角Terminal,输入

gradlew compileDebugSource --stacktrace -info

Terminal里面输出了很多乱七八糟的东西,往上翻翻,看到了error了。部分如下:

打开看之后,发现是所有switch-case出错了,查找资料发现,改成if-else格式就可以了。接下来就是改了,按照提示,找到对应的文件下面,把所有报错的地方的switch-case改成if-else。

7.再Sync,当当当当!有一个bug来啦,如下

提示说Manifest文件出问题了,那就去看看Androidmanifest.xml,打开这个文件后,点击下图左下角Merged Manifest,就可以在下图右边的框框里面看到error信息了。

根据提示,删除android:AndroidManifest.xml中的

android:icon="@drawable/launcher_icon"

然后按照错误提示修改一下代码里面sdk的版本,或者直接点一下提示里面给的建议,好像会直接帮修改好,轻松快乐。

8. 再Sync,终于没有错了。下面可以跑教程博客里面给出的代码了,代码在上述链接里面有给,这里就不再粘了。还有几个bug需要我们去修改。

第一个问题:提示没有下面两个类。我的解决非常暴力,直接在下载的zxing文件里面搜索,找到IntentIntegrator.java和IntentResult.java,把它们复制到MainActivity文件夹下面,这样就不需要import了,直接把这两句话删了。

复制过来之后,project中就变成了下图这样

但是需要注意的是,我们要打开把IntentIntegrator.java和IntentResult.java开头的那个packet名给改了,MainActivity里面是啥样,这俩就改成啥样。

还有一个小地方,直接复制过来的话会有如下这个错误

我们需要在layout文件夹下面的activity_main.xml中添加button的布局控件,下面这段代码作为一个小样例放在这里。

    <Buttonandroid:id="@+id/scanner"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="扫码"/>

到这一步,我们基本上解决了所有bug,下面就可以轻松愉快地真机调试,开始我们的第一步啦。

Android 二维码扫码功能实现(Zxing集成,避坑启示)相关推荐

  1. Android二维码名片生成扫码识别

    功能描述: 填入联系人信息,动态生成二维码名片,长按二维码保存,打开扫码识别内容.app实现了在android6.0或以上动态权限申请功能,适合新手研究.搭建方法请看入门教程菜单中的androidst ...

  2. Android二维码多码识别,相册选择二维码,自定义扫码界面

    现在很多App都有扫码识别二维码的场景,最新的扫码已经支持全屏扫码.从相册选取二维码识别,以下使用基于Zxing封装的一个库:https://github.com/maning0303/MNZXing ...

  3. Ionic二维码扫码插件QR Scanner不能扫描一维码问题(只解决了android)

    三款扫码插件优劣 在Ionic开发中经常需要用到扫码功能,这个时候就需要用到二维码扫码插件. 目前市面上主要提供了三款扫码的插件,具体的可以参考如下链接: Ionic2入门教程(十三)带你走近3款二维 ...

  4. 基于MacOSX平台下的二维码扫码功能

    基于MacOSX平台下的二维码扫码功能 最近项目接受了一个需求,要在macOS的系统上实现一个二维码扫码的功能.通过多方面的学习,最终实现了要求,具体的实现步骤将会在下面展示. 核心功能模块 实现途径 ...

  5. 如何实现安卓二维码扫码功能

    使用这个库:https://github.com/jenly1314/ZXingLite 1.库的引入: allprojects {repositories {google()jcenter()mav ...

  6. 手机二维码扫码登录(Java源码及思路)

    QRCodeLogin 二维码扫码登录:服务器端.网页端.移动端源码: 项目介绍 一个二维码扫码登录的demo,能够完整的实现用户扫码登录的过程,源码地址. 项目一共包含三分源码:服务器端.网页端和移 ...

  7. 二维码扫码登录是什么原理?

    在日常生活中,二维码出现在很多场景,比如超市支付.系统登录.应用下载等等.了解二维码的原理,可以为技术人员在技术选型时提供新的思路.对于非技术人员呢,除了解惑,还可以引导他更好地辨别生活中遇到的各种二 ...

  8. 细说二维码扫码登录的原理

    前言 在日常生活中,二维码出现在很多场景,比如超市支付.系统登录.应用下载等等.了解二维码的原理,可以为技术人员在技术选型时提供新的思路.对于非技术人员呢,除了解惑,还可以引导他更好地辨别生活中遇到的 ...

  9. 聊聊二维码扫码登录的原理

    点击上方 "大数据肌肉猿"关注, 星标一起成长 后台回复[加群],进入高质量学习交流群 2021年大数据肌肉猿公众号奖励制度 原文:https://juejin.cn/post/6 ...

最新文章

  1. 关于Java为什么配置好环境变量但是不能在命令行cmd运行javac的问题
  2. 缓存与数据库的一致性:先操作缓存还是先操作数据库?
  3. Deep Image Homography Estimation
  4. 2017.2.10自测(noip2002)
  5. myeclipse的优化
  6. android 重用布局区分控件,【专题分析】布局优化
  7. 解决Tomcat闪退
  8. 观《怎样成为一个高手》后感
  9. Programer Cat 福利
  10. Power Management of Hybrid DRAM/PRAM-Based Main Memory
  11. 数据的逻辑结构和存储结构(物理结构)详解
  12. Android 渠道抽成,内容为主,渠道为辅,国内Android商店何时才能调整分成比?
  13. 《iOS防护02》破解ptrace防护
  14. 数组下标访问越界导致溢出1
  15. 用c语言编写一个完整的实现单链表,如何用c语言实现两个单链表的归并
  16. 使用3D-DNA流程,结果不升反降怎么破?
  17. Part III.S3. 对方案有偏好的直觉模糊多属性决策方法
  18. 一个毕业两年IT民工
  19. 布线问题(分支限界)
  20. ReadBook-我的设置

热门文章

  1. 两个numpy取相同值_闲谈Numpy的切片规则
  2. 现代软件工程 第三章 【软件工程师的成长】练习与讨论
  3. java url authority,Java如何解析url,包括自定义schema的url
  4. python读单行文本求平均值_利用Python读取json数据并求数据平均值
  5. JdbcTemplate(操作数据库-查询返回对象、查询返回集合)
  6. php 函数命名 特殊字符,php 特殊字符处理函数
  7. python tornado websocket_基于Python Tornado框架的websocket服务
  8. java enum枚举使用例子
  9. python有趣的简单代码_简单几步,100行代码用Python画一个蝙蝠侠的logo
  10. 查看本机所有请求_【松勤教育】Fiddler抓包-只抓APP的请求