android 开发 NDK相关问题
来源:互联网 发布:c语言continue 编辑:程序博客网 时间:2024/06/05 05:06
NDK 编译和使用静态库、动态库
jni头文件生成
在NDK的Nactive代码中使用Android Log的方法
分析NDK crash的堆栈信息
ndk-gdb 调试方法
NDK 编译和使用静态库、动态库
太复杂,见新文章:http://android开发 NDK 编译和使用静态库、动态库
jni头文件生成:
1. 声明Java Native接口。(定义Java Native接口可以在Android项目的主类里声明,也可以通过使用独立的类来声明。)
static { System.loadLibrary("libxxx"); }
public native void init()
2. 编译java代码。
javah -classpath $(BIN_PATH) com.x.y.z.classname3. 然后即可在当前路径看到com_x_y_z_classname.h头文件,实现它就ok。
注意:$(BIN_PATH) 指的是class编译后bin的位置,对于android开发而言,一般是$project/bin/下面。
在NDK的Nactive代码中使用Android Log的方法
1.在mk文件加入:
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
2.在cpp文件加入:
#include <android/log.h>
#define LOGI(...) __android_log_print(ANDROID_LOG_DEBUG, "keymatch", __VA_ARGS__)
3.使用:
LOGI("some log here, %s,%d",__FILE,__LINE__);
分析NDK crash的堆栈信息
1 google提供了一个python脚本,可以从http://code.google.com/p/android-ndk-stacktrace-analyzer/ 下载这个python脚本,然后使用 adb logcat -d > logfile导出 crash 的log, 使用 arm-eabi-objdump 位于build/prebuilt/linux-x86/arm-eabi-4.2.1/bin下面把so或exe转换成汇编代码,如:arm-eabi-objdump -S mylib.so > mylib.asm, 使用脚本 python parse_stack.py <asm-file> <logcat-file>
2 直接使用NDK下面的 arm-eabi-addr2line (推荐)
例如:arm-eabi-addr2line -C -f -e libxxx.so 0x##### (0x#####是address输出日志中最上面的pc值,可以回溯最终函数调用顺序)
ndk-gdb 调试方法
1 AndroidManifest.xml <application>包含android:debuggable = "true"
2 执行ndk-build NDK_DEBUG=1
3 在java代码调用c之前加一个断点,然后在gdb命令行加b ***.c:main
断点加入方法android.os.Debug.waitForDebugger();
4 执行ndk-gdb
ndk-gdb --start --force --verbose 显示更多信息,用于查看步骤中哪里出错。
Android NDK无法包含std的头文件(string,list等)的解决方法
原文:http://stackoverflow.com/questions/4893403/cant-include-c-headers-like-vector-in-android-ndk
一句话:出了在Application.mk中添加 APP_STL := stlport_static,还有修改代码文件后缀:将.c修改为cpp
It is possible. Here is some step by step:
In $PROJECT_DIR/jni/Application.mk:
APP_STL := stlport_staticI tried using stlport_shared, but no luck. Same with libstdc++.
In $PROJECT_DIR/jni/Android.mk:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello-jniLOCAL_SRC_FILES := hello-jni.cppLOCAL_LDLIBS :=-lloginclude $(BUILD_SHARED_LIBRARY)Nothing special here, but make sure your files are .cpp.
上一篇:如何用VC读取Excel表格中的数据详细介绍
下一篇:android开发 NDK 编译和使用静态库、动态库
- SHTML是什么_SSI有什么用...
- shell中字符串操作
- 卡尔曼滤波的原理说明...
- 关于java中的“错误:找不到或...
- shell中的特殊字符
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
- android 开发 ndk相关问题
- android开发 NDK相关问题
- android 开发 NDK相关问题
- android NDK开发相关
- android 开发ndk相关总结
- android NDK开发库相关的知识
- Android Studio ndk开发相关注意事项
- Android NDK开发相关知识集合
- Android NDK开发篇(二):NDK相关介绍
- NDK开发相关知识
- Android NDK 开发之cygwin,ndk-build问题
- ADT开发android ndk没有NDK选项问题的解决方案
- Android NDK 开发自己遇到的问题
- android studio ndk开发遇到的问题
- Android NDK 开发问题及解决方法
- android studio ndk 开发以及问题
- Android eclipse开发NDK提示的问题
- android开发NDK遇到的问题杂谈
- Protocol Buffers 的 ActionScript 3 编译器
- error C2143: syntax error : missing ';' before 'type'
- Visual Basic 程序设计
- JSON-C Example(从字符串解析属性)
- 如何用VC读取Excel表格中的数据详细介绍
- android 开发 NDK相关问题
- android开发 NDK 编译和使用静态库、动态库
- Android NDK支持RTTI
- 进程、线程和协程的理解
- android开发 NDK 动态链接多个第三方库(so)
- Learn Python The Hard Way Ex40翻译
- vim字符串替换
- VMware tools的用途及安装[跨系统文件拖拽]
- 十大高明的Google搜索技巧