windows下android ndk开发入门

原创 2012年03月30日 11:57:44

一、 Android NDK r5安装

1 cygwin的安装和简单配置

首先到http://www.cygwin.com下载setup.exe ,接着建立安装目录,如X:/cygwin(我用的是E:/cygwin ) ,将setup.exe放到此目录。

启动安装:


BEGIN-> 点击setup.exe


Next->Install from Internet(选择在线安装方式)

Next->Install from Internet(选择在线安装方式)


Next->填写Root Directory,如X:/cygwin(选择安装路径)


Next->填写Local Package Directory,如X:/cygwin/ftp(选择下载文件存放的目录)


Next->Direct Connection(选择网络连接方式)


Next->选一个较快的ftp(选择下载镜像站点)


Next->(开始下载安装)

到了关键步骤,点击All旁边的旋转状图标,将Default切换至Install全部安装;


选择创建快捷方式。->END

最后启动Cygwin,测试安装是否成功:

点击快捷方式打开控制台,如果是域用户,按照提示makepasswdmakegroup即可。

输入gcc –v 以及make-v,出现版本信息表示安装成功

输入命令检查


出现以上版本信息则表明makegcc 已经安装成功。

2 Android NDK r4 Windows

首先到官网下载Android NDK r4 Windows

android-ndk-r4直接解压就行了,我将其放在了D:\cygwin\program\android-ndk-r4

cygwin安装目录下打开文件home/<你的用户名>/.bash_profile文件中最后添加环境变量

NDK=/cygdrive/<ndk所在路径>

export NDK

我的是:

NDK=/cygdrive/D/cygwin/program/android-ndk-r4

export NDK

 

其中"NDK"这个名字随便起,因为后面要用经常使用,建议不要太长。

重启cygwin,输入cd$NDK进入对应目录,就成功了。

注意:添加时用UltraEdit打开添加,如果是中文OS 使用记事本或者写字板打开编辑后,重新启动Cygwin 会报错。可以按照下图方式转换:


二、JNI实例

 

1安装成功后编译NDK中的一个例子命令行:


编译完成后在E:/Android_NDK/android-ndk-r5/samples/hello-gl2文件夹中会生成一个文件夹libs,里面有一个子文件夹armeabi,里面生成libgl2jni.so文件

2一个简单的JNI例子

下面用一个简单的例子介绍怎么生成一个.so文件以及在Android项目中怎么调用.so文件。

①  首先,用Eclipse建立一个ANDROID的工程,命名为JNITest,建议一个jni调用的类封装native method

package jni.sam.you;

 

public class MyJNI

{

    public native int numPlus(int a,int b);

static{

System.loadLibrary("hellojni"); }

}

打开windows命令行窗口,cd命令到eclipse工程目录下bin目录,我的是E:\androidworkspace\JNITest\bin

键入javah -jni jni.sam.you.MyJNI 来编译eclipse生成的.class文件

可以生成jni_sam_you_MyJNI.h这个文件的主要作用就是生成函数名,把这个函数名拷出来这个文件就可以删了。

jni_sam_you_MyJNI.h

/* DO NOT EDIT THIS FILE - it is machinegenerated */

#include <jni.h>

/* Header for class jni_sam_you_MyJNI */

 

#ifndef _Included_jni_sam_you_MyJNI

#define _Included_jni_sam_you_MyJNI

#ifdef __cplusplus

extern "C" {

#endif

/*

 *Class:     jni_sam_you_MyJNI

 *Method:    numPlus

 *Signature: (II)I

 */

JNIEXPORT jint JNICALLJava_jni_sam_you_MyJNI_numPlus

 (JNIEnv *, jobject, jint, jint);

#ifdef __cplusplus

}

#endif

#endif

然后将这个函数名拷贝出来实现他的函数体

jni_sam_you_MyJNI.c

/* DO NOT EDIT THIS FILE - it is machinegenerated */

#include <jni.h>

/*

 *Class:     jni_sam_you_MyJNI

 *Method:    numPlus

 *Signature: (II)I

 */

JNIEXPORT jint JNICALLJava_jni_sam_you_MyJNI_numPlus

 (JNIEnv *env, jobject jj, jint a, jint b)

{

        returna+b;

}

注意:参数名一定要补全,不然编译不通过


然后写在android工程jni目录下写Android.mk文件,同时把.c源文件拷贝到jni文件夹下

# Copyright (C) 2009 The Android Open Source Project

#

# Licensed under the Apache License, Version 2.0 (the"License");

# you may not use this file except in compliance with theLicense.

# You may obtain a copy of the License at

#

