NDK 之 注意事项

声明本地方法必须加关键字native

如: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;


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值