最近遇到很多奇奇怪怪的问题,就在这里记录一下。
1、jni 数组初始化传入
最近遇到一个问题,就是传一个byte数组到c++里面,进行传出值
byte[] mData = new byte[128];
ParseRg.Decrypt(key, mData); //这个是调用jni的
byte[] mData = new byte[128];
c++库初始化了128个字节。jni调用时候。所以这里需要初始化128
如果是 byte[] mData = new byte[64];;
在兼容部分机器时候。会出现内存异常产生崩溃。这个原因有时不好找到。以为在有些机器是很正常,有些机器就崩溃了。
就是和机器分配内存有关系。
2、ndk版本编译问题
android-ndk-r8d 使用这个版本ndk编译时不能编译64位的so库。只能编译 32系统的so库。
只能编译如下。
android-ndk-r10b 使用这个版本ndk可以编译 64位系统的so库。具体so类型如下:
可以看出上面多了很多64位的so库。
3、关于编译宏定义的问题
Android.mk文件里面设置全局代码的宏定义:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := binder_demo_show
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := test.cpp
TARGET_BUILD_VARINT := userdebug #宏定义为userdebug
或者在Application.mk定义
写法一: DEBUG是宏 LOCAL_CFLAGS += -DDEBUG
写法二:
APP_CPPFLAGS := -frtti -DCOCOS2D_DEBUG=1 -DCC_ENABLE_CHIPMUNK_INTEGRATION=1
注意:-D (必须要有这个)COCOS2D_DEBUG=1 具体参考makefile。
APP_CPPFLAGS
A set of C++ compiler flags passed when building C++ sources only.
NOTE: In android-ndk-1.5_r1, this applied to both C and C++ sources. This has been corrected to match the full Android build system. You can now use APP_CFLAGS for flags that shall apply to C and C++ sources.(摘自ndk说明文档)
4、升级ndk r10后在安卓5.0以下版本运行报cannot locate symbol atof
推荐解决:
原因:Android的stdlib.h中atof是内联的
解决方法:将所有的atof改成strtod
示例代码:
char *strpi = "3.1415";
double dpi;
dpi = atof(strpi); 修改为: dpi = strtod(strpi, NULL);
参考自:http://stackoverflow.com/questions/14571399/Android-ndk-cant-find-atof-function