Delphi Android 将Google ZXing 整合(调用Jar文件)
前篇文章介绍了在delphi App(以下简称App)中可使用intent来调用Google ZXing 条码扫描器(以下简称zx),其各有优缺点,优点是我们不需关注zx本身的细节,只需调用其接口即可,缺点是需额外安装zx扫描程序,如此一来客户体验就不够好,那么可否将zx直接整合到App中呢,答案是可以, 但实际操作起来会稍显繁琐,我们具体来看下过程,其中分两部分:第一部分介绍如何配置编译zx源码,第二部分介绍如何与App整合。
第一部分:zx源码的配置和编译
1:下载源码
我选用的是2.3.0版本, 下载解压后如下图:
我们只需用到三个文件夹,其中
core: 核心库文件。
Android-integration:自带的整合库,编译时要用到。
android:自带示例扫描程序(zx)。
2.将核心库打包为jar
这里我是先将core和android-integratio分别打包成jar来使用,你也可以直接使用源码。打开eclipse, 新建Android Application Project,名字可任取,不需创建Activity,完成后在项目下新建src文件夹,将core中com文件夹整体复制到src中,右键项目,选择Export,在窗口中选择Java里的JAR file:
只选取src文件夹, 这里导出名为ZXCore2.3.jar,android-integratio做同样的操作后得到ZXIntegration2.3.jar留着待用。
3.编译zx
复制一份Android文件夹(名字可自取),打开eclipse, 创建 Android from existing code, 选取上述文件夹,完成之后项目中就有CaptureActivity(zx),然后导入上面打包好的两个jar文件,如下图所示:
Build一下,如果没有出错提示,说明环境已经配置成功。
4.源码稍作修改,以便delphi能正常回调
a.打开CaptureActivity.java,注释掉onCreateOptionsMenu 事件,将菜单暂时隐藏掉,让它看起来更像个模块(你也可保留,但相关功能的资源文件必须发布且需在AndroidManifest添加相应Activity(如涉及到))。
b.定位到 onResume事件: 注释以下两块代码:
现在将工程重新Build或运行一次后就等待和App整合了。
第二部分 App整合zx
1.整合资源
新建Firemonkey Mobile App, 在根目录建立如下文件夹:
将 CaptureActivity中res里的文件复制到capture_assets中(本例中capture_assets文件夹存放的是一些帮助文件,未使用到,可以删除)。
2.创建本地回调函数
创建NativeActivitySubclass.java, 用于回调 zx 完成扫描后的 onActivityResult事件,该类继承自delphi NativeActivity,并在里面注册了一个Native回调方法,将 NativeActivitySubclass.java 生成 NativeActivitySubclass.dex的详细过程就不赘述了,这里说一下大致流程, 先将delphi 自带的classes.dex 还原成embarcadero.jar,使用 javac 带上 embarcadero.jar和 android.jar环境编译NativeActivitySubclass.java得到NativeActivitySubclass.class, 使用jar cvf 命令 将NativeActivitySubclass.class打包成jar,最后使用dx生成NativeActivitySubclass.dex。
3.合并dex
这里需要合并3个文件, Delphi自带的classes.dex, NativeActivitySubclass.dex,还有一个在CaptureActivity项目里的bin\classes.dex,使用DexMerger合并上面3个dex为一个classes.dex, 至此功能已经整合完毕。
4.添加权限
delphi IDE > project > options > uses permission中对照下面添加权限:
5. 修改AndroidManifest.template.xml
a:将默认名称改成[package].[NativeActivitySubclass](视你的名称而定);
b.添加CaptureActivity(这里只添加扫描功能,其他可按需添加)。
6.发布
a. Project > deployment:
将目录里Capture_res打包到相应目录(不必将所有文件都打包进去,我删除了一些多语言和帮助文件(如果你的本地语言不是简体 中文,可以自己添加);
b.将delphi自带的classes.dex替换成整合后的classes.dex。
7. Build App, 调用zx
既然zx已被整合,那么调用就非常简单了,只需三行代码即可(详细调用可见Demo):
- procedure CallInternalZXing;
- var
- LIntent: JIntent;
- begin
- LIntent := TJIntent.JavaClass.init;
- LIntent.setClassName(SharedActivityContext, StringToJString('com.google.zxing.client.android.CaptureActivity'));
- SharedActivity.startActivityForResult(LIntent, 0);
- end;
App运行效果图(注意原先的"条码扫描器"已变成我们的App名称了):
返回编码格式和解析结果:
完整例子(包含ZXing2.3源码, 修改版CaptureActivity和详细Demo):
http://download.csdn.net/detail/flcop/6993665
http://blog.csdn.net/flcop/article/details/20240703
Delphi Android 将Google ZXing 整合(调用Jar文件)的更多相关文章
- Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
Android 高手进阶(21) 版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明出处:http://blog.csdn.net/xiaanming/article/detail ...
- 【转】Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果--不错
原文网址:http://blog.csdn.net/xiaanming/article/details/10163203 转载请注明出处:http://blog.csdn.net/xiaanming/ ...
- 【转】 Android 基于google Zxing实现对手机中的二维码进行扫描--不错
原文网址:http://blog.csdn.net/xiaanming/article/details/14450809 转载请注明出处:http://blog.csdn.net/xiaanming/ ...
- Android 基于google Zxing实现对手机中的二维码进行扫描
转载请注明出处:http://blog.csdn.net/xiaanming/article/details/14450809 有时候我们有这样子的需求,需要扫描手机中有二维码的的图片,所以今天实现的 ...
- Java加载jar文件并调用jar文件当中有参数和返回值的方法
在工作当中经常遇到反编译后的jar文件,并要传入参数了解其中的某些方法的输出,想到Java里面的反射可以实现加载jar文件并调用其中的方法来达到自己的目的.就写了个Demo代码. 以下的类可以编译生成 ...
- Android Studio 2.3.1导出jar文件不能生成release解决办法
升级了AS之后,在项目中的时候,有个需求需要把通过AS导出一个模块,需要以jar的形式导出来,研究了一下,按照网上的描述操作了一遍,不知道是AS版本问题还是自己操作问题,发现使用 ./gradlew ...
- Multiple dex files define Lcom/google/zxing/BarcodeFormat
解决zxing “Could not find class 'com.goole.zxing.Result”和“Multiple dex files define”问题 时间 2014-04-24 1 ...
- Android项目实战(二十四):项目包成jar文件,并且将工程中引用的jar一起打入新的jar文件中
前言: 关于.jar文件: 平时我们Android项目开发中经常会用到第三方的.jar文件. 其实.jar文件就是一个类似.zip文件的压缩包,里面包含了一些源代码,注意的是.jar不包含资源文件(r ...
- 如何使用JAR文件重用JMeter代码并节省时间
在开发测试时,通常需要在测试中编写代码.此代码可能很长,可能会在多个测试中重复,或者可能仅针对特定测试编写.此外,如果要求发生变化,则在测试中编写的代码可能必须更改或补充. 这可能需要很长时间并且容易 ...
随机推荐
- PatentTips -- 一种在CoAP网络中注册的方法及装置
技术领域 [0001] 本发明涉及一种在CoAP网络中注册的方法及装置,属于网络通信技术领域. 背景技术 [0002] (Internet of Things,物联网)作为新一代的信息技术,越来越受到 ...
- [Git] Use git add --patch for better commit history and mitigating bugs
Let's split our changes into separate commits. We'll be able to check over our changes before stagin ...
- PatentTips – CoAP Segment size determination
BACKGROUND OF THE INVENTION The subject matter disclosed herein relates to routing data through a ne ...
- 机器学习 Softmax classifier (一个隐含层)
程序实现 softmax classifier, 含有一个隐含层的情况.activation function 是 ReLU : f(x)=max(0,x) f1=w1x+b1 h1=max(0,f1 ...
- [TFS4]TFS git地址,分支概念
1)上传本地代码到TFS a.Generate Git Credentials,即创建git账户密码 b)上传本地代码 git add *git commit -m "纳入管理" ...
- js调用百度地图api
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- 【t097】寄存器
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 蠕虫是一个古老的电脑游戏,它有许多版本.但所有版本都有一个共同的规则:操纵一 条蠕虫在屏幕上转圈,并试 ...
- [SVG] Add an SVG as a Background Image
Learn how to set an SVG as the background image of an element. Background images can be resized by c ...
- css+html+js实现多级下拉和弹出菜单
本文将使用css+html+js实现横向菜单.具有多级弹出菜单下拉. 首先我们来看看效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvajkwMzgy ...
- 三次握手、四次握手、backlog
TCP:三次握手.四次握手.backlog及其他 TCP是什么 首先看一下OSI七层模型: 然后数据从应用层发下来,会在每一层都加上头部信息进行封装,然后再发送到数据接收端,这个基本的流程中每个数 ...