android JNI (二) 第一个 android工程
下载NDK 后 它自带有 sample,初学者 可以导入Eclipse 运行
这里 我是自己创建的一个新工程
第一步: 新建一个Android工程 jni_test(名字自取)
第二步:为工程添加 本地支持
右击工程,选择 android tools -- Add Native support 后,会弹出一个对话框 让你输入 库的名称
这个名字 你可以做修改,也可以使用默认,点击finish 之后,你会发现 该工程里多了几个文件夹,其中有一个叫 jni,这里 就是我们写c代码的地方,jni文件夹里默认产生2个文件,一个是cpp,还有一个是 mk文件
接下来 需要在 Java代码中 加载 库文件,以及声明 本地方法,如下
//声明 本地方法
public native String getStr();
//jni_test 是 库的文件名,也是刚才弹出对话框中 输入的名称,也是编译c文件后 产生的 so文件的名字
static {
      System.loadLibrary("jni_test");
}
注意,如果你需要是在activity里直接使用 本地方法的话,先去掉 extend activity 这段代码
接下来 我们用命令生成 头文件。
通过cd 命令进入工程,然后执行 javah -classpath bin/classes -d jni 使用本地代码的类的全名
如果javah 命令不可用的 ,表示你的java环境变量没有配置对
执行成功后,可以在 jni这个文件夹里 发现 多了一个 .h的文件
当然 你也可以不用 javah 去产生头文件。
产生的头文件名字很长,我们可以做个修改,这里我修改为 jni_test.h
接下来我们需要在 cpp文件里 根据我们的头文件编写 代码
#include <jni.h>
#include <jni_test.h>
JNIEXPORT jstring JNICALL Java_com_zhangyi_android_jnitest_MainActivity_getStr
  (JNIEnv *env, jobject obj){
	return env->NewStringUTF("你好,我来自c");
}
接下来,我们需要修改 activity的代码,因为 java代码 只声明了 本地代码,没有调用, 在布局文件里添加一个文本文件,然后 初始化它(不写代码了哈,能看到这个地方来的人 都是具备一定的android基础) 为该文本控件 设置 内容 为getStr();
代码编写完成,run吧~~~~~~~
android JNI (二) 第一个 android工程的更多相关文章
- Android jni 二维数组 传递
		
学习Android Jni时,一个二维 整数 数组的传递花了我好长时间,在网上查的资料都不全,当然最后是成功了,写在这里是为了自己记住,当然有人搜索到并利用了我会很高兴. in Android J ...
 - Android逆向 破解第一个Android程序
		
这节正式开始破解编写的第一个Android工程,打开Android Killer,把第一节自己编写的Android apk拖入Android Killer. PS: 如果Android Killer不 ...
 - Android笔记二十四.Android基于回调的事件处理机制
		
假设说事件监听机制是一种托付式的事件处理,那么回调机制则与之相反,对于基于回调的事件处理模型来说,事件源和事件监听器是统一的,或者说事件监听器全然消失了,当用户在GUI控件上激发某个事件时,控 ...
 - 【Android实验】第一个Android程序与Activity生命周期
		
目录 第一个Android程序和Activity生命周期 实验目的 实验要求 实验过程 1. 程序正常启动与关闭 2. 外来电话接入的情况 3. 外来短信接入的情况 4. 程序运行中切换到其他程序(比 ...
 - Creating an Android Project(创建一个android项目)
		
一个android项目包含了你的应用程序中的所有源代码文件,我们可以通过android sdk tools轻松地创建一个拥有默认文件跟文件夹的android项目. 这部分课程我们将展示两种创建andr ...
 - Spring Boot2 系列教程 (二) | 第一个 SpringBoot 工程详解
		
微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 哎呦喂,按照以往的惯例今天周六我的安排应该是待在家学学猫叫啥的.但是今年这种日子就可能一去不复返了,没法办法啊.前 ...
 - [Android Memory]   怎样使一个Android应用不被杀死
		
转载自: http://blog.sina.com.cn/s/blog_3e3fcadd0100yjo2.html 参考:http://blog.csdn.net/windskier/article/ ...
 - 从零开始学android开发-创建第一个android项目
		
打开ADT开发工具
 - day01_使用Android Studio创建第一个Android项目
		
使用Android Studio开发Android项目如此简单 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize ...
 - Android进阶(二十四)Android UI---界面开发推荐颜色
		
Android UI---界面开发推荐颜色 在Android开发过程中,总要给app添加一些背景,个人认为使用纯色调便可以达到优雅的视觉效果. 补充一些常用的颜色值:colors.xml < ...
 
随机推荐
- STM8S学习笔记-时钟控制1
			
1.图13可见,STM8S单片机主要有四种时钟源可供选择: 1).1-24MHz外部晶体振荡器(HSE). 2).最大24MHz外部时钟(HSE ext). 3).16MHz高速内部RC振荡器(HSI ...
 - 转:Zend Framework 2.0 分析
			
文章来自于:http://bbs.phpchina.com/thread-268362-1-1.html ZF2已经发布,与ZF1相比,MVC这一模块内部的实现机制可谓大相径庭,许多用过ZF1的PHP ...
 - C++类型转换总结
			
C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a.C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用. const_cast, ...
 - Android-RecyclerView-Item点击事件设置
			
在上一篇博客Android-RecylerView初识中提到,RecyclerView不再负责Item视图的布局及显示,所以RecyclerView也没有为Item开放OnItemClick等点击事件 ...
 - AES - Rijndael 算法(二)
			
三:Rijndael算法实现(C++版本) /*-------------------- Rijndael round subkeys ---------------------*/u8 roundK ...
 - 最受欢迎linux命令
			
1. 以 root 帐户执行上一条命令 sudo !! 2. 利用 Python 搭建一个简单的 Web 服务器,可通过 http://$HOSTNAME:8000访问 python -m ...
 - 大规模Hadoop集群在腾讯数据仓库TDW的实践
			
随着业务的快速增长,TDW的节点数也在增加,对单个大规模Hadoop集群的需求也越来越强烈.TDW需要做单个大规模集群,主要是从数据共享.计算资源共享.减轻运营负担和成本等三个方面考虑. 数据共享.T ...
 - 部分实用的SQL语句
			
一.在数据库创建表格的SQL语句 1,创建一个link表格,包含属性:lid 主键,title 标题, imgpath 图片地址 , url 网址 , info 说明, isshow 显示1 ...
 - linux if 判断字符串是否相等
			
在命令行中修改时间: 如果linux系统时间等于2017-09-09,则ok:否则将当前系统时间修改为2017-09-09 var=`date '+%Y-%m-%d'`;if [ "$var ...
 - oracle中LAG()和LEAD()等分析统计函数的使用方法(统计月增长率)
			
LAG()和LEAD()统计函数能够在一次查询中取出同一字段的前N行的数据和后N行的值.这样的操作能够使用对同样表的表连接来实现,只是使用LAG和 LEAD有更高的效率.下面整理的LAG()和LEAD ...