Android NDK 调用C

一.环境准备:

1.Cygwin:对于网速较慢的孩子,可以直接下载一个简约版: http://www.wishdown.com/soft/52987.html

2.安装完毕后(笔者安装路劲为:E:\Android\Cygwin\setup)

  1) 修改 E:\Android\Cygwin\setup\etc\defaults\etc\skel \.bash_profile

     增加2行:
       NDK=/cygdrive/E/Android/NDK/android-ndk-r9d
 export NDK
   2)同时也要修改 E:\Android\Cygwin\setup\home\lenovo\.bash_profile,增加 第一步的2行

    注意:如果没有Home目录::进入环境变量设置,删除用户环境变量home,重新 运行即可产生 

3.android-ndk



二.

1.新建一个Android工程HelloWorld,包名为com.apxar.hello

2.工程中:新建一个类HelloAndroidNDK

代码如下,保存


package com.apxar.hello;

public class HelloAndroidNDK {
//静态代码块,在加载类的时候会执行
static
{
	
System.loadLibrary("HelloMyNDK");

}
//声明加载C库的本地方法	
native String sayHello();
	
}
3.Android工程OnCreate函数中添加:

    
        HelloAndroidNDK ndk=new HelloAndroidNDK();
        
        Toast.makeText(this, ndk.sayHello(), Toast.LENGTH_LONG).show();
 


3.生成 头文件

    1)在工程根目录新建一个jni的目录

    2)命令行下:cd 进入jni目录

    3)使用javah -classpath  D:\android\workspace\HelloWorld\bin  com.apxar.hello.HelloAndroidNDK   //D:\android\workspace\HelloWorld\bin为class的根目录,后面参数                  class的名字,

    4)此时在jni目录中将生成com_apxar_hello_HelloAndroidNDK.h头文件

4.编写C语言程序,实现.h头文件:com_apxar_hello_HelloAndroidNDK.c

#include "com_apxar_hello_HelloAndroidNDK.h"
JNIEXPORT jstring JNICALL Java_com_apxar_hello_HelloAndroidNDK_sayHello   //这个函数的定义在头文件中已经定义好
  (JNIEnv *env, jobject obj)
{



  return (*env)->NewStringUTF(env,"Hello Apxar");


}
5.编写Android.mk

1).从ndk中复制出一份样版(本人的目录为E:\Android\NDK\android-ndk-r9d\samples\hello-jni\jni中复制Android.mk)

2).复制到Android工程的jni目录中

3).修改Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := HelloMyNDK   //名称要与:  System.loadLibrary("HelloMyNDK")中的一样
LOCAL_SRC_FILES := com_apxar_hello_HelloAndroidNDK.c   //我们的C语言文件
include $(BUILD_SHARED_LIBRARY)

6.编译链接c程序:

1).在Android-ndk的Samples目录下,新建一个文件夹MyNdkProject 用于存在工程

2).复制Android工程到MyNdkProject 目录下

3).打开Cygwin Bash Shell:

  命令:

     1)cd $NDK  //进入NDK目录

     2)cd samples\MyNdkProject

     3)ndk-build

7.Eclcipse重新导入MyNdkProject 中的工程HelloWorld, 工程中多出了libs/armeabi/LibHelloMyNDK.so文件

8.运行


总流程:  创建Android工程->   创建包含nativ本地方法的java类 -> javah工具  class生成.h到jni目录   ->   编写.c-   >   修改Android.mk   ->  编译链接ndk-build  ->android调用该类的方法

你可能感兴趣的:(android也能玩安全)