Android中的NDK环境搭建和简单实例

  Android NDK 即:Native Development Kit 。众所周知,Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序。

NDK包括了

  • 1.从C / C++生成原生代码库所需要的工具和build files。
  • 2.将一致的原生库嵌入可以在Android设备上部署的应用程序包文件(application packages files ,即.apk文件)中。
  • 3.支持所有未来Android平台的一系列原生系统头文件和库
  • 使用到NDK主要分为以下几种情况:
  1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。
  2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的。
  3. 便于移植,用C/C++写的库可以方便在其他的嵌入式平台上再次使用。
值得注意的是:严格说AndroidNDK只是AndroidSDK的一个组件,通过NDK,你就可以用c或c++来开发app了。我觉得把两个都弄熟是最好的。下面我来教大家怎么配置环境:

  • 然后去eclipse里面进行环境配置:Window--->Prefrences--->Android--->LogCat--->NDK--->将路径添加上然后应用就可以了,即:

  • 接下来去配置头文件:windows--->搜cmd,进入命令提示符进入
 

  • 这时候刷新一下项目,可以看见在MainActivity所在的包下面多了一个后缀名为.h的文件,这时候可以将DNK添加到你所在项目中,添加方式为:选中项目-->右键选择Android Tools-->Add Native Support...刷新一下项目,这时候你会发现项目中多了一个jni文件夹,将刚刚生成的.h文件剪切到该文件夹下。然后:

  • .mk文件夹里面的按照下面修改:

  • 然后:

  • .C文件中:


  • 下面我将详细代码展示一下
  1. 带有native的关联c的类
    <span style="font-family:SimSun;">public class Hello {
    	public static native String getString();
    } 
    </span>

  2. MainActivity:
    <span style="font-family:SimSun;">public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            System.loadLibrary("Demo");
        }
    
        public void callc(View view){
        	String string = Hello.getString();
        	System.out.println(string);
        }
    } </span>

  3. jni中的.c文件
    <span style="font-family:SimSun;">#include <jni.h>
    #include <Stdio.h>
    #include <stdlib.h>
    
    JNIEXPORT jstring JNICALL Java_com_example_ndkdemo_Hello_getString
      (JNIEnv *env, jclass obj){
    	return (*env)->NewStringUTF(env,"hello");
    }</span>
    

  4. Android.mk文件
    <span style="font-family:SimSun;">LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE    := Demo
    LOCAL_SRC_FILES := Demo.c
    include $(BUILD_SHARED_LIBRARY)
    </span>

  5. jni中的.h文件
    <span style="font-family:SimSun;">/* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class com_example_ndkdemo_Hello */
    
    #ifndef _Included_com_example_ndkdemo_Hello
    #define _Included_com_example_ndkdemo_Hello
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     com_example_ndkdemo_Hello
     * Method:    getString
     * Signature: ()Ljava/lang/String;
     */
    JNIEXPORT jstring JNICALL Java_com_example_ndkdemo_Hello_getString
      (JNIEnv *env, jclass class);
    
    #ifdef __cplusplus
    }
    #endif
    #endif</span>
    

  • 这样就能实现简单的sdk与ndk之间的通信了。
不足之处望多多指正!


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值