Android实现一维二维码扫描生成功能(一)-zxing导入现有项目
前言
目前二维码扫描功能很流行也非常成熟了,而zxing项目也是目前可以说是最流行的二维码扫描方面的开源项目了,很多大神都对zxing进行了封装,github上也有很多好用的二维码开源库,但是我更喜欢原版的zxing开源库,而原版zxing导入比较麻烦,很多新人要导入很久,关键是还不一定导入的对。我在网上搜索了很久也没有一篇完整的可参考文章。下面总结导入方式,希望对大家有所帮助。
- 下载zxing源码
- zxing开源地址:https://github.com/zxing/zxing
笔者当前操作zxing版本为zxing-3.5.1
- 下载zip源码
图1
- 解压zip
图2
我们只关注其中的android和android-core两个文件夹
- 在现有项目创建文件夹及文件复制
- 文件夹创建
在现有项目根目录(local.properties或者settings.gradle或app文件夹所在目录)创建zxing文件夹,在zxing文件夹中创建src文件夹,在src文件夹中创建main文件夹,在main文件中创建java文件夹,文件夹结构如下图(其中testzxing为已有项目根目录)
图3
- 复制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文件夹
- 复制下载解压后的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 导入成功了。