我的操作流程是这样的:
先在java里声明了要在.so中实现的方法,在命令行下用javah -jni命令生成了c语言的头文件.h
根据.h里函数的声明,编写了.c,然后生成.so动态链接库,拷贝到android系统/system/lib下
java调用库里的函数
现在问题是,调用动态链接库应用程序会崩溃,具体现象如下:
1.如果这些用c语言编写的函数什么都不做直接return,应用程序可以正常调用
2.如果函数返回值定义的是整型,也可以return 555,上层也可以成功接收并显示
3.如果在函数中使用一些简单的语句,例如:
int a,b;
a=5;
b=7;
a=a+b;
上层应用可以正常调用
4.如果在函数中用fopen试图打开/sdcard/a.txt,程序崩溃
5.考虑到是使用了c标准库的原因,我又调用了一个math.h中的abs()测试,发现应用程序可以正常使用dynamic lib
6.网上很多人提到应用程序权限问题,我敲了chmod 777 /sdcard/a.txt 依然崩溃
7.不仅fopen,open也不可以(我最终的目的是打开设备文件节点)
8.为了排除“只有打开文件不能用”这个可能性,还printf,getchar了一下,虽然这些也是操作设备文件吧:),这些函数也不行,一天了,往高手解答下……
先在java里声明了要在.so中实现的方法,在命令行下用javah -jni命令生成了c语言的头文件.h
根据.h里函数的声明,编写了.c,然后生成.so动态链接库,拷贝到android系统/system/lib下
java调用库里的函数
现在问题是,调用动态链接库应用程序会崩溃,具体现象如下:
1.如果这些用c语言编写的函数什么都不做直接return,应用程序可以正常调用
2.如果函数返回值定义的是整型,也可以return 555,上层也可以成功接收并显示
3.如果在函数中使用一些简单的语句,例如:
int a,b;
a=5;
b=7;
a=a+b;
上层应用可以正常调用
4.如果在函数中用fopen试图打开/sdcard/a.txt,程序崩溃
5.考虑到是使用了c标准库的原因,我又调用了一个math.h中的abs()测试,发现应用程序可以正常使用dynamic lib
6.网上很多人提到应用程序权限问题,我敲了chmod 777 /sdcard/a.txt 依然崩溃
7.不仅fopen,open也不可以(我最终的目的是打开设备文件节点)
8.为了排除“只有打开文件不能用”这个可能性,还printf,getchar了一下,虽然这些也是操作设备文件吧:),这些函数也不行,一天了,往高手解答下……
解决方案 »
- android如何调用SDCard中的so文件 或如何动态调用网络下载的so文件
- android怎么自定义组件/view
- libffmpeg.so 简单应用
- android imageview 设置图片
- 求 android 搜索通讯录中的特殊字符
- 请教如何在循环中对已有的几个相同控件名且规则数字后缀进行操作
- android的程序运行控制台报错:ActivityManager: - exec '/system/bin/sh' failed: Bad address (
- 收到广播之后,如何与主界面通信?
- 问gallery的子项选择前和选择后的背景颜色改变,如何实现?
- webView打开的页面和手机浏览器打开的不一样
- android 原生music播放器源码
- smdkv210如果升级到android3.0
fopen是没有问题的,我能正常打开T卡的也能打开/data/data下的,只要是普通权限的都能打开..关于你的问题.你最好简单的把代码贴出来比较好分析一点.
不是文件权限
http://hi.baidu.com/lizhengjun2010/blog/item/5fa4f7079da0f793d53f7c39.html
这是我写的简单的读写!你看看能不能给你点提示!