Android NDK简单实例和环境搭建
来源:互联网 发布:淘宝 全球买手 直播 编辑:程序博客网 时间:2024/06/05 20:42
1.NDK和JNI简介:
NDK全称为native development kit本地语言(C&C++)开发包。而对应的是经常接触的Android-SDK,
(software development kit)软件开发包(只支持java语言开发)。
众所周知,Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序。
NDK包括了:
- 从C / C++生成原生代码库所需要的工具和build files。
- 将一致的原生库嵌入可以在Android设备上部署的应用程序包文件(application packages files ,即.apk文件)中。
- 支持所有未来Android平台的一系列原生系统头文件和库
为何要用到NDK?
概括来说主要分为以下几种情况:
1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。
2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的。
3. 便于移植,用C/C++写的库可以方便在其他的嵌入式平台上再次使用。
JNI全称为Java Native Interface(JAVA本地调用)。从Java1.1开始,JNI成为java平台的一部分,它允许Java代码和其他语言写的代码(如C&C++)进行交互。并非从Android发布才引入JNI的概念的。
简单来说,Android的NDK提供了一些交叉编译工具链和Android自带的库,这些Android的库可以让开发者在编写本地语言的程序时调用。而NDK提供的交叉编译工具链就对已经编写好的C&C++代码进行编译,生成库。当然了,你也可以自己搭建交叉编译环境,而不用NDK的工具和库。然后生成库,只要规范操作,一样可以生成能让JAVA层成功调用的库文件的。
二:NDK环境搭建
1.下载Android NDK http://developer.android.com/tools/sdk/ndk/index.html
我是用的NDK:
2.Eclipse配置
3.创建你的Android项目,里面创建一个java类,代码如下:
package com.example.ndkdemo;public class Hello {//native 是NDK的关键词public static native String getString();}4.通过javah生成头文件,在命令提示符下操作:
刷新你的项目,得到如图的一个包
右键你的项目,创建一个名字,生成jni文件夹
Android.mk里面的代码如下:
-LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := HelloLOCAL_SRC_FILES := Hello.c//这个是把 .cpp 后面的 pp 给删除了 剩下的代码不变include $(BUILD_SHARED_LIBRARY)
头文件 com_example_nn_Hello.h 的代码如下:
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_example_nn_Hello */#ifndef _Included_com_example_nn_Hello#define _Included_com_example_nn_Hello#ifdef __cplusplusextern "C" {#endif/* * Class: com_example_nn_Hello * Method: getString * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_example_nn_Hello_getString(JNIEnv * env, jclass class);//这里改成这样的#ifdef __cplusplus}#endif#endif
后缀为 Hello.c文件需做如下操作:
先去解压的NDK找到 这个路径
C:\Users\ti\Desktop\android-ndk-r9\platforms\android-18\arch-arm\usr\include
上方关联之后 写 Hello.c中的代码如下:
#include <jni.h>#include <Stdio.h>#include <stdlib.h>JNIEXPORT jstring JNICALL Java_com_example_ndkdemo_Hello_getString (JNIEnv *env, jobject obj){return (*env)->NewStringUTF(env,"你好");}
MainActivity中的代码:
package com.example.ndkdemo;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.loadLibrary("NDKdemo");//jni中后缀为.c的名字 }public void cc(View v){ //他是一个按钮,点击按钮需要做的操作String string = Hello.getString();System.out.println(string);//打印“你好”} }
3 0
- Android NDK简单实例和环境搭建
- Android NDK简单实例和环境搭建
- Android中的NDK环境搭建和简单实例
- Android NDK环境搭建与简单实例
- Android NDK环境搭建与简单实例
- Android NDK环境搭建和开发实例
- Android Studio NDK开发之环境配置和简单实例
- Android-JNI(2)-NDK环境搭建和简单案例
- NDK环境搭建和JNI实例
- 最简单的android NDK环境搭建
- android Jni NDK开发环境搭建及其简单实例的编写
- android Jni NDK开发环境搭建及其简单实例的编写
- Android NDK环境搭建和配置
- android sdk和ndk开发环境搭建
- Android NDK环境搭建和配置
- Android NDK环境搭建和配置
- Android ndk 开发环境搭建 和 示例
- Android NDK环境搭建和配置
- hdu5876 Sparse Graph
- 第一篇博客记载于2016-9-12
- solr教程,值得刚接触搜索开发人员一看
- POJ 2965 The Pilots Brothers' refrigerator 高斯消元
- android命名大小写问题
- Android NDK简单实例和环境搭建
- PAT (Advanced Level) Practise 1117Eddington Number(25)
- Style 和 Theme 的异同
- SpannableString实现同一段文字不同的效果
- <机器学习笔记-04 ><scikit-learn 04>逻辑回归
- 对称加密与非对称加密
- [Android] Android Studio 中遇到的一些问题
- CSUOJ 1812 三角形和矩形
- PAT (Advanced Level) Practise 1118Birds in Forest (25)