说明:
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