Lazarus開發Android應用程序指南(中文首發)(轉)


Lazarus開發Android應用程序指南(中文首發) 
 
本指南為中文版本首發,版權由delphicn所有,QQ1339838080(tom),轉載請保留版權信息。文中難免有錯,歡迎指正。 
 
本文件描述的安裝環境為Windows XP SP3 
1.  下載和安裝配置FPCLazarus安卓(Android)開發環境: 
 
1.1 下載安裝JDKhttp://www.oracle.com/technetwork/java/javase/downloads/index.html,如圖1和圖2所示。 
 
 
1.2下載安裝Android SDK 
從以下網址下載安卓SDK開發包:http://developer.android.com/sdk/index.html,選擇如圖3所示。 
 
 
首先安裝JDK,然后安裝Android SDK。安裝完SDK后需要下載相應的SDK包,打開程序->Android SDK tools->SDK Manager 安裝SDK 2.2 
 
后面的例子會用到。 
 
 
1.3 下載安裝Android NDK http://developer.android.com/sdk/ndk/index.html 
 

5

 
注意:NDK后來改為下載:android-ndk-r7-windows.zip這個包,上面那個包中的arm-linux-ld.exe編譯時會出錯,使用這個包中的不會出錯了。地址:http://dl.google.com/android/ndk/android-ndk-r7-windows.zip   
NDK解壓縮就可以了。  
1.4檢查以下路徑的工具是否正確,由NDK安裝的。例如我的環境:D:\AndroidFPC\ NDK\android-ndk-r7b\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\bin。檢查庫路徑:D:\AndroidFPC\NDK\android-ndk-r7b\platforms\android-8\arch-arm\usr  
備注:已成功把最新Svn trunkLazarus0.9.31FPC 2.5.1打包成一個安裝文件。可以正常安裝使用了,不會出錯,可以正常生成安卓文件。以下1.51.10的步驟都可以跳過。2.1的出錯后重定位部分的步驟也可以跳過了。這個安裝包放115網盤。網盤地址在第3帖最后。  
1.5下載FPC 2.5.1119版),首先你需要有SVN下載工具。新建一個文件夾,然后SVN檢出FPC源碼,版本號是16790。新建一個文件夾D:\AndroidFPC\FPC251用於存放SVN源碼,右擊文件夾選擇SVN檢出,版本號16790,如圖6所示 

6

1.6安裝FPC 2.4.4 簡單的安裝法是安裝Lazarus 0.9.30.2,因為已經包含了。用來編譯生成fpcrossarm.exe ,后面會介紹。 1.7創建構建腳本並且構建它。先創建輸出文件夾:D:\AndroidFPC\FPC251\output

創建一個批處理文件在以下文件夾  D:\AndroidFPC\FPC251    ,文件名 build.bat ,內容如下:
SET PATH=D:\lazarus\fpc\2.4.4\bin\i386-win32\
make crossinstall CPU_TARGET=arm OS_TARGET=linux CROSSBINDIR=D:\AndroidFPC\NDK\android-ndk-r7b\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\bin OPT=-dFPC_ARMEL BINUTILSPREFIX=arm-linux-androideabi- INSTALL_PREFIX=D:\AndroidFPC\fpc251\output
pause
 

現在雙擊運行build.bat5分鍾后,在D:\AndroidFPC\FPC251\output文件夾中會有兩個文件夾:bin  unitsFPC編譯器在D:\AndroidFPC\FPC251\output\bin\i386-win32文件夾中,名為:ppcrossarm.exe ,成功構建,這個文件是重點。

1.8 復制交叉編譯工具
D:\AndroidFPC\NDK\android-ndk-r7b\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\bin 復制3 個交叉二進制工具到D:\AndroidFPC\FPC251\output\bin\i386-win32 文件夾中。這三個文件的名稱為:arm-linux-androideabi-as.exe   arm-linux-androideabi-ld.exe    arm-linux-androideabi-strip.exe  ,重新命名為:arm-linux-as.exe   arm-linux-ld.exe    arm-linux-strip.exe  。這里注意1.3 的描述。
 
