Android NDK 一些问题

这段时间在Android上做java/C++混合开发,用到了NDK。

 

1:静态库与动态库的Android.mk格式

1.1:目录结构:

jni

   android.mk

   lua

       android.mk

   …

1.2: 顶层android.mk (注意红色字体部分)

JNI_PATH := $(call my-dir)
LOCAL_PATH := $(JNI_PATH)

include $(call all-makefiles-under,$(LOCAL_PATH))
LOCAL_PATH := $(JNI_PATH)

include $(CLEAR_VARS)

LUA_INC       := ../../../zdc/external/lua-5.1.4/src
ZUTIL_INC    := ../../../zdc/utillib/include ../../../zdc/utillib/android/zutil-jni/jni
GL_SNOB_INC    := ../../lib/ ../../glmsg

LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) $(LUA_INC) $(ZUTIL_INC) $(GL_SNOB_INC)
LOCAL_CXX_INCLUDES := $(JNI_H_INCLUDE) $(LUA_INC) $(ZUTIL_INC) $(GL_SNOB_INC)

ZUTIL_FLASG := -DBSTRLIB_DOESNT_THROW_EXCEPTIONS -DZUTIL_OSTYPE=ZUTIL_ANDROID
LOCAL_CFLAGS    := -Werror $(ZUTIL_FLASG)
LOCAL_CPPFLAGS  := -Werror $(ZUTIL_FLASG)

LOCAL_MODULE    := snob-jni
TARGET_PRELINK_MODULES := false
#LOCAL_CFLAGS    := -Werror $(ZUTIL_FLASG)

SNOB_JNI_FILES := snob_adapter.cpp /
                glroot-jni.cpp

LOCAL_SRC_FILES :=  $(SNOB_JNI_FILES)

LOCAL_STATIC_LIBRARIES := libsnoblib libzutil liblua51

LOCAL_LDLIBS := -llog

include $(BUILD_SHARED_LIBRARY)

注:

1:LOCAL_STATIC_LIBRARIES 后面静态库的顺序有严格讲究,被包含的lib需要放在包含的后面

2:LOCAL_LDLIBS := -llog 可以使用__android_log_print打印log


1.3:子目录android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := lua51
LOCAL_MODULE_FILENAME := liblua51
LOCAL_SRC_FILES := …

2: Cpp文件jni格式

#include <android/log.h>

#define  LOG_TAG    "libhellojni"
#define  LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define  LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)

extern "C" {
    JNIEXPORT jstring Java_com_zdc_zutil_ZutilJni_stringFromJNI( JNIEnv* env, jobject thiz );
}
JNIEXPORT jstring Java_com_zdc_zutil_ZutilJni_stringFromJNI( JNIEnv* env, jobject thiz )
{
    return env->NewStringUTF( (char *)"HelloJni cpp test");
}

此种方式可以不用写Load接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值