#      http://www.apache.org/licenses/LICENSE-2.0

#

# Unless required by applicable law or agreed to inwriting, software

# distributed under the License is distributed on an"AS IS" BASIS,

# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eitherexpress or implied.

# See the License for the specific language governingpermissions and

# limitations under the License.

#

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    :=hellojni

LOCAL_SRC_FILES := jni_sam_you_MyJNI.c

include $(BUILD_SHARED_LIBRARY)

之后在cygwin下到eclipse工程目录的jni文件夹下,(注: cd .. 可以返回上级目录,cd e:可以到e盘),输入命令:$NDK/ndk-build


出现上面内容说明编译成功,返回eclipse右击工程名字选择刷新,得到的结构目录如下:


在主activity里调用native  method

package jni.sam.you;

 

import android.app.Activity;

import android.os.Bundle;

 

public class Main extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState)

    {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

    }

   

    static

   {

        System.loadLibrary("hellojni");

    }

   

    @Override

    protected void onResume() {

    super.onResume();

    System.out.println("###########");

    System.out.println(newMyJNI().numPlus(2, 3));

   

}

}

从logcat里即可看到对应结果






















Android Studio JNI/NDK 编程 Windows 下环境搭建 demo 开发

环境 windows 7  (注:其实 Linux 开发可能更方便) Android Studio 2.1; 一 . 下载 安装android-ndk开发包  ...
  • xipiaoyouzi
  • xipiaoyouzi
  • 2016年05月21日 11:03
  • 1679

Android NDK开发(一) 入门

开始之前 最近学习了一下NDK的开发, 就来分享一下. 对一个新鲜事物, 我们先解决的无非就是三件事情: 是什么?为什么?怎么做?. NDK简介 (英语:native develop...
  • u013144863
  • u013144863
  • 2016年11月06日 18:02
  • 4572

NDK开发 从入门到放弃(一:基本流程入门了解)

NDK入门,配置与简单流程介绍
  • xiaoyu_93
  • xiaoyu_93
  • 2016年10月20日 11:54
  • 17944

Android Studio 进行NDK开发入门

一.开发前准备 Android Studio 最好升级到2.2 Jdk1.7 api24 Gradle2.2.2 二.下载NDK和cMake 三.配置 ...
  • totcw
  • totcw
  • 2017年04月28日 20:47
  • 169

Android 开发 NDK从入门到精通

NDK详解 1. 交叉编译库文件 C代码执行 : C代码被编译成库文件之后, 才能执行, 库文件分为动态库 和静态库 两种; -- 动态库 : unix环境下.so 后缀的是动态库, ...
  • jdsjlzx
  • jdsjlzx
  • 2014年02月10日 15:58
  • 3637

android studio下的NDK开发详解(一)

好记性不如烂笔头,开始坚持写博客,学一点记一点,只为了生活更好。 学了一年多的硬件,现在来做android,不知道是对是错,跟着感觉走,开始总是想把android和硬件挂上勾,所以第一个android...
  • tuoguang
  • tuoguang
  • 2015年09月01日 01:05
  • 4653

Android NDK开发入门学习笔记(图文教程,极其详尽)

以前也简单用过JNI,但是只是简单用一下,好多都不明白。最近在看源码部分,有涉及到JNI调用的,所以这次打算彻底把它搞定。 先普及一下JNI的调用关系:JAVA--------------------...
  • u011064099
  • u011064099
  • 2015年11月19日 11:59
  • 1731

Windows环境下Android Studio进行NDK开发

Android Studio对Ndk的支持正在不断的完善。之前有试过写demo,成功运行了。但整个过程遇到了不少的问题,而且网上搜集到的问题答案各种各样,大部分都是互相复制粘贴,没有自己的思路。今天趁...
  • u012950099
  • u012950099
  • 2016年07月17日 14:49
  • 292

windows下用ADT进行android NDK开发的详细教程(从环境搭建、配置到编译全过程)

近期在学习android NDK开发,它比开发一般的android工程更加繁琐,特别是和C/C++代码交叉编译的过程。本文是windows下用ADT进行android NDK开发的详细教程,包括了从环...
  • u013149325
  • u013149325
  • 2014年10月22日 16:58
  • 2457

Android NDK开发之从环境搭建到Demo级十步流

说到NDK,相信大家都不陌生,它是Google为便于Android开发提供的一种原生开发集:Native Development Kit,而且也是一个包含API、构建工具、交叉编译、调试器、文档示例等...
  • guiman
  • guiman
  • 2017年04月26日 16:16
  • 14846
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:windows下android ndk开发入门
举报原因:
原因补充:

(最多只允许输入30个字)