1.9  安裝新版Lazarus
現在我們需要安裝最新版本lazarus ,把原來的Lazarus 0.9.30.2 卸掉,不要忘記同時清理C:\Documents and Settings\ 你的用戶名\Local Settings\Application Data Lazarus 的文件夾。從ftp.freepascal.org/ /pub/lazarus/snapshots/ 下載最新版本的Lazarus  安裝。我安裝的是:Lazarus-0.9.31-35521-fpc-2.7.1-20120221-win32.exe 這個版本。新版已經打包,在115 網盤中,自己打包的。
 
1.10  合並工具到Lazarus 環境。
復制D:\AndroidFPC\FPC251\output\bin\i386-win32 中所有文件到 Lazarus 安裝文件夾D:\lazarus\fpc\2.7.1\bin\i386-win32  ,復制文件夾D:\AndroidFPC\FPC251\output\units\arm-linux D:\lazarus\fpc\2.7.1\units 中。
 
到了這一步,我們在Windows 的中的lazarus 部分就配置成功了。下面還有工具及設置要調整。
 
1.11 下載安裝設置Ant  。從以下地址: http://www.apache.org/dist/ant/   ;選擇ant-current-bin.zip 下載就可以了。下載后解壓縮,把解壓后的文件夾放在:C:\Program Files 文件中,然后在環境變量中配置如以下圖:
圖8
8圖
 
至此,所有windows 配置及工具已經全部下載安裝完成,可以開始調試程序了。



2.   編譯 lazarus 中的 Android 示例程序。
示例是在lazarus/examples/androidlcl/androidlcltest.lpi   。我這里把示例程序放在了D:\AndroidFPC\demo\demo 中,所以以下示例都以此為准。
 
2.1 重新設置Lazarus 
 
在打開示例程序之前,我們先要把lazarus重新設置一下,進入最新安裝的Lazarus文件夾lazarus\fpc,把2.7.1改為2.5.1,然后重新打開lazarus,會出錯, 
9
然后重新選擇一下fpc 的編譯器及源碼位置,
 
11
Start IDE ,啟動lazarus ,打開后選擇工具-> 選項,查看環境是否正確設置:
12
點工具-> 重新掃描FPC 源代碼目錄。好了。注意,這樣配置以后,只能編譯生成android 項目,其它標准工程會出錯。
如果已經安裝好lazarus-0.9.31-35594M-fpc-2.5.1-20120229-win32.exe這個安裝包,請從這里開始。好了,可以打開android 示例了,打開,然后進行工程設置。工程-> 工程選項-> 編譯選項-> 路徑:
13
調整紅色框部分,添加兩個路徑:
1 ):D:\AndroidFPC\NDK\android-ndk-r7b\platforms\android-8\arch-arm\usr\lib
2 ):D:\AndroidFPC\NDK\android-ndk-r7b\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\lib\gcc\arm-linux-androideabi\4.4.3
如圖所示:
 
14
 
Build modes 
 
15
代碼:
 
16
其它具體選項查看示例工程,不再一一列舉。
 
2.2  開始編譯及構建android 示例。
如果已經按照以上的設置好了android 工程,你現在可以Shitf+F9 構建工程了。
17
成功編譯了,多么激動人心啊!
 
2.3  構建APK
在你使用命令行構建APK 之前,請你先打開示例中android 文件夾下的local.properties 文件。
打開后可以看到:
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must *NOT* be checked in Version Control Systems,
# as it contains information specific to your local configuration.
 
# location of the SDK. This is only used by Ant
# For customization when using a Version Control System, please read the
# header note.
sdk.dir=/home/felipe/Programas/android-sdk-linux
修改最后一行為本機Android SDK 的文件夾:sdk.dir=C:/Program Files/Android/android-sdk
進入命令行方式,開始構建APK
CD lazarus\example\androidlcl/android
Ant debug
我這里直接寫了一個批處理,你們可以自己寫一個。可以直接運行demo 中的批處理文件:構建APK.bat 
 
好了,構建的apk 文件在lazarus\example\androidlcl/android/bin 中。如果出現找不到tools.jar ,請把C:\Program Files\Java\jdk1.7.0_03\lib\tools.jar  復制到C:\Program Files\Java\jre7\lib 文件夾。
 
 
2.4  安裝APK 到你的手機並且運行。
你可以通過ADB 安裝或者復制文件到你的手機的SD 卡,就可以運行它。關於ADB 請看3.1 中的ADB Install 的內容。在安裝之前我們先創建Android 模擬器,看3.1 中的內容。





