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):

 

 

[delphi]  view plain  copy
 
  1. procedure CallInternalZXing;  
  2. var  
  3.   LIntent: JIntent;  
  4. begin  
  5.   LIntent := TJIntent.JavaClass.init;  
  6.   LIntent.setClassName(SharedActivityContext, StringToJString('com.google.zxing.client.android.CaptureActivity'));  
  7.   SharedActivity.startActivityForResult(LIntent, 0);  
  8. end;  

 

 

App運行效果圖(注意原先的"條碼掃描器"已變成我們的App名稱了):

 

返回編碼格式和解析結果:

 

完整例子(包含ZXing2.3源碼, 修改版CaptureActivity和詳細Demo):

http://download.csdn.net/detail/flcop/6993665

 

http://blog.csdn.net/flcop/article/details/20240703


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM