下载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工程的更多相关文章

  1. Android jni 二维数组 传递

    学习Android Jni时,一个二维 整数 数组的传递花了我好长时间,在网上查的资料都不全,当然最后是成功了,写在这里是为了自己记住,当然有人搜索到并利用了我会很高兴.   in Android J ...

  2. Android逆向 破解第一个Android程序

    这节正式开始破解编写的第一个Android工程,打开Android Killer,把第一节自己编写的Android apk拖入Android Killer. PS: 如果Android Killer不 ...

  3. Android笔记二十四.Android基于回调的事件处理机制

        假设说事件监听机制是一种托付式的事件处理,那么回调机制则与之相反,对于基于回调的事件处理模型来说,事件源和事件监听器是统一的,或者说事件监听器全然消失了,当用户在GUI控件上激发某个事件时,控 ...

  4. 【Android实验】第一个Android程序与Activity生命周期

    目录 第一个Android程序和Activity生命周期 实验目的 实验要求 实验过程 1. 程序正常启动与关闭 2. 外来电话接入的情况 3. 外来短信接入的情况 4. 程序运行中切换到其他程序(比 ...

  5. Creating an Android Project(创建一个android项目)

    一个android项目包含了你的应用程序中的所有源代码文件,我们可以通过android sdk tools轻松地创建一个拥有默认文件跟文件夹的android项目. 这部分课程我们将展示两种创建andr ...

  6. Spring Boot2 系列教程 (二) | 第一个 SpringBoot 工程详解

    微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 哎呦喂,按照以往的惯例今天周六我的安排应该是待在家学学猫叫啥的.但是今年这种日子就可能一去不复返了,没法办法啊.前 ...

  7. [Android Memory] 怎样使一个Android应用不被杀死

    转载自: http://blog.sina.com.cn/s/blog_3e3fcadd0100yjo2.html 参考:http://blog.csdn.net/windskier/article/ ...

  8. 从零开始学android开发-创建第一个android项目

    打开ADT开发工具

  9. day01_使用Android Studio创建第一个Android项目

    使用Android Studio开发Android项目如此简单 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize ...

  10. Android进阶(二十四)Android UI---界面开发推荐颜色

    Android UI---界面开发推荐颜色   在Android开发过程中,总要给app添加一些背景,个人认为使用纯色调便可以达到优雅的视觉效果. 补充一些常用的颜色值:colors.xml < ...

随机推荐

  1. Java中抽象类和接口的用法和区别

    一.抽象类 1.抽象类 包含一个抽象方法的类就是抽象类 2.抽象方法 声明而未被实现的方法,抽象方法必须使用abstract关键词字声明 public abstract class People { ...

  2. SpringMVC入门1

    SpringMVC核心类与接口 •DispatcherServlet 前端控制器(也称总控制器),把请求给转发到具体的控制类 •HandlerMapping 映射处理器,负责映射中央处理器转发给con ...

  3. CSS中定位position

    毋庸置疑的是,pisition是css中是最重要的属性之一. 一共有四种定位方式,static.relative.absolute.fixed. 默认的定位方式static 页面中所有的元素默认都是s ...

  4. oracle insert &字符插入问题

    例如执行一下语句: insert into NSRXT_SP (SP_ID, SP_TITLE, SP_DESC, SP_URL, SP_TYPE, SP_SUB_TYPE, ADD_TIME, CZ ...

  5. (step5.1.2)hdu 2473(Junk-Mail Filter——并查集)

    题目大意:输入两个整数n,m(n表示点的个数,m表示操作数).在接下来的m行中,对点的操作有两种 1)M a b . 表示将a.b并到一个集合中 2)S a .表示将a从原来的集合中去除,而成为一个单 ...

  6. Radar Installation 贪心

    Language: Default Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 42 ...

  7. POJ1789 Truck History(prim)

    题目链接. 分析: 最大的敌人果然不是别人,就是她(英语). 每种代表车型的串,他们的distance就是串中不同字符的个数,要求算出所有串的distance's 最小 sum. AC代码如下: #i ...

  8. Session之考勤

    昨天初步的调侃了一下cookie,希望看官能够有更轻松愉快的学习和进一步的思考应用. 小编今天突然听到人事怨声载道,原来已多日未进行打卡考勤,虽是弹性工作,也颇有不好意思,决定明日改过,进门刷卡.灵机 ...

  9. jQuery Ajax 实例 ($.ajax、$.post、$.get)【转载】

    本文转载自:http://jun1986.iteye.com/blog/1399242 Jquery在异步提交方面封装的很好,直接用AJAX非常麻烦,Jquery大大简化了我们的操作,不用考虑浏览器的 ...

  10. 拖数据库到x-code常见错误

    拖进去之后,用本地读取的方式读不到路径,重新拖一次,并且把Add to targets 里面的勾勾上