3.  Android模擬器和手機中運行APK
 
3.1 創建並設置模擬器。
運行程序中的Android SDK Tools  android AVD 管理器,創建一個新的模擬器設備:
 
 
18
點擊New ,設置如下:
 
 
19
SD Cardsupport  需要點右邊的New 才能添加進去。
點擊Create AVD ,好了,創建了一個模擬器了。
 
 
20
 
3.2 運行模擬器
現在我們運行模擬器。點擊Start
 
 
21
Launch ,開始運行了,等待幾分鍾,模擬啟動完成。
 
 
 
22
如果第一次出現運行錯誤,不要管它,請關閉,重新再開始。
 
3.3 安裝和運行APK 程序
啟動完成模擬器才可以安裝程序。
進入命令行方式,進入文件夾:C:\Program Files\Android\android-sdk\platform-tools
使用如下命令把前面生成的apk 文件安裝進去。
Adb install <apk 文件路徑>
我這里是adb install D:\AndroidFPC\demo\demo\android\bin\LCLExample-debug.apk ,或者運行demo 中的批處理文件:安裝APK.bat ,等它完成。
 
 
23
顯示Success 就成功應用軟件安裝進模擬器了。
Adb 常用命令:
Adbinstall <apk 文件路徑>   安裝apk 到模擬器
Adb uninstall<apk 文件路徑卸載apk
Adbdevices    列出所有模擬器設備
Adblogcat   調試器實時記錄
 
看我們的LCL Test
 
 
24
 
運行后:
 
 
25
4 .示例程序 NDK OpenGL
這些需要用到2.3 SDK ,請先下載安裝好。
4 1 下載安裝Android NDK  Android SDK  Ant
4 2 安裝FPC 交叉編譯器。
4 3 SVN 下載最新的lazarus-ccr sourceforge 源碼: https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr
或者直接下載: lazarus-ccr/bindings/android-ndk 里面的源碼就可以了。
4 打開 lazarus-ccr/bindings/android-ndk/examples/opengltest/opengltest.lpi  ,路徑設置一下,具體看示例。編譯生成。
4 配置一下 local.properties 文件。
4 構建 APK ,安裝模擬器 2.3.3
 
5 .如何創建一個新的 LCL  Android 應用程序
以下部分是參考官網和自己研究所得:
創建一個新的LCL-CustomDrawn-Android 應用程序可以簡單的從示例程序復制。這個示例程序可以從lazarus/examples/androidlcl 中找到。然后你需要修改構建文件來變成你自己的新的工程名稱和新的Java 包名稱。
5.1  創建LPI 文件
此時你需要一個單獨的LPI 文件來用於安卓應用程序版本,但是所有其它代碼可以被共享。
創建它可以從 新建-> 工程-> 庫來建立一個新的文件,然后從示例程序中來改寫其它的代碼。你需要改寫工程LPR 文件exported 部分的JNI 屬性名字為你的安卓包的名字。
5.2 構建庫文件
首先,工程去掉debug 信息。Debug 信息對安卓沒用,並且它使得執行文件的體積太大。看圖:
 
 
 
 
 
29
5.3  創建安卓工程結構
和一般的LCL 工程構建比起來,像這樣配置一個正確的LPI 並且擁有一個庫主工程文件,也只需要添加所有的安卓工程結構。完全從示例程序復制就可以了,然后修改適應新的工程。然后更改SDK 路徑,包名稱。包的名稱需要在新的工程文件中修改。在文件夾android/src/ 包名稱,在activity java 源代碼並且在工程的庫文件pascal 代碼中,在exports 部分。
上面是翻譯了官網和,
自己研究如下:包文件名稱和路徑要和LPR 中的文件名要一樣。這里的包指的是Android 包。
 
 
 
31
以上兩圖是同一張圖,看紅色框部分。再看Android java 包的文件路徑,看下圖。
 
 
32
看文件路徑名稱同樣為: src\com\pascal\truetest\LCLactivity
注意:Java 文件要加入到工程中去,打開java 文件然后菜單  工程-> 添加代碼編輯器中的文件到工程。后來研究了一下,這里不一定。
 
