很久之前做过android+jni+ndk的开发,但是现在都基本忘完了。所以稍微记录一下。

1. Eclipse中创建Android工程,及相应的代码啥的

2. 设置工程为支持Native code

左栏右击工程名,然后选择“Android Tools”-->"Native Support"

3. 在需要加载的地方的类中,使用如下代码

a) 静态载入So库

static { System.loadLibrary(libSoName);}

注:libSoName这里是指你设置的lib的名字,而不是生成的文件名,如想要生成库为test,则生成的文件为libtest.so,而System.loadLibrary(libSoname)中应当写"test"。否则程序无法启动。

b) 声明本地方法

public native String  getStringFromJNI();

c) 在需要的地方调用

调用本地方法

String mStrMSG = getStringFromJNI();

4.代码写好之后,生成用于c开发的头文件

进入android的工程目录,然后进入bin/classes目录,执行命令

javah <包名>.<类名>

从而生成一个用于c文件引用的头文件,其中声明了相应的函数,如getStringFromJNI的原型。

5. 将生成的头文件复制到工程目录下的jni目录下,然后根据其中的声明,在cpp中对相应函数进行c/c++的实现。

6. 在工程目录下,使用ndk—build命令,生成动态链接库。

7. 直接打包、调试程序即可。


此外,中间过程可能遇到WARNING:APP_PLATFORM等问题,可参考此帖子。大致如下:

问题:
Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml

解决方法:
android-ndk-r8c/build/core/add-application.mk第128行把__ndk_warning改为__ndk_info;

this problem may be safely fixed by changing this line in add-application.mk from __ndk_warning to __ndk_info
修改方案的原文地址:这里


前面关于javah生成jni头文件的过程写的略简单了。做一点补充:

对于android高版本中工程默认加入了一些向下兼容的包。所以在生成时需要指定这些jar的路径。一个是v7,一个是v4,具体根据工程,最后再附加上android.jar。(对于jar的路径指定用bootclasspath)。所以,一个例子如下:

javah -d jni -bootclasspath 【sdk path】/platforms/android-19/android.jar:../appcompat_v7/libs/android-support-v7-appcompat.jar:../appcompat_v7/libs/android-support-v4.jar -classpath bin/classes your.classes

注意到一般默认情况下,v7和v4等兼容性包的目录和当前工程平行。

更多相关文章

  1. Android(安卓)!No Launcher activity found!错误
  2. Android入门教程(四)之------Android工程目录结构介绍
  3. Android入门教程(四)之-------->Android工程目录结构介绍
  4. Android(安卓)NDK 简介
  5. Android入门教程(三)之------导入现有Android工程
  6. Android入门教程(四)之------Android工程目录结构介绍
  7. [Android][Android(安卓)Studio] *.jar 与 *.aar 的生成与*.aar
  8. Android(安卓)工程目录结构介绍
  9. Android(安卓)源代码结构

随机推荐

  1. Android(安卓)Interactive Animation
  2. Eclipse用svn管理Android项目问题 (转来
  3. 怎么样搭建Android开发平台
  4. Android 网络安全配置
  5. 手机应用开发 第三节:PhoneGap and Dojo M
  6. Android 架构组件的最新进展
  7. TextView支持的XML属性及相关方法
  8. Android酷炫实用的开源框架(UI框架)
  9. Android赋予内置三方应用应用权限
  10. Android studio和Eclipse使用的简单感受