windows下android ndk开发入门

9 篇文章 0 订阅
1 篇文章 0 订阅
本文详细介绍了在Windows上安装Android NDK r5的步骤,包括Cygwin的配置和NDK的环境变量设置。此外,还提供了一个简单的JNI实例,演示了如何使用Eclipse创建工程,编写并编译C代码,以及在Android应用中调用本地库的方法。
摘要由CSDN通过智能技术生成

一、 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里即可看到对应结果






















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值