Android Studio Ndk的配置

来源:互联网 发布:日本饺子 知乎 编辑:程序博客网 时间:2024/05/17 08:10

NDK:全称为Native Development Kit

为何要用到NDK?

概括来说主要分为以下几种情况: 

1. 代码的保护,由于apk的Java层代码很容易被反编译,而C/C++库反编译难度较大;

2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的;

3. 便于移植,用C/C++写的库可以很方便在其它的嵌入式平台上再次使用。

前提

java sdk 环境变量配置好。
java  命令可以用
javah 命令可以用

Terminal 命令配置好

1.android Studio 中的Terminal 命令行配置

在环境变量中的path 配置sdk中的 tool 目录

重启 Android studio   使用 android list target 命令如果出现


如果上图这安装正确

1.Android studio NDK  环境变量的配置




2。SO库的开发与引用
在环境和命令行配置好的情况下:


在MainActiviy.java中建立了一个方法

public native String getStrFromJNI();

1.在Terminal 里面输入javah命令编译

cd 命令进入java目录

javah命令 


2.新建 jni 文件夹个新建 demo.c c语言类  里面方法和上面生成的差不多,可以拷贝


3.编译 demo.c 文件

在jni文件夹中新建 Android.mk文件

LOCAL_MODULE := demo //要生成的so库的名称,但实际为libdemo.so

LOCAL_SRC_FILES := demo.c //要使用的文件,刚才编写的demo.c文件


LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := demo
LOCAL_SRC_FILES := demo.c
include $(BUILD_SHARED_LIBRARY)


4.使用so文件
在local.properties中设置NDK路径,我的NDK示例如下:

在app的build.gradle的android节点下设置:

方法的调用
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tvNone= (TextView) findViewById(R.id.tv_one);
tvNone.setText(getStringforJni());
Log.i("test",getStringforJni());
}
@SuppressWarnings("JniMissingFunction")
public native String getStringforJni();

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

}


在进行 ndk-build 在运行(注意)



0 0