JNI & NDK 实例讲解二 (通过NDK创建JNI项目)

          上一篇博客中有讲解关于JNI NDK是什么以及他们之间的关系。并且通过原始方式讲解了一个JNI项目的创建过程。那么这一篇博客我们将讲解NDK的开发环境的搭建,及如何通过NDK来开发一个JNI项目。

          首先我们来看下如何在Eclipse下搭建一个NDK开发环境(现在Android studio越来越流行,其很多功能也比Eclipse强大,有时间再补上Android studio 下NDK开发,我也会提供有关Android studio配置开发讲解的博客)。

         1:首先需要下载NDK,下载地址为:http://developer.android.com/tools/sdk/ndk/index.html。如果不能访问,可以联系我,本来有上传个如何访问国外网址的方法,但是CSDN貌似不允许上传。

         2:下载下来后是个exe程序,我的为android-ndk-r10e-windows-x86_64.exe,双击即可解压出文件夹android-ndk-r10e。然后把这个文件夹放到你想要放的磁盘目录下。

         3:打开Eclipse,新建一个Android项目,命名为NdkTestJNI。

         4:在项目NdkTestJNI右键->New->Folder,输入文件名jni- 》Finish。

         5:现在需要给NdkTestJNI配置NDK开发环境。

                在Eclipse里Project->Properties->Builders->New->在弹出的【Choose configuration type】对话框里面双击Program->在弹出的【Edit Configuration】对话框中,

                                                   

                  切换至Main这个tab:

                        1:Name输入NDK(任意取)

                        2:Location栏目点击Browse File System,选择你之前解压出的NDK文件夹的位置。

                        3:Working Directory栏目点击Browse Workspace,选中刚刚创建的android项目NdkTestJNI。

                       

                   切换至Refresh:

                        1:选择“Refresh resources upon completion” 
                        2:选择“The entire workspace”
                        3:选择“Recuresively include sub-folders”

                         

                   切换至Build Options:

                       1:选择“After a “Clean””
                       2:选择“During manual builds”
                       3:选择“During auto builds”
                       4:选择“Specify working set of relevant resources” 
                       5:点击Specify Resources,在弹出的对话框中勾选刚刚创建的android项目NdkTestJNI

                        

                       

                 最后点ok,就配置好了


          6:在项目里添加类jniFunction,并添加一个和上一篇博客一样的native函数。

package com.example.ndktestjni;

public class jniFunction {
	public native int add(int a, int b);  //native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。java编译器遇到native函数时,不会关心该函数的具体实现。
}
          7:命令行进入jniFunction.java目录,并用javac jniFunction.java生成jniFunction.class文件。具体生成方式见 上一篇博客。然后与上一篇博客讲的生成.h文件方式有点不同。在这个android项目中需要命令行退至src目录下然后 javah com.example.ndktestjni.jniFunction(javah 包名路径.class名)。不明白生成方式的见 上一篇博客

          8:  把生成的.h文件com_example_ndktestjni_jniFunction.h拷贝到刚创建在项目里的jni目录下,在jni目录上右键->New->File,输入文件名com_example_ndktestjni_jniFunction.c。加入代码:

#include "com_example_ndktestjni_jniFunction.h"
#include <stdlib.h>
#include <stdio.h>


JNIEXPORT jint JNICALL Java_com_example_ndktestjni_jniFunction_add
  (JNIEnv *env, jobject arg, jint a, jint b)
{

	int result = (int)(a+b);

	return result;

}


        9:在jni目录上右键->New->File,输入文件名Android.mk 不能取别的名字 ,加入

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NdkTestJNI
LOCAL_SRC_FILES := com_example_ndktestjni_jniFunction.c
include $(BUILD_SHARED_LIBRARY)
        10:最后再android项目MainActivity中加入如下代码:
package com.example.ndktestjni;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends Activity {

	static
	{
		System.loadLibrary("NdkTestJNI"); //引入c++库
	}
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        int a = jniFunction.add(1,2); //调用JNI函数
        Toast.makeText(this, ""+a, 100).show();
    }
}
        11:到此这个通过NDK创建JNI项目就完成了,我们和前一篇博客对比,发现通过NDK创建JNI项目,只要把环境搭好:

                  1:那么直接可以在这个Android项目中编写c/c+代码,不需要去c/c++开发工具中另建项目编写

                  2:还有是不需要像之前那样每次编译c/c++代码,都需要重新把dll拷贝到Java目录下

                  3:能自动将so库和java应用一起打包成apk

好了,通过NDK创建JNI项目就讲到这里吧。

        源码下载

JNI & NDK 实例讲解一 (不通过NDK创建JNI项目)

JNI & NDK 实例讲解二 (通过NDK创建JNI项目)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值