我的操作流程是这样的:
先在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了一下,虽然这些也是操作设备文件吧:),这些函数也不行,一天了,往高手解答下……

解决方案 »

  1.   

    1-3的问题请你自己检查一下你的C函数所定义的头文件和Cpp文件的返回类型是否一致.
    fopen是没有问题的,我能正常打开T卡的也能打开/data/data下的,只要是普通权限的都能打开..关于你的问题.你最好简单的把代码贴出来比较好分析一点.
      

  2.   

    权限指的是你的应用里面的权限, user-permission
    不是文件权限
      

  3.   

    fopen肯定可以的!
    http://hi.baidu.com/lizhengjun2010/blog/item/5fa4f7079da0f793d53f7c39.html
    这是我写的简单的读写!你看看能不能给你点提示!
      

  4.   

    也行是权限问题,修改了 AndroidManifest.xml 了没,可能是需要加 SDCard 的访问权限