1. 程式人生 > >Android原生(Native)C開發之五:zlib移植筆記

Android原生(Native)C開發之五:zlib移植筆記



 

zlib(http://www.zlib.net/)是一套非常流行的且開源的壓縮、解壓縮庫,由Jean-loup Gailly與Mark Adler所開發,初版0.9版在1995年5月1日發表。zlib使用DEFLATE演演算法,最初是為libpng函式庫所寫的,後來普遍為許多軟體所使用。

zlib當前版本是 1.2.3,其移植性非常好,本人已經在Windows、Linux、WinCE、Symbian等平臺成功地移植了zlib,當然也包括今天要移植的平臺:Android。

首先,從zlib 的官方網站下載zlib的原始碼:zlib123.zip,解壓後得到一個目錄zlib-1.2.3,zib已經提供好了一個Makefile,改動幾行(19、20、27、36、37)就可以動手編譯了,改動如下:

......
CC = arm-none-linux-gnueabi-gcc

CFLAGS = -O2
......
LDFLAGS=libz.a -s -static
......
AR = arm-none-linux-gnueabi-ar rc
RANLIB = arm-none-linux-gnueabi-ranlib
......

進入zlib-1.2.3目錄,在命令列輸入:make 即可。

最後會生成兩個可Android可執行檔案: example 、minigzip 。

執行Android模擬器, 進入命令列,將兩個可執行檔案 push 至Android模擬器,再執行,命令如下:

$adb push example /dev/sample/example
$adb push minigzip /dev/sample/minigzip
$adb shell chmod 777 /dev/sample/*
$adb shell
#cd /dev/sample
#./example

zlib version 1.2.3 = 0x1230, compile flags = 0x55

uncompress(): hello, hello!

gzread(): hello, hello!

gzgets() after gzseek:  hello!

inflate(): hello, hello!

large_inflate(): OK

after inflateSync(): hello, hello!

inflate with dictionary: hello, hello!

#ls -l

ls -l
-rwxrwxrwx root     root       513228 2008-11-10 04:18 minigzip
-rwxrwxrwx root     root       517640 2008-11-10 04:18 example
-rwxrwxrwx root     root           31 2008-11-10 04:28 foo.gz

#exit

$adb pull /dev/sample/foo.gz d:/foo.gz
 

其中,“$”是Linux或Cygwin命令列的提示符,#是Android命令列的提示符。

最後,用 ls -l 命令檢視當前目錄,會發現一個 foo.gz的檔案,這個檔案就是example生成的,退出adb shell,用命令: adb pull /dev/sample/foo.gz d:/foo.gz 可將模擬器上生成的檔案 foo.gz pull至D盤根目錄,用winrar或7zip可檢視這個檔案的內容,正是程式碼中所寫的“hello, hello! ”!

至此,zlib移植Android平臺執行成功!