1、jni调用的本地方法,必须在java中用native关键字声明
2、在应用程序的开始是用静态调用该库,不需要‘lib’前缀和’.so‘后缀
static {
System.loadLibrary("FileLoader");
}
3、ndk可以做:
1、生成jni兼容的共享库,可以运行在android1.5以上的平台,在arm cpu
2、复制生成的共享库到你的工程的合适的位置,因此,最终将自动的添加到你的apk中
3、以后将有可能集成gdb调试本地代码
总的来说,ndk提供了:
1、一些交叉编译工具,能够生成在linux,os x windows上运行在arm新闻的binaries
2、一系列的有android平台提供的稳定的本地api,及相应的头文件位于:docs/STABLE-APIS.html
3、一个编译系统,允许开发者仅仅写非常短的编译文件,这些文件描绘了那些资源需要被编译,和怎样编译,这些在 toolchain/platform/CPU/ABI指定了,
4、ndk开发练习:
1、把本地代码放到$PROJECT/jni/...下
2、写$PROJECT/jni/Android.mk来描述ndk系统编译的资源
3、(可选的)下一个$PROJECT/jni/Application.mk来描绘编译系统更多的细节,具体看docs/APPLICATION-MK.html
4 、进入项目目录$PROJECT/,运行ndk-build,即可生成共享文件,以lib(something).so的
5、放置c或c++源码
$PROJECT/jni/sample.cpp
6、写一个Android.mk编译脚本
语法描述在 docs/ANDROID-MK.html中
在一个脚本中,ndk将你的代码组装成模块‘module’,每个模块可能是
一个静态的模块, a static library
一个共享模块, a shared library
你可以在一个单一的Android.mk中定义几个模块,或者写几个Android.mk文件,每个文件定义了一个单一的模块
如果想在$PROJECT/jni/下,想有子目录,在子目录中写Android.mk,那么必须在jni/Android.mk顶级中声明子目录
include $(CALL ALL-subdir-makefiles)
这将包括所有的Android.mk文件和子文件到当前的编译路径目录
7、(可选的)写一Application.mk文件
Android.mk文件描述了编译模块,而这个Application.mk描述应用本身
docs/APPLICATION-MK.html
包括:
1、确切的需要的模块列表
2、生成的cpu体系结构
3、可选的信息,像,是否是发布编译或是调试编译,指定c或c++编译器标致,和其他应用到模块中
这个文件是可选的,默认情况下,ndk会提供一个,仅仅编译 *all* 从Android.mk中所有的模块,和所有的makefile和目标cpu ABI
有两种方法使用Application.mk
1、放在$PROJECT/jni/Application.mk,这将被ndk-build自动加载
2、放在$NDK/apps/<name>/Application.mk,$NDK是ndk安装目录,然后,运行 make APP=<name>从NDK目录
强烈建议使用第一种
8、调用NDK编译系统
1、使用ndk-build编译
cd $PROJECT
ndk-build ->应该把ndk的安装目录添加进入环境变量PATH
默认情况下,这个命令期望找到$PROJECT/jni/Application.mk和$PROJECT/jni/Android.mk
看docs/NDK-BUILD.html看详细的编译
9、指定输出目录
默认情况下,ndk-build把生成的文件放在$PROJECT/obj/下,你可以选择一个路径通过指定NDK_OUT环境变量指向不同的目录,这个变量有两个影响:
1、这确保将所有的正常情况在$PROJECT/obj/下的文件存储在$NDK-OUT下
2、告诉ndk-gdb去查询$NDK_OUT,而不是obj下
10、调试支持
可以在Android2.2以上的设备上调试 docs/NDK-GDB.html
1、确保你的应用是可以调试的,(eg.set android:debuggable="true"in your AndroidManifest.xml)
2、编译你的应用用ndk-build,然后安装到你的设备或模拟器中
3、启动你的应用
4、运行 ‘ndk-gdb’ 在你的应用目录 $PROJECT/下
参照gdb提示
2、在应用程序的开始是用静态调用该库,不需要‘lib’前缀和’.so‘后缀
static {
System.loadLibrary("FileLoader");
}
3、ndk可以做:
1、生成jni兼容的共享库,可以运行在android1.5以上的平台,在arm cpu
2、复制生成的共享库到你的工程的合适的位置,因此,最终将自动的添加到你的apk中
3、以后将有可能集成gdb调试本地代码
总的来说,ndk提供了:
1、一些交叉编译工具,能够生成在linux,os x windows上运行在arm新闻的binaries
2、一系列的有android平台提供的稳定的本地api,及相应的头文件位于:docs/STABLE-APIS.html
3、一个编译系统,允许开发者仅仅写非常短的编译文件,这些文件描绘了那些资源需要被编译,和怎样编译,这些在 toolchain/platform/CPU/ABI指定了,
4、ndk开发练习:
1、把本地代码放到$PROJECT/jni/...下
2、写$PROJECT/jni/Android.mk来描述ndk系统编译的资源
3、(可选的)下一个$PROJECT/jni/Application.mk来描绘编译系统更多的细节,具体看docs/APPLICATION-MK.html
4 、进入项目目录$PROJECT/,运行ndk-build,即可生成共享文件,以lib(something).so的
5、放置c或c++源码
$PROJECT/jni/sample.cpp
6、写一个Android.mk编译脚本
语法描述在 docs/ANDROID-MK.html中
在一个脚本中,ndk将你的代码组装成模块‘module’,每个模块可能是
一个静态的模块, a static library
一个共享模块, a shared library
你可以在一个单一的Android.mk中定义几个模块,或者写几个Android.mk文件,每个文件定义了一个单一的模块
如果想在$PROJECT/jni/下,想有子目录,在子目录中写Android.mk,那么必须在jni/Android.mk顶级中声明子目录
include $(CALL ALL-subdir-makefiles)
这将包括所有的Android.mk文件和子文件到当前的编译路径目录
7、(可选的)写一Application.mk文件
Android.mk文件描述了编译模块,而这个Application.mk描述应用本身
docs/APPLICATION-MK.html
包括:
1、确切的需要的模块列表
2、生成的cpu体系结构
3、可选的信息,像,是否是发布编译或是调试编译,指定c或c++编译器标致,和其他应用到模块中
这个文件是可选的,默认情况下,ndk会提供一个,仅仅编译 *all* 从Android.mk中所有的模块,和所有的makefile和目标cpu ABI
有两种方法使用Application.mk
1、放在$PROJECT/jni/Application.mk,这将被ndk-build自动加载
2、放在$NDK/apps/<name>/Application.mk,$NDK是ndk安装目录,然后,运行 make APP=<name>从NDK目录
强烈建议使用第一种
8、调用NDK编译系统
1、使用ndk-build编译
cd $PROJECT
ndk-build ->应该把ndk的安装目录添加进入环境变量PATH
ndk-build clean -->清楚生成的二进制文件
ndk-build -B V=1 -->强制从编译默认情况下,这个命令期望找到$PROJECT/jni/Application.mk和$PROJECT/jni/Android.mk
看docs/NDK-BUILD.html看详细的编译
9、指定输出目录
默认情况下,ndk-build把生成的文件放在$PROJECT/obj/下,你可以选择一个路径通过指定NDK_OUT环境变量指向不同的目录,这个变量有两个影响:
1、这确保将所有的正常情况在$PROJECT/obj/下的文件存储在$NDK-OUT下
2、告诉ndk-gdb去查询$NDK_OUT,而不是obj下
10、调试支持
可以在Android2.2以上的设备上调试 docs/NDK-GDB.html
1、确保你的应用是可以调试的,(eg.set android:debuggable="true"in your AndroidManifest.xml)
2、编译你的应用用ndk-build,然后安装到你的设备或模拟器中
3、启动你的应用
4、运行 ‘ndk-gdb’ 在你的应用目录 $PROJECT/下
参照gdb提示