说明: android的NDK本来就提供了zlib库,但是由于zlib相对简单,所以我第一次编译的就是zlib,只是为了了解一下大概如何编译的思路。 这里使用的zlib的版本是zlib-1.2.3。 (1)使用ndk-build的方式 解压zlib包后,将其放入JNI文件夹下,目录树结构如下: NDK#tree -L 3 . ├── prj_zlib │ └── jni │ └── zlib-1.2.3 └── zlib-1.2.3.tar 在jni目录下,新建Android.mk(注意大写)文件,其内容如下: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) include $(CLEAR_VARS) LOCAL_SRC_FILES := mytest.c LOCAL_C_INCLUDES := \ $(LOCAL_PATH) \ $(LOCAL_PATH)/.. LOCAL_STATIC_LIBRARIES := libzlib LOCAL_MODULE := libmyzlibtest include $(BUILD_SHARED_LIBRARY) include $(call all-makefiles-under,$(LOCAL_PATH)) 其中,mytest.c为使用JNI封装zlib函数的测试例子,内容如下(根据需要去调用): #include <jni.h> #include "zlib.h" #include <string.h> jstring chartojstring( JNIEnv* env, const char* pat) { /*jclass strClass = (*env)->FindClass(env,"java/lang/String;"); jmethodID ctorID = (*env)->GetMethodID(env,strClass, "<init>", "([BLjava/lang/String;)V"); jbyteArray bytes = (*env)->NewByteArray(env, strlen(pat)); (*env)->SetByteArrayRegion(env,bytes, 0, strlen(pat), (jbyte*)pat); jstring encoding = (*env)->NewStringUTF(env,"utf-8"); return (jstring)(*env)->NewObject(env,strClass, ctorID, bytes, encoding); */ /* jstring stoJstring(JNIEnv* env, const char* pat) { jclass strClass = env->FindClass("Ljava/lang/String;"); jmethodID ctorID = env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V"); jbyteArray bytes = env->NewByteArray(strlen(pat)); env->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte*)pat); jstring encoding = env->NewStringUTF("utf-8"); return (jstring)env->NewObject(strClass, ctorID, bytes, encoding); } */ re