Android中NDK和JNI开发基本流程


Android中进行NDK和JNI开发的基本流程:

1首先明确几个基本概念

      什么是NDK?什么是JNI?
      NDK就是Native Develop Kit 的缩写,专门为Android平台下开发本地函数而准备的开发工具,所谓本地函数   就是开发C或C++函数或库。所谓JNI,就是Java Native Interface的缩写,Java本地接口,能够调用C的动态函数库.so文件。既然Java已经很强大,为什么还要在Android平台上开发C或C++呢?
      原因有两个:1、有很多功能函数或库文件是使用C或C++编写的,虽然使用Java也能重新编写实现,但是既然已经有了实现的函数,为什么不直接拿来用呢?西方有句名言叫作“要发明轮子,但不要重复发明轮子!!”,我们只需要将已实现的函数拿过来用就可以了。没有必要再重复繁琐的工作  2、 Java语言容易通过反编译技术获取源代码,一些比较核心的算法代码容易被窃取,而采用C编写则不容易被反编译,保证安全性。
      既然有些时候我们要用到C编程,然而Android平台是用Java编写的,怎么使用C呢?    那就要用到JNI了,JNI的具体作用:实现Java调用C动态函数库,所谓C动态函数库,就是在linux环境下编译后得到的.so文件。另一方面,我们编写好了自己的C源文件,如何将它整成符合要求的.so文件,使得Java能够成功调用?? 那就要使用上面介绍的另一个工具NDK,NDK可以可以将我们写好的源文件编译成符合要求的.so文件。

2,下面介绍一下基本的流程

      首先要准备好开发工具:1,Android开发的Eclipse工具包括ADT;2,NDK
      然后进行Android项目的开发:1,新建一个新的Android工程,包括包和Java文件2,在Java文件中声明要使用的本地函数(如Public native void add(int,int);等)3,
使用javah文件生成此Java文件对应的头文件(注意a,此头文件在编译时使用的是Java源文件,编译时要带包编译,如com.example.hellojni.HelloJni,则应该在com的上一级目录中经行编译,源文件名带上包的名字,最后就会生成com_example_hellojni_HelloJni.h的头文件,此头文件的作用:仅仅是给编写cpp源文件提供了一个模板,按照.h文件中的方式进行编写b, javah的使用格式javah -d “编译结果存放路径” -JNI  -classpath “源文件路径”  "源文件")。
4,利用eclipse中的native tools进行JNI文件夹的创建,此时会自动创建android.mk文件和一个空的cpp文件,保存之后就会自动生成.so文件(事先创建了 configuration tools,NDK,否则要终端手动编译)。
5,按照之前生成的.h文件格式进行cpp的编写;
6,若要使用其他的cpp,则编写对应的.h文件声明各个函数,并编写cpp文件实现函数;
7,在Android.mk文件中添加所有的cpp文件,添加后保存,即可自动编译生成.so文件
8,在Java文件中创建静态代码块,中加载刚才生成的.so文件,system.loadlibrary()(注意要删掉生成的文件名前面的"lib");
9,调用本地函数;

//
super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Log.i("ytj", ""+add(1, 6));
        Toast.makeText(getApplicationContext(), ""+add(1, 6), Toast.LENGTH_LONG).show();
        
        
        
    }
    public native int add(int a,int b);
    static
{
        System.loadLibrary("TestJni");  
}

//cpp

#include <jni.h>
#include<com_example_testjni_MainActivity.h>
JNIEXPORT jint JNICALL Java_com_example_testjni_MainActivity_add (JNIEnv * env,jobject obj ,jint a,jint b)
{


return a+b;


}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android NDK开发是指利用NDKNative Development Kit)将C/C++开发的代码编译成so库,然后通过JNI(Java Native Interface)让Java程序调用。在Android开发,默认使用的是Android SDK进行Java语言的开发,而对于一些需要使用C/C++的高性能计算、底层操作或跨平台需求的场景,可以使用NDK进行开发。 在Android Studio进行NDK开发相对于Eclipse来说更加方便,特别是在Android Studio 3.0及以上版本,配置更加简化,并引入了CMake等工具,使得开发更加便捷。首先要进行NDK开发,需要配置环境,包括导入NDK、LLDB和CMake等工具。可以通过打开Android Studio的SDK Manager,选择SDK Tools,在其相应的工具进行导入。 在项目的build.gradle文件,可以配置一些NDK相关的参数,例如编译版本、ABI过滤器等。其,可以通过externalNativeBuild配置CMake的相关设置,包括CMakeLists.txt文件的路径和版本号。此外,在sourceSets.main还可以设置jniLibs.srcDirs,指定so库的位置。 在进行NDK开发时,可以在jni文件夹编写C/C++代码,并通过JNI调用相关的函数。通过JNI接口,可以实现Java与C/C++之间的相互调用,从而实现跨语言的开发。 综上所述,Android NDK开发是指利用NDK将C/C++开发的代码编译成so库,并通过JNI实现与Java的相互调用。在Android Studio进行NDK开发相对方便,可以通过配置环境和相应的参数来进行开发。<span class="em">1</span><span class="em">2</span><span class="em">3</span>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值