首页 > 系统 > Android > 正文

Android Studio Ndk的配置

2019-11-08 00:16:14
字体:
来源:转载
供稿:网友

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 := demoLOCAL_SRC_FILES := demo.cinclude $(BUILD_SHARED_LIBRARY)

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

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

方法的调用
public class MainActivity extends AppCompatActivity {@Overrideprotected 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 在运行(注意)


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表