Android NDK 随记

jni规范: https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html

NDK文档:
https://developer.android.google.cn/ndk/guides/

NDK参考:
https://developer.android.google.cn/ndk/reference/

NDK示例:
https://developer.android.google.cn/ndk/samples/


Application.mk:
此文件枚举并描述您的应用需要的模块。 这些信息包括:
    用于针对特定平台进行编译的 ABI。
    工具链。
    要包含的标准库(静态和动态 STLport 或默认系统)。

Android.mk:必须在 jni 文件夹内创建 Android.mk 配置文件。 ndk-build 脚本将查看此文件,其中定义了模块及其名称、要编译的源文件、版本标志以及要链接的库。

NDK构建系统以jni目录作为NDK项目目录,jni目录要有Android.mk文件。

LOCAL_LDLIBS += -llog  链接系统的动态库
LOCAL_STATIC_LIBRARIES += 
LOCAL_SHARED_LIBRARIES += 链接本地库


APP_CFLAGS
APP_CPPFLAGS 模块公用的


ndk-build NDK_LOG=1 V=1 显示构建过程详细日志

NDK构建时使用的系统头文件位置:
$(NDK_DIR)/sysroot/usr/include

NDK构建时链接的系统动态库静态库位置:
$(NDK_DIR)/platforms/android-?/arch-arm/usr/lib/

JNIEnv JNI函数表接口指针,C和C++使用稍有不同
C     (*env)->XXXX()
C++   env->XXX()


通过(*env)->GetStringXXXX获取的C字符串用完后要自己释放。
(*env)->ReleaseStringUTFChars

JAVA类型签名映射,特殊的几个:
Boolean Z
Long    J
类      Ljava/lang/String;
type[]  [type
方法    ()V

创建/销毁全局引用
(*env)->NewGlobalRef(env, obj)
(*env)->DeleteGlobalRef(env, obj)

日志
#include <android/log.h>
__android_log_write(ANDROID_LOG_DEBUG, "MyTag", "***************** ");

ndk-gdb 调试原生代码
ndk-stack 分析堆栈信息

启用JNI调用检查:
adb shell setprop debug.checkjni 1 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值