说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Android NDK之JNI使用例子

HTML文档下载 WORD文档下载 PDF文档下载
目前Android NDK只能编译出动态库.so文件,并不是能生成.apk文件,这里我们简单介绍下NDK中的Hello JNI列子。

 

作者:Android开发网
  目前Android NDK只能编译出动态库.so文件,并不是能生成.apk文件,这里我们简单介绍下NDK中的Hello JNI列子。整个例子分Java和Native C两个部分。首先是我们常用的Java端调用部分。

 

作者:Android开发网

 

  目前Android NDK只能编译出动态库.so文件,并不是能生成.apk文件,这里我们简单介绍下NDK中的Hello JNI列子。整个例子分Java和Native C两个部分。首先是我们常用的Java端调用部分。

package com.example.hellojni;import android.app.Activity;import android.widget.TextView;import android.os.Bundle;public class HelloJni extends Activity{    @Override    public void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        TextView  tv = new TextView(this);        tv.setText( stringFromJNI() ); //如果调用失败将会抛出 java.lang.UnsatisfiedLinkError异常        setContentView(tv);    } //注意下面的native关键字    public native String  stringFromJNI();     public native String  unimplementedStringFromJNI();     static {        System.loadLibrary("hello-jni"); //载入hello-jni库    }  }
需要注意的是这里必须设置SDK版本为1.5或以上版本即在androidmanifest.xml文件中指明<uses-sdk android:minSdkVersion="3" /> 这里我们看到JNI调用无需特殊的权限。
 而在Native C/C++中我们可以直接使用C++库,不过这里包含了jni这个头文件。
#include <string.h>#include <jni.h>
其中下面的返回类型jstring是VM String,在jni.h头文件中有定义
jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ){    return (*env)->NewStringUTF(env, "Hello from JNI, Android123 Test!");}
其实很好理解的,仅仅是换个了别名而以,定义如下
typedef uint8_t         jboolean;       /* unsigned 8 bits */typedef int8_t          jbyte;          /* signed 8 bits */typedef uint16_t        jchar;          /* unsigned 16 bits */typedef int16_t         jshort;         /* signed 16 bits */typedef int32_t         jint;           /* signed 32 bits */typedef int64_t         jlong;          /* signed 64 bits */typedef float           jfloat;         /* 32-bit IEEE 754 */typedef double          jdouble;        /* 64-bit IEEE 754 */#elsetypedef unsigned char   jboolean;       /* unsigned 8 bits */typedef signed char     jbyte;          /* signed 8 bits */typedef unsigned short  jchar;          /* unsigned 16 bits */typedef short           jshort;         /* signed 16 bits */typedef int             jint;           /* signed 32 bits */typedef long long       jlong;          /* signed 64 bits */typedef float           jfloat;         /* 32-bit IEEE 754 */typedef double          jdouble;        /* 64-bit IEEE 754 */#endiftypedef jint            jsize;
还有一些调用平时注意的声明
#define JNI_FALSE   0#define JNI_TRUE    1#define JNI_VERSION_1_1 0x00010001#define JNI_VERSION_1_2 0x00010002#define JNI_VERSION_1_4 0x00010004#define JNI_VERSION_1_6 0x00010006#define JNI_OK          (0)         /* no error */#define JNI_ERR         (-1)        /* generic error */#define JNI_EDETACHED   (-2)        /* thread detached from the VM */#define JNI_EVERSION    (-3)        /* JNI version error */#define JNI_COMMIT      1           /* copy content, do not free buffer */#define JNI_ABORT       2           /* free buffer w/o copying back */#define JNIIMPORT#define JNIEXPORT#define JNICALL

 

 

