需要进行jni的开发有一下几个条件:

1:能初步使用C/C++如果不会,请参读 谭浩强的  C编程语言

2:android应用开发已经基本入门,如果没有,请先行学习

这两个条件基本满足后,我们开始了:

1:环境搭建

相信大家android开发环境是有的哦

A:给eclipse添加 C/C++文件。在 eclipse的help的install new software

B:由于我是windows平台的环境(所以需要安装一个  Cygwin 这个是来模拟我们的linux操作系统的,因为android底层就是一个linux操作系统)

C:安装ndk(ndk是用来跨平台编译的    如果你C学的比较好的话,你会了解:在windows下编译的C代码是无法给java调用的,也无法放到linux系统使用(跨平台性不如java))

这仨就自己百度一步一步搭建吧,由于比较大,我这放哪也不清楚,有机会我会把这些打包放到  网盘供大家下载的,现在大家还是先到其他地方找找教程,搭建一下环境,如果是从网络下载顺利的话,这个安装过程可能需要1-2天

环境搭建完成了,接下来我们就写一个helloworld吧:

看一下目录结构:比我们正常的android应用多了一个  jni目录

我们在里面写了简单的几行c代码:

Hello.c

#include <stdio.h>
#include <jni.h> jstring Java_com_test_ndk1_MainActivity_helloFromJNI(JNIEnv* env, jobject obj){ //输出一个java字符串
//返回一个java字符串
//jstring (*NewStringUTF)(JNIEnv*, const char*);
char* cstr = "helloFromJNI"; return (**env).NewStringUTF(env, cstr); }

注意,这个C可能和我们传统的C编程不太一样,后面我会详细分解这个C怎么写的。

然后,我们在我们的android的项目中去调它

编写  Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := Hello
LOCAL_SRC_FILES := Hello.c include $(BUILD_SHARED_LIBRARY)

这个相当于一个跨平台的make,熟悉linux的朋友一定知道 linux下的makefile这个玩意儿,不知道也就先不管了,后面会详细解释,这儿就先不说了

MainActivity

package com.test.ndk1;

import com.test.ndk1.R;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast; public class MainActivity extends Activity { //加载函数库
static
{
System.loadLibrary("Hello");
} //本地方法 由C实现
public native String helloFromJNI(); @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} public void click(View view){
//调用c代码
Toast.makeText(this, helloFromJNI(), 0).show();
}

简单的,点击一个按钮,弹出一个土司,土司内容是  C中的 helloFromJNI() 函数(C中我们通常说一个方法是函数,同一个概念)的返回值

然后,很简单的布局文件:activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" > <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="调用C代码"
android:onClick="click"/> </RelativeLayout>

ok,项目写完了,接下来的工作是编译

打开cygwin,进入到工程的jni目录下(linux如何进入一个目录,自己稍微看下,和windows基本差不多,如果是要cygwin切换到C盘以外的目录,那就先到根目录,里面有个cygdrive的目录,里面的d e f等就对应你的 D E F盘)

执行  ndk-build

编译成功:

刷新一下工程,可以看到一个obj目录:

然后ndk又帮我们将 libHello.so自动封装到了 libs目录下,自己可以打开看下哦,我就不上图了

运行程序:


ok了,第一个helloworld到此结束,后面我会陆续分享一些原理性的东东给大家哦

