需要进行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. Socket网络编程--FTP客户端(60篇socket博客,而且都比较简单、深入浅出)

    已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解FTP作用 就是一个提供一个文件的共享协议. 1.了解FTP协议 ...

  2. WPF: 针对Windows 8优化菜单栏和工具栏

    原文 WPF: 针对Windows 8优化菜单栏和工具栏 目录 1. 关于菜单图标大小 2. 关于IsEnabled和工具栏图标 3. 针对.NET 3.x的菜单栏和工具栏外观 返回目录 1. 关于菜 ...

  3. Android Support Library更新到v22.1之AppCompat新特性

    构建一个可以跑在不同版本 Android 平台的软件,是非常复杂和耗时的.为了解决这个问题,Android 推出了 Android Support Library (安卓兼容包),让新的UI控件也可以 ...

  4. 手势滑动结束 Activity(一)基本功能的实现

    喜欢听音乐的朋友可能都看过天天动听这款 app, 这款 app 有一个亮点就是在切换页面(Fragment)的时候能够通过手势滑动来结束当前页面.这里先说一下,我为什么会这么关心这个功能呢,由于前两天 ...

  5. TCP三次握手和四次挥手具体解释

    三次握手:建立TCP须要三次握手才干建立, 先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK ...

  6. Image控件

    前台代码: <asp:Image ID="Image1" runat="server" /> 后台代码; protected void Page_L ...

  7. arm汇编:ldr,str,ldm,stm,伪指令ldr

    ldr,str,ldm,stm的命名规律: 这几个指令命名看起来不易记住,现在找找规律. 指令 样本 效果 归纳名称解释 ldr Rd,addressing ldr r1,[r0] addressin ...

  8. SSH框架总结(框架分析+环境搭建+实例源码下载)(转)

    首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框 ...

  9. iPhone应用程序开发基础之一: IBOutlet与IBAction

    在图形界面编程时,解决的第一问题就是如何将静态界面与代码关联起来,或者说是代码如何与界面上的对象 通信, 代码如何操作界面上的对象.在iPhone平台上,引入了IBOutlet与IBAction.通过 ...

  10. PE文件简单介绍

    PE(Portable Execute)文件是WIN32下可运行文件遵循的数据格式,也是反汇编调试不可缺少的文件,常见的pe文件有.exe和.dll文件.本文主要介绍pe文件的结构和虚拟内存地址转换到 ...