標籤:ini monkey 缺點 create java 3.0 == 其他 perm
前篇文章介紹了在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
- 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檔案)