還要調整編譯后的so 文件名稱和 java 中的一樣。說明如下:
LCLActivity.java 文件中最后部分,第621 行:
 
 
33
看黑色框中的 lclapp   ,那么你的編譯后的導出庫名稱也要 lclapp  ,看工程選-> 編譯選項-> 路徑->Target file name ,看圖:
 
 
34
注意,lclapp.so 前的lib so 文件存放路徑位置。
 
安卓程序的圖標和文件名稱的更改:
圖標和文件名稱存放在以下位置中android\res\   drawable-hdpi drawable-mdpi drawable-ldpi 三個文件夾,分別存放72x72 48x48 36x36 大小兩種圖標。而values 文件中的strings.xml 文件中就是存放安卓文件名稱了,打開修改    <string name="app_name">LCLTest</string> 部分的LCL Test 就可以了。如是是中文名稱,請把文件另存為 utf8 格式。
 
生成的APK 名稱在這里定義:android\build.xml 中定義,在2 行:
<projectname="LCLExample" default="help">   LCLExample 改為你自己的名稱。
 
6 .在 Android2.2(API 8) 中可用的 NDK 
LCL-CustomDrawn 設計目標為 Android2.2+  並且 API 庫在NDK 中如下支持:
(1)   libc.so
(2)   libdl.so(linker)
(3)   OpenGL ES 1
(4)   OpenGL ES 2
(5)   libjnigraphics.so
(6)   liblog.so
(7)   libm.so
(8)   libthread_db.so
(9)   libstdc++.so
當前LCL-CustomDraw-Android  使用 libjnigraphics.so   liblog.so  
 
7 .本地文本繪制
在安卓中本地文本繪制有一些費解並且這個幫助文件也相當糟糕。一些已經了解的在如下:
(1)    繪制文本開始以Y 坐標作為基准線,
(2)    沒有幫助文件描述Paint.setTextSize 中的尺寸是如何的。有些人說是像素,但是我看到一些不同,它好像依賴於不同設備之間。
(3)    也有一些好的事情:
l         可以繪制透明的位圖並且使用alphi 透明度去實現anti-aliasing( 反鉅齒處理)  subpixel rendering( 子像素渲染) 。文本變得十分漂亮。
l         也可以繪制ARGB 32 位非像素格式也是相當漂亮的。
 
8 Lazarus 開發組的實現路線
2012-2-24
(1)  構建 Lazarus Custom Drawn  控件組。已完成
(2)  為安卓API 初始化綁定。已完成
(3)  創建一個應用程序自動生成綁定。已完成
(4)  開始一個新的widgetset (組件集,構件集)。已完成
(5)  實現對JNI 的支持。已完成
(6)  合並Lazarus Custom Drawn  控件到LCL 並且用它們實現所有最基本的控件。已完成
(7)  為安卓添加文本支持。已完成
(8)  實現基本窗口客戶區滾動。已完成
(9)  為桌面平台添加手機模擬器。進行中
(10)  改善手機滾動。尚未進行
(11)  X11 中添加文本支持。尚未進行
(12)  LCL 中添加DPI 感應度和自適應。尚未進行
(13)  添加非本地化文本支持通過pasfreetype  。尚未進行
9 .關於 LazarusCustom Drawn  接口
一個跨平台LCL 后端,完全在lazarus 內使用Object Pascal 編寫的。Lazarus   Android 的接口。LCL-CustomDrawn-Android 有以下特性:
此部分尚未完成整理。
 
 
10 .官方論壇看到的資料
l         引用頁: http://www.lazarus.freepascal.org/index.php/topic,15951.0.html   Android NDK 目前為止所有的轉換pas 都在lazarus/lcl/interfaces/customdrawn/android 中。但是這個轉換目前不包括攝像頭和手機通訊簿部分。轉換的版本是Android2.2+ 。對SDK 庫,非常巨大,可以通過JNI 直接訪問它們。有人提到如何設置背景為黑色,他說在common_draw 中修改,我想是在customdrawn_common 單元,這個要測試一下。
 
 
lazarus-0.9.31-35594M-fpc-2.5.1-20120229-win32.exe安裝包115網盤:http://115.com/file/belt6tb7 



免責聲明!

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



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