背景:对于Android工程 Eclipse里编译好的.so文件放到 libs\armeabi下以后,这样.so文件就可以打包到apk文件里,在apk装到手机上以后在libs\armeabi下的.so文件应该就会解压到/data/data/这里是你project的包名(比如com.first.second)/lib下。

问题:写了个测试的android JNI app,.so已经放到了libs\armeabi下而且从编译的apk里也能看到.so已经打包进去(解压apk文件,里边应该有lib文件夹)但是在/data/data/com.test.test/lib下就是没有相应的.so文件

解决方法:原来是因为我的.so没有按照android标准命名,.so的名字必须有'lib'前缀否则apk解压/安装到手机的时候不会把libs\armeabi下的.so拷贝到/data/data/com.test.test/lib下。原来我用的so名字是JNITest.so,改为libJNITest.so后一切正常。

补充:
a) 用loadLibrary调用的时候需要去掉lib前缀 System.loadLibrary("JNITest");
b) 用load调用的时候需要写全路径名 且不能去掉lib前缀 因为这里是当成一个普通文件读取的 System.load("/data/data/com.test.test/libJNITest.so");


1:建一个androd项目 在src下写一个Demo.java包括一些jni方法如下:

public native getData();

2:把Demo.java生成一个c的头文件 然后在这个头文件下写相关的c方法

步骤如下:

从cmd进入到android项目的bin目录下:输入 javah -classpath.jni tao.hai.bing.Demo

(注意有时候javah找不到,要把javah.exe目录加入到环境变量中去,path。。。)

3:在bin目录下找到生成的头文件

4:在ndk目录下操作

1)在ndk中的source目录下建一个demo文件夹并建一个Android.mk文件

内容如下:

LOCAL_PATH :=${call my-dir}

include ${CLEAR_VARS}

LOCAL_MODULE :=demo//app会用到 生成的文件是libdemo.so文件

LOCAL_SRC_FILES :=tao_hai_bing_Demo.c 编译的文件

LOCAL_CFLAGS :=**.c 项目需要的.h头文件目录列表

LOCAL_LDLIBS :=**.so

2)在App目录下建一个和source目录下建的文件夹一个名称

加入一个Application.mk文件 内容如下:

APP_PROJECT_PATH := ${call my_dir}/project

APP_MODULES:=demo

3)点击cygwin的批处理输入: cd $ANDROID_NDK_ROOT ->make APP=demo

4)这样就会在ndk目录的app文件夹的demo内生成project目录把lib目录拷贝到

android项目的下和src并集

5:android项目调用so文件的内容

在android的activity类下加入如下方法:

static

{

System.loadLibrary("demo");

.....

Demo demo = new Demo()

demo.getData();//这样这个数据就从c文件传过来的

.....

}

更多相关文章

  1. eclipse配置Android(安卓)sdk 时,网址:http://dl-ssl.google.com/
  2. [置顶] Android中保存数据常用的方法
  3. A005-AS项目结构解析
  4. Android获取网络图片并显示的方法
  5. http://www.jianshu.com/p/7e46fe7485bb
  6. Android的程序关联和自定义类型文件的方法步骤和实现过程
  7. Ubuntu下使用Android(安卓)ADB
  8. Android实现自定义带文字和图片的Button
  9. Android动态加载so文件

随机推荐

  1. android查看网络图片的实现方法
  2. android 实现分享功能
  3. android adb命令打印logcat日志 到指定目
  4. 如何获取 android 的系统日志 logcat
  5. 利用Android(安卓)Studio将Protobuf文件
  6. android support-v4、v7、v13
  7. widget
  8. android .mk 引用第三方jar包(参考 Calcul
  9. iOS Android(安卓)WebView 通过 Cookie
  10. android中联系人以及 ContactsContract类