jni 入门 android的C编程之旅 --->环境搭建&&helloworld的更多相关文章

  1. 基于 Android NDK 的学习之旅-----环境搭建

    工欲善其事 必先利其器 , 下面介绍下 Eclipse SDK NDK Cygwin CDT 集成开发环境的搭建. 1.Android 开发环境搭建 Android开发环境搭建不是重点,相信看此文章的 ...

  2. Android基础-系统架构分析,环境搭建,下载Android Studio,AndroidDevTools,Git使用教程,Github入门,界面设计介绍

    系统架构分析 Android体系结构 安卓结构有四大层,五个部分,Android分四层为: 应用层(Applications),应用框架层(Application Framework),系统运行层(L ...

  3. Redis入门很简单之一【简介与环境搭建】

    Redis入门很简单之一[简介与环境搭建] 博客分类: NoSQL/Redis/MongoDB redisnosqlmemcached缓存中间件  [Redis简介] <一>. NoSQL ...

  4. Android NDK 开发(一)--环境搭建【转】

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/41800955 Android下的NDK开发是Android开发中不可或缺的一部分, ...

  5. Android最简单的实例 :环境搭建及HelloWorld

    Android开发之旅:环境搭建及HelloWorld 2010-04-12 00:45 by 吴秦, 883961 阅读, 140 评论, 收藏,  编辑 ——工欲善其事必先利其器 引言 本系列适合 ...

  6. 【定有惊喜】android程序员如何做自己的API接口?php与android的良好交互(附环境搭建),让前端数据动起来~

    一.写在前面 web开发有前端和后端之分,其实android还是有前端和后端之分.android开发就相当于手机app的前端,一般都是php+android或者jsp+android开发.androi ...

  7. 3D游戏编程大师技巧──环境搭建

    刚开微博,想借助这个平台与大家交流,写下自己的学习记录,希望得到大家的批评指正. 好了,进入主题.这段时间对游戏编程很感兴趣,于是在网友的推荐下开始学习<3D游戏编程大师技巧>这本书.今天 ...

  8. 零基础Android学习笔记-01 安卓开发环境搭建

    安卓开发环境搭建. 1.首先准备JDK,从官网找到JDK下载地址,原来做.NET不熟悉JAVA,干脆用最新的,下载了JDK 1.7的版本.原来装过1.5还要配置环境变量什么的.但1.7好像很给力,装好 ...

  9. Forward团队-爬虫豆瓣top250项目-团队编程项目开发环境搭建过程

    本次结对编程和团队项目我都需要用python环境,所以环境的搭建是一样的.(本文部分内容引用自己博客:http://www.cnblogs.com/xingyunqi/p/7527411.html) ...

随机推荐

  1. 由基于qml,c++的串口调试工具浅谈qml与c++混合编程

    最近在做一个基于sim900 的串口通信工具,基于qml和c++来实现. 首先,对于串口,qt有自带的QSerialPort,可以实现同步,和异步通信,qt creator也有自带的例子,本例子是从其 ...

  2. oschina程序开发

    程序开发 102脚本编程语言 36地图相关 7Epub电子图书工具 109UI组件库 16代码生成工具 25SVG开发包 17推荐引擎 3指纹识别 23拼音转换工具包 24蓝牙开发 295GUI开发框 ...

  3. 一步一步重写 CodeIgniter 框架 (5) —— 实现Controller,并加载Model

    CodeIgniter 框架采用MVC模式,而MVC模式中起纽带作用的就是C(控制器),在控制器的中通过加载模型获得数据,将数据传到视图中进行展示.本课将实现在控制器中加载模型. 1. 控制器的实现 ...

  4. 使用ffmpeg将BMP图片编码为x264视频文件,将H264视频保存为BMP图片,yuv视频文件保存为图片的代码

    ffmpeg开源库,实现将bmp格式的图片编码成x264文件,并将编码好的H264文件解码保存为BMP文件. 实现将视频文件yuv格式保存的图片格式的測试,图像格式png,jpg, gif等等測试均O ...

  5. 【BZOJ1132】【POI2008】Tro 计算几何 叉积求面积

    链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...

  6. 一天一个类,一点也不累 之 Vector

    一天一个类,一点也不累. 今天要说的是ArrayList的亲兄弟--Vector 亲兄弟?看看“族谱” Class Vector<E> java.lang.Object java.util ...

  7. 架构漫谈:自己开发一个Log框架

    前言 在日常开发中我们常常都会用到写日志的功能,现在网上的写Log的框架有很多,但是对于我个人而言,过于庞大:我们往往只为了使用框架中的某一个功能就不得不引用整个框架. 所以,我们今天就来自己动手开发 ...

  8. jQuery手写几个常见的滑动下拉菜单 分分秒秒学习JS

    一般的企业网站再我们再实际工作中,有些特效,用jQuery来做,显得极其简单,除非一些大的公司,需要封装自己的类. 今天,我们讲解jQuery入门知识,来写几个简单jQuery滑动下拉菜单.感受一下j ...

  9. uoj Goodbye Jiawu

    这次比赛真是太伤我心了. 比(惨)赛(不)结(忍)果(睹) 完挂感言 uoj round 5已经挂了一次了,没想到还要再挂第二次. 这次比赛的期望得分是\(100+100+100+70+10\)的.没 ...

  10. android 高效显示Bitmap - 开发文档翻译

    由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链接链接 Displaying Bitmaps Efficiently 高效显示Bitmap Lea ...