如:public native String getStringFromJNI();
-----------------------------------------------------------
C文件中本地方法名的命名规则
如:jstring Java_com_duicky_MainActivity_getStringFromJNI( JNIEnv* env,jobject thiz )
Jstring 为 返回值 ,也可以为 void , jint 等等 类型
Java_com_duicky_MainActivity_getStringFromJNI 为方法名,其中以下划线(_)隔开,初始Java 为默认写法, com_duicky为包名, MainActivity为类名, getStringFromJNI为声明本地方法的方法名字
---------------------------------------------------------------
打印LOG
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog
#include< android/log.h>
__android_log_print(ANDROID_LOG_INFO, "JNIMsg", "Your params is null");
JNIMsg 为 你想输出到的过滤标签
Log Content 为你 想输出的相关信息,用法与C的Printf一样
--------------------------------------------------------------------
include $(call all-subdir-makefiles)
它会将所有的在子目录中的Android.mk文件加入到当前编译文件的路径中
------------------------------------------------------------------------
写一个Application.mk编译文件(可选)
在你的编译系统中有一个Android.mk文件描述模块的同时,Application.mk文件藐视你的应用程序本身。请看docs/APPLICATION-MK.html文档来理解这个文件允许我们做什么。这包括
你的应用程序需要模块的准确清单
CPU架构生成机器代码
可选信息,你是否需要一个release或者debug build,特殊的C/C++编译器标志和其他适用于所有模块的build
这个文件是可选文件:默认地,NDK会提供一个对于所有的在你的Android.mk(所有的makefiles都在里面)中的所有模块的简单编译并且指定默认的CPU ABI
使用Application.mk有两种方法:
把它放到 test/jni/Application.mk,它就会自动的被’ndk-build’脚本找出来
把它放在NDK/<name>/Application.mk,也就是NDK安装的路径下,然后从NDK目录下执行”make APP=<name>”
这个方法是Android NDK r4以前的。现在仍然兼容。但是我们强烈建议你使用第一种方法,因为它更简单并且不用修改NDK安装树的目录。
再次看看docs/APPLICATION-MK.html对于它的完整说明
--------------------------------------------------------------------------
使用$NDK/apps/<name>/Application.mk
这种build方法是在Android NDK r4版本之前的,不过依然兼容现在的。我们强烈建议您尽可能的使用’ndk-build’,因为我们可能会删除在以后的NDK发行版本中的支持
① 创建一个子目录为$NDK/apps/<name>/
② 在$NDK/apps/<name>/目录下写一个Application.mk文件,然后需要定义一个APP_PROJECT_PATH来执行你的应用程序项目的目录。
③ 进入到NDK安装目录,然后再输入如下的命令
$cd $NDK
注意:输入cd $NDK后,会自动跳到你设置的ndk的目录中$make APP=<name>或$make APP=<name> -B 表示重新编译,结果跟第一种方法一样,除了中间文件被放置到了$NDK/out/apps/<name>/
----------------------------------------------------------------------
调试支持NDK提供了一个服务脚本,名字叫”ndk-gdb”,很容易推出一个应用程序的本地调试会话。
本机调试仅仅能运行在Android 2.2或者更高版本,并且不需要root权限或者特权访问,所以可以随意调试你的应用程序。
有关详细信息,请阅读DOCS / NDK- GDB.html。总括而言,本机调试遵循这个简单的计划:
(1)确保您的应用程序调试(如设置机器人:调试“真”,在您的AndroidManifest.xml)
(2) “NDK构建”构建您的应用程序,然后安装在您的 设备/模拟器
(3)启动应用程序。
(4)运行“ndk-gdb”从你的应用程序项目目录。
----------------------------------------------------------------------
Java 方法映射到C中的签名
其实仔细看看发现就是对应java类型的首字母拉, Boolean比较特殊, 对应的是 Z , Long 对应J
引用数据类型:比较麻烦点,以“L”开头,以“;”结束,中间对应的是该类型的路径
如:String : Ljava/lang/String;
Object: Ljava/lang/Object;
自定义类 Cat 对应 package com.duicky;
Cat:Lcom/duicky/Cat;
数组表示: 数组表示的时候以“[” 为标志,一个“[”表示一维数组
如:int [] :[I
Long[][] : [[J
Object[][][]:[[[Ljava/lang/Object;
其实仔细看看发现就是对应java类型的首字母拉, Boolean比较特殊, 对应的是 Z , Long 对应J
引用数据类型:比较麻烦点,以“L”开头,以“;”结束,中间对应的是该类型的路径
如:String : Ljava/lang/String;
Object: Ljava/lang/Object;
自定义类 Cat 对应 package com.duicky;
Cat:Lcom/duicky/Cat;
数组表示: 数组表示的时候以“[” 为标志,一个“[”表示一维数组
如:int [] :[I
Long[][] : [[J
Object[][][]:[[[Ljava/lang/Object;