iOS开发者讲述在Google工作的三个月 GitHub历史上最糟糕宕机事故回放及反省 疑因竞争 谷歌有意让地图与WP手机不兼容 移动游戏开者必看:海外VC最关心什么? 淘宝UED:随侃设计师的个人素养 TIOBE 2013年1月:不负重望 Objective-C再次赢得桂冠! 大数据:商业或技术的挑战? 开源移动统计:Cobub Razor近期版本大升级 无人机应用,为何屡遭苹果拒绝 2013年Java继续火的五大理由 Rails所有版本都有SQL注入漏洞?其实没那么严重 如何设置Windows Server 2012 NTFS权限 智能手机大局已定 HTC难扭转乾坤? 比谷歌手表更酷!基于大数据分析的睡衣 众投资金:改变了移动游戏开发的一切一切 这些科技产品和革新或在今年“横空出世”?! 现代Objective-C七宗罪 Google工程总监Ray Kurzweil意欲打造“虚拟朋友” 惠普开源JavaScript框架Enyo更新:支持桌面和移动平台 分析:三星或将成为科技行业第五巨头 是真的 诺基亚真有可能推Android手机 如何打造IE10的指尖触碰式用户体验 SUSE全球OEM联盟总监:为何SAP HANA只选择SUSE? 推荐2013年最佳PHP开发框架 Patrick Wyatt:代码没问题 程序却有bug? NoSQL的可靠性及扩展操作 最新Skype加密技术:“无声”通话能躲过FBI监听 谷歌锁死SDK,能阻止Android碎片化吗? KitCam团队专访:为应用做加法也能雄踞榜首 谷歌哭了:Replicant 4.0 SDK发布搅乱大局 忍者神龟与禅宗启示:如何突破移动广告困境 取时间中的时,分,秒 为何3dmax5的界面英文显示不全? 如何把中文字符串转成utf8? 想到上海找工作,谁愿意给落个脚啊! jb8连接interbase的问题,有谁知道啊 如何分页显示数据库里的图片 怎样判断一个控件是否处在最上层,马上给分? 关于md5编译出错 急需高手解决 哭,IIS下ASP无法调试,极不稳定。求大侠进来帮忙。 请问谁有或者谁知道NASM语法或教程,最好是中文的!谢谢了! 高人!帮忙呀!!!谢谢!! 急啊~关于ADO的和SQL的问题~达人快来帮忙啊 datagrid动态改变一行的背景色this.DataGrid1.Items[oldselectindex].backcolor=System.Drawing.Color.Red;为什么不工作啊? 第一次用ORACLE,在哪里批量执行SQL脚本啊 为什么我的网页不能引用*.js了???在ie/visual studio能设置吗?怎么设置?? 关于日期类型,在线等,马上给分 sql*plus登陆不进去了!! 请问怎么调试DLL中的代码啊??? dddw的数据取值问题,百思不得其解。 再问一个简单问题,为啥函数总是执行两次? 100分求助使用axis开发web services的问题 求一个字符串简单加密算法源码,300分决不食言!!!!! 如何使得下载的excel文件在新页面中打开? datalist问题 帮帮这个菜鸟!!! 新手求助?谁有较好的打印控件,或较好的解次方案? 如何在程序部署时授予某文件夹对文件的写访问权? 不能重定向是什么原因? 想用Mediaplaer控件播放某个声音文件若干次,怎么控制? 如何通过窗口句柄来获得窗口所在进程的ID 怎么找到DataGrid中的Table呢? 请问用VB怎么才能把1个数据库里的表全部读入LISTBOX里? JmaiL 发邮件的问题?? 备份还原问题 如何用钩子得到中文啊? interbase的存储过程中如果想返回多条结果应该怎么办? 请问!谁能提供算命、测字等原代码和后台库!!500分相送!!!! 我的用客户端连上ORACLE,怎么我的SQLPULS打开中文全是乱码,执行语句后看不到结果是什么 方案讨论:如何自定义并实现错误与例外Exception处理对象,并建立里统一的ErrorMsg 读数据库错误??急急急,在线等(马上给分) 缓存 到的 是什么定义啊 (斑竹来 告诉我吧) 系统分析师、系统设计师有什么区别? DB2技术讨论(1)如何简单理解表空间的定义 vc的ado数据库连接问题 请问linux的个人版和服务器版到底有什么区别?? DB2技术讨论(2)如何简单理解表模式的定义 int& operator[] (unsigned i); 存储过程问题 DB2技术讨论(3)如何处理索引 马上结:我用ASP和JSP分别写了一个人主页,可是服务器只支持PHP,所以我要写PHP.. 我要构建一个网吧?回答问题者都有分 作文为啥这么难写 一个正方形和一个三角形面积相等三角形的底是6分米高是12分米则正方形的周长是多少面积是多少急 自行车的前、后齿轮如果前齿轮转了1200圈那么后齿轮转了多少圈(前齿轮半斤是3厘米,后齿轮半斤是10厘米) 为什么L'oreal和L'OCCITANE名字前面都有L'?明明不发音,去掉也可以,有什么特殊含义吗? How do you think TVs in the future ,will be?什么句型 意思 pma在压力方面是什么意思?比如1.6pma, 正方形加三角形等于240,正方形等于三个三角正方形等于多少,三角等于多少? 正方形减三角形等于270,正方形等于4个三角形等于多少?正方形等于多少? 我收到的一份厚礼,作文,要求:1内容真实2,600字以上.不要网上有的. 聊斋志异 地震 课文记述了那三方面 为什么作文怎么这么难写 杭州一快递员送货路上猝死 过度劳动付日本人气电子宠物菲比精灵 可用iPh德国反驳美国抨击 称顺差体现竞争力2013亚洲旅游节:探索亚洲旅游业发广西和泰国教育交流日趋密切日本今日起举行大规模“夺岛”演习 被澳大利亚两个月间39人遭遇隆胸假体破美澳等多国驻外使馆被曝精心伪装 监听美国务卿首承认:某些时候美间谍活动走朴槿惠访欧正值韩英建交130周年 英经济滞缓导致欧元区通胀率降至2009皮雕 任艺术在居室肆意飞扬毒贩保护伞陈宇铿领刑启事广告扫一扫自助下单帮你手高铁时速明年提至350公里?被指抄袭“夏洛”索赔已立案福田升级打造“创新创业创客高地”纪念孙中山诞辰149周年明星的双十一 买买买!卖卖卖!家电企业体育营销卷土重来一天花8亿全省排第三 莞人“败家”最敢于上调目标 恒大有啥狠招葫芦小仙伪善是如何炼成的亡灵八枢营脚踏朱门绝世玄灵变杀戮神星淅沥都市死亡游戏说不出口我爱你逆袭凶猛道法劫荒红花湖水库旅游辽河湿地公园旅游辽河碑林旅游月牙湾湿地公园旅游葫芦岛港旅游玉皇庙旅游沙伊东香梨园旅游塔里木沙漠公路旅游库车王府旅游库车大巴扎旅游天山神秘大峡谷旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