当前位置: 首页 > news >正文

Android实现一维二维码扫描生成功能(一)-zxing导入现有项目

前言

目前二维码扫描功能很流行也非常成熟了,而zxing项目也是目前可以说是最流行的二维码扫描方面的开源项目很多大神都对zxing进行了封装,github上也有很多好用的二维码开源库,但是我更喜欢原版的zxing开源库,而原版zxing导入比较麻烦,很多新人要导入很久,关键是还不一定导入的对。我在网上搜索了很久也没有一篇完整的可参考文章。下面总结导入方式,希望对大家有所帮助。

  • 下载zxing源码
  1. zxing开源地址:https://github.com/zxing/zxing

笔者当前操作zxing版本为zxing-3.5.1

  1. 下载zip源码

图1

  1. 解压zip

图2

我们只关注其中的androidandroid-core两个文件夹

  • 在现有项目创建文件夹及文件复制
  1. 文件夹创建

在现有项目根目录(local.properties或者settings.gradle或app文件夹所在目录)创建zxing文件夹,在zxing文件夹中创建src文件夹,在src文件夹中创建main文件夹,在main文件中创建java文件夹,文件夹结构如下图(其中testzxing为已有项目根目录)

图3

 

  1. 复制android文件夹下源码

打开图2中的android文件夹,如图5

图5 解压后的zxing的android文件夹内容

将pom.xml及proguard.cfg文件复制到图3的zxing目录下,复制后如下图

图6 已有项目zxing文件夹

复制图5中res和assets文件夹及AndroidManifest.xml到已有项目新建的main文件夹下,复制后如图7

图7 复制后已有项目的main文件夹

打开图5中的src文件夹,将com文件夹复制到已有项目新建的java文件夹下,复制后如图8

 

图8 复制后的已有项目java文件夹

  1. 复制下载解压后的android-core文件夹内唯一的一个源码文件

复制CameraConfigurationUtils.java到已有项目对应的camera文件夹下,复制后如图9

 

图9 复制CameraConfigurationUtils.java文件

4.文件复制结束

  • 导入zxing依赖包及将zxing改为库模式

在已有项目的zxing目录下,新建build.gradle文件,内容填写如下

plugins {

    id 'com.android.library'  //库模式

    id 'kotlin-android'

}

android {

    compileSdk 32  //改成和已有项目一致

    defaultConfig {

        minSdkVersion 16  //改成和已有项目一致

        targetSdkVersion 30  //改成和已有项目一致



        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

        consumerProguardFiles "consumer-rules.pro"

    }

    buildTypes {

        release {

            minifyEnabled false

            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

        }

    }

    dependencies {

        //zxing的core库,不编译下载的core库,直接引用

        implementation "com.google.zxing:core:3.5.1"

        //zxing

        implementation "com.google.zxing:zxing-parent:3.5.1"

    }

}
  • AndroidManifest.xml文件修改

1.删除

<intent-filter>

        <action android:name="android.intent.action.MAIN"/>

        <category android:name="android.intent.category.LAUNCHER"/>

      </intent-filter>

2.删除logo,防止编译后和主项目冲突,或者编译合并出错

android:icon="@drawable/launcher_icon"

android:logo="@drawable/launcher_icon"

android:label="@string/app_name"

3.修改横竖屏

<activity android:name=".CaptureActivity"

          android:screenOrientation="sensorLandscape"

改成

<activity android:name=".CaptureActivity"

              android:screenOrientation="sensorPortrait"

  • 将zxing加入已有项目的dependency

在AndroidStudio的 文件-项目结构中添加依赖,选Module Dependency,将前面复制好的zxing项目加入依赖,如图10

 

图10 已有项目加入zxing依赖

  • 编译排错

重新编译项目,会报R文件错误,如图11

不用担心,根据提示点击进去你会发现所有报错的地方都有一个共同点,那就是都用了switch语句,然后你要做的就是将所有的switch语句换成if语句就可以了。

  • 导入完成,测试

至此zxing就导入到你的项目中去了,在自己的应用中启动CaptureActivity就可以进行扫描了。

看看能否在主项目中调用zxing module 的 CaptureActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tvMain = (TextView) findViewById(R.id.tv_main);
    tvMain.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.tv_main:
        Intent intent = new Intent(this, CaptureActivity.class);
        startActivityForResult(intent, 1);
    break;
    }
}

 

证明我们的zxing 导入成功了。

相关文章:

  • 企业经常会问到的软件测试面试题及答案,一定要好好记住
  • 转互联网好难,如何避免无效转行?
  • 试卷的安全方案
  • 真香啊,这招可以轻松抓取某音短视频数据(附 Python 代码)
  • ETHERCAT从站设计与FOC伺服马达电流环控制
  • nginx 解决跨域问题——(CORS)
  • Freemodbus启动流程分析
  • Java项目:springboot网上点餐系统
  • 全国职业院校技能大赛中职组网络安全竞赛试题 —XSS漏洞(笔记文档)
  • 4、常用类和对象
  • 机器学习模型-BUPA liver disorders-探索饮酒与肝炎关系
  • 【架构师(第五十三篇)】 性能优化之 HTTP 缓存
  • 博德宝闪耀回归,九牧国际化提速
  • 20岁电竞选手自学编程转行程序员,轻松拿下大厂offer
  • 转行IT,你需要了解的真实项目研发流程是怎样的?
  • 优优聚:美团成立机器人研究院!
  • 自己个人拥有一个可以支付功能的网站?当然可以了!保姆级演示!
  • 如何在Odoo 16库存中配置批次和序列号
  • 12.22
  • 转行大数据,编程学Java还是Python?