Ubuntu 下 配置studio ndk-buid环境

什么是NDK?
NDK全称是Native Development Kit,NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。NDK集成了交叉编译器(交叉编译器需要UNIX或LINUX系统环境),并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。

为什么使用NDK?
1、代码的保护。由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。
2、可以方便地使用现存的开源库。大部分现存的开源库都是用C/C++代码编写的。
3、提高程序的执行效率。将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。
4、便于移植。用C/C++写得库可以方便在其他的嵌入式平台上再次使用。

什么是JNI?
JNI的全称是Java Native Interface,它提供了若干的API实现了Java和其他语言的通信(主要是C和C++)。

为什么使用JNI?
JNI的目的是使java方法能够调用c实现的一些函数。

安卓中的so文件是什么?
android中用到的so文件是一个c,c++的函数库。在android的JNI中,要先将相应的C语言打包成so库,然后导入到lib文件夹中供java调用。

1. 配置环境,安装ndk

File -> New -> Project Structure。这里可以看到SDK、JDK、NDk文件位置是否配置,如果本地有就找到文件路径,没有就下载

2. 在.bashrc中配置ndk路径:

export NDK_HOME=/home/xxx/Android/Sdk/ndk/21.0.6113669
export PATH=$PATH:$NDK_HOME

3. 新建文件:

Test.java
public class Test {

static {
    System.loadLibrary("test");
}

public static native String test01(String value);

}

4. cd到app/src/main/java目录下,执行命令

javah -jni -encoding utf-8 com.xxx.Test(包名+类名),
生成com_xxx_Test.h:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include 
/* Header for class Test */

#ifndef _Included_Test
#define _Included_Test
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Test
 * Method:    test01
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_xxx_Test_test01
  (JNIEnv *, jclass, jstring);

#ifdef __cplusplus
}
#endif
#endif

5. 在app目录下新建一个jni文件夹,将刚刚生成的 .h文件复制到jni文件夹中,然后创建一个Test.c文件

#include 
#include 
#include  // log专用
#include "com_xxx_Test.h"

JNIEXPORT jstring JNICALL Java_com_xxx_Test_test01
  (JNIEnv *env, jclass clasz, jstring str){

  return (*env)->NewStringUTF(env,"Hello from JNI !";
  }

6. 编辑 Android.mk、Application.mk

#Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := test
LOCAL_SRC_FILES := com_xxx_Test.c
LOCAL_LDLIBS := -llog // log专用
include $(BUILD_SHARED_LIBRARY)
#Application.mk
APP_ABI := all

APP_PLATFORM := android-29
#没有这个会报错,是安卓版本的错误,可以根据自己的情况更改

]

7. 在控制台下cd搭配app目录下,执行ndk-build

你可能感兴趣的:(Ubuntu 下 配置studio ndk-buid环境)