第一个NDK工程--hello ndk
来源:互联网 发布:电商美工培训 编辑:程序博客网 时间:2024/06/07 00:31
第一步,要创建一个Android工程。这一步就不用多说了。我的工程创建完的目录如下图:
第二步,写java文件MainActivity.java 和布局文件activity_main.xml
activity_main.xml内容如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <TextView android:id="@+id/show_tv" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:text=""/> </LinearLayout>
MainActivity.java的内容如下:
package com.dfe.hellondk;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends Activity {TextView tv = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView)this.findViewById(R.id.show_tv); tv.setText( strFromJNI() ); } /* *声明本地方法,这个 方法已经被打包进本应用的本地库'jni_hello'实现 **/ public native String strFromJNI(); /* * 在程序启动时加载jni_hello库。这个库在应用安装时被package manager 解压到 /data/data/com.dfe.hellondk/lib/libjni_hello.so */ static{ System.loadLibrary("hello_ndk"); }}
到这里java部分就算完成了。
(1)生成头文件
首先在你的工程目录下新建一个jni文件夹。如下图
然后在windows下打开dos窗口,开始 --> 输入cmd并按回车键。进入ndk目录,不知dos命令的可自行网上搜索。使用dos命令进入工程目录。在使用javah生成头文件之前,确保你的jdk安装并配置环境变量没有问题。然后使用使用命令:
javah -classpath src -d jni com.dfe.hellondk.MainActivity
如下图:
对命令简单说一下:
javah :命令名称
-classpath src :指定包含要操作的类的文件夹名,比如我需要操作的类是MainActivity,而包含这个类的包在src目录下。
-d jni :指定生成的头文件保存的目录。
com.dfe.hellondk.MainActivity :要操作的类
如果没有什么问题,头文件应该已经生成了,我的头文件文件名是 com_dfe_hellondk_MainActivity.h 头文件内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_dfe_hellondk_MainActivity */#ifndef _Included_com_dfe_hellondk_MainActivity#define _Included_com_dfe_hellondk_MainActivity#ifdef __cplusplusextern "C" {#endif/* * Class: com_dfe_hellondk_MainActivity * Method: strFromJNI * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_dfe_hellondk_MainActivity_strFromJNI (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif
这里说一点,函数 Java_com_dfe_hellondk_MainActivity_strFromJNI 对应于MainActivity中的strFromJNI方法。其名称虽然很长,但是有规则的,这个规则按照 java_pacakege_class_mathod,即是 java_包名_类名_方法名。
(2)编写相应的C文件
C文件主要是实现头文件中的函数。在jni目录下新建hello_ndk.c ,文件名可以随意,最好见名知意其内容如下:
#include <string.h>#include <jni.h>jstring Java_com_dfe_hellondk_MainActivity_strFromJNI (JNIEnv* env, jobject thiz){return (*env)->NewStringUTF(env, "Hello , Ndk !");}
(3)编写Android.mk
Android.mk主要是定义编译规则,和Linux下makefile类似。在jni目录下新建Android.mk文件,其内容如下:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)#c源文件的名字,不包含后缀LOCAL_MODULE := hello_ndk#c源文件的名字LOCAL_SRC_FILES := hello_ndk.cinclude $(BUILD_SHARED_LIBRARY)
第四步,编译。
文件已经全部写好了,下面就是要进行编译了。
我们再看一下先在的工程目录:
工程下多了一个jni目录,jni含有我们刚刚编写的三个文件。
再工程目录中,右键点击工程名 --> Android tools --> Add Native Support 来添加ndk支持,会出现如下界面:
点击finish按钮。
然后点击工具栏中的锤子图标进行编译,如下图:
有可能会出现错误:Method 'NewStringUTF' could not be resolved
解决办法,看我另一个博客:http://blog.csdn.net/dingfengen/article/details/51604710
如果问题解决再次编译会出现如下图:
然后就是下载到手机测试,结果如下:
这样第一个ndk程序就ok了。
这里参考了:
http://www.cnblogs.com/devinzhang/archive/2012/02/29/2373729.html
非常感谢。
- 第一个NDK工程--hello ndk
- 第一个NDK程序
- 第一个NDK程序
- 第一个NDK程序
- Android 第一个NDK
- NDK第一个程序
- NDK入门(一) 在Android Studio中创建并运行第一个ndk程序hello world
- NDK入门 第一个NDK项目
- 编写第一个NDK程序
- 创建第一个NDK程序
- 第一个NDK程序 MyFirstNDK_app
- 编写第一个NDK程序
- Android第一个NDK示例
- Android 第一个ndk开发
- 第一个NDK-JNI项目
- NDK/JNI学习--导入hello-jni工程
- ndk ----hello
- NDK Hello
- Github Android Client
- js弹出新页面并传值
- escape() VS encodeURI() VS encodeURIComponent()
- STL学习_hash_table源码分析
- java Integer == 比较
- 第一个NDK工程--hello ndk
- IOS开发-XCode常用快捷键整理
- Java中的异常处理
- Hystrix学习笔记一
- 在 Linux 上安装 SQLite
- 回溯算法:八皇后问题
- Java Map集合遍历
- Shell脚本: Mysql自动创建库和用户_20160607_七侠镇莫尛貝
- Jmeter关联,正则表达式提取器使用