android 开发 NDK相关问题
2016-01-25 16:43
495 查看
原文:http://hi.baidu.com/joec3/item/05b39524478f863394f62bed
android 开发 ndk相关问题
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.classname
3. 然后即可在当前路径看到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_static
I 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-jni
LOCAL_SRC_FILES := hello-jni.cpp
LOCAL_LDLIBS :=-llog
include $(BUILD_SHARED_LIBRARY)
Nothing special here, but make sure your files are .cpp.
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(563) | 评论(0) | 转发(0) |
0
上一篇:如何用VC读取Excel表格中的数据详细介绍
下一篇:android开发 NDK 编译和使用静态库、动态库
相关热门文章
SHTML是什么_SSI有什么用...
shell中字符串操作
卡尔曼滤波的原理说明...
关于java中的“错误:找不到或...
shell中的特殊字符
linux dhcp peizhi roc
关于Unix文件的软链接
求教这个命令什么意思,我是新...
sed -e "/grep/d" 是什么意思...
谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
android 开发 ndk相关问题
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.classname
3. 然后即可在当前路径看到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_static
I 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-jni
LOCAL_SRC_FILES := hello-jni.cpp
LOCAL_LDLIBS :=-llog
include $(BUILD_SHARED_LIBRARY)
Nothing special here, but make sure your files are .cpp.
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(563) | 评论(0) | 转发(0) |
0
上一篇:如何用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 编译和使用静态库、动态库
- 图库中选择图片出现异常Cursor为null
- Android NDK中使用socket
- Android 模拟器(JAVA)与C++ socket 通讯(IP设置)
- 新手使用android studio遇到的问题
- Android 笔记 AutoCompleteTextView day8
- Android NDK中使用socket
- Android 模拟器(JAVA)与C++ socket 通讯(IP设置)
- ADT20新建项目Android Support library not installed问题
- ADT20新建项目Android Support library not installed问题
- Android中使用Sqlite数据库
- Android 中沉浸式状态栏实现
- Android ListView 几个重要属性
- iOS与PHP/Android AES128 ECB NoPadding加密
- android 震动的实现
- android 如何创建配置文件和读配置文件
- android 程序启动界面的短暂黑屏解决办法
- Android点击EditText之外地方隐藏键盘
- Android关于JavaScript与Native方法相互调用