Android NDK开发入门实例
写这个,目的就是记录一下我自己的NDK是怎么入门的。便于以后查看,而不会忘了又用搜索引擎一顿乱搜。然后希望能够帮助刚学的人入门。先转一段别人说的话:
“NDK全称:Native Development Kit。
1、NDK是一系列工具的集合。
* NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。
* NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。
* NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。
2、NDK提供了一份稳定、功能有限的API头文件声明。
Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。”
在深入理解之前,暂且就把NDK当成是一种工具,这种工具使得JAVA能够使用C/C++编译出的so包。并将此包一起打入apk包中。
下面开始正式入门:
一、开发环境搭建(以Windows平台下为例,Linux平台下类似)
1. 下载NDK压缩包,至于从哪里下载借助搜索引擎吧。
2. 解压NDK压缩包,配置环境变量。将解压的地址写入环境变量PATH中
3. 在命令提示符下输入ndk-build如果弹出如下的错误,而不是说ndk-build not found,就说明ndk环境已经安装成功了。特别提示一下,搜索引擎中会告诉一些早期的NDK版本的使用,是在命令提示符下输入build/host-setup.sh;但是NDK经过更新,这个文件已经没有了。只需要输入ndk-build就可以了。
Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
/home/braincol/workspace/android/android-ndk-r5/build/core/build-local.mk:85: *** Android NDK: Aborting . Stop.
4. cygwin的安装,至于如何安装,从哪里安装也去借助搜索引擎吧。在Cygwin安装过程中,可能比较慢,必须安装的项目有make和gcc;建议安装下面几个包:autoconf2.1 ,automake1.10 ,binutils ,gcc-core ,gcc4-core ,gdb ,pcre ,pcre-devel,都安装最新版本。安装完毕后,运行Cygwin,输入"make -v"和"gcc -v"来检测是否安装成功;make版本要在3.81以上。
5. 以上任务结束后,就表示基本的开发环境搭建完成了。
二、编写JAVA代码
1. 建立一个android的工程HelloJni,创建MainActivity.java文件。
MainActivity.java:
package com.my.hellojni;
import android.app.Activity;
public class MainActivity extends Activity {
private TextView display;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
display = (TextView) findViewById(R.id.display);
exe();
}
public void exe(){
Utils utils = new Utils();
display.setText(utils.stringFromJNI()
+" 10+5="+String.valueOf(utils.add(10, 20))
+" 10-5="+String.valueOf(utils.sub(10, 5))
+" 10*5="+String.valueOf(utils.multi(10, 5))
+" 10/5="+String.valueOf(utils.div(10, 5)));
}
}
Uitls.java
package com.my.hellojni;
public class Utils {
public native String stringFromJNI();
public native double add(double a, double b);
public native double sub(double a, double b);
public native double multi(double a, double b);
public native double div(double a, double b);
static {
System.loadLibrary("hello-jni");
}
}
编译一下工程 (即:运行一下工程,会报错,不用管)
运行命令 开始--》运行----》cmd
找到工作空间下该项目 E:\myroot\bwandroidspace\HelloJni>
输入 javah -classpath bin/classes -d jni com.my.hellojni.Uitils
这时在工程里就会生成jni文件夹,里面有.h文件
打开.h文件 周到对应的方法
根据对应的方法写.C文件
写好.C文件后在配置的ndk线面找到 E:\android-ndk-r7\samples\hello-jni\jni
下的 Android.mk文件复制到你工程中的jni文件夹中
打开Android.mk文件
更改对应的LOCAL_MODULE 和 LOCAL_SRC_FILS(次例子中不用更改,因为引用类库名也是hello-jni)
改好后
打开Cygwin 找到对应的路径 cygdrive/e/myroot/bwandroidspace/HelloJni
输入 :
这事重新打apk包就成功了!