Android studio NDK笔记1-NDK配置,你的第一个JNI

来源:互联网 发布:凯立德导航端口工具 编辑:程序博客网 时间:2024/05/21 06:41

总结下Android studio配置NDK的过程,实现你的第一个jni(Java native interface).

下载NDK

1.官方下载地址:https://developer.android.google.cn/ndk/downloads/index.html

2.民间下载地址:http://www.androiddevtools.cn/
选择与自己电脑相匹配包,下载到本地,解压。

配置到android studio中

打开android studio,新建android项目,打开File->Project Structure:


这里写图片描述


选择刚才下载的NDK解压的路径:


这里写图片描述


这时候在项目的local.properties文件会出现NDK的配置:


这里写图片描述

还要在gradle.properties里面加上android.useDeprecatedNdk=true:


这里写图片描述

新建NativeTest.java

public class NativeTest {    static {        System.loadLibrary("Hello");    }    public static native String getString();}


产生.h头文

1.编译项目生成NativeTest .class

编译项目后.class文在项目的如下路径:

D:\google\decompilation\workspace\ForceApkObj\app\build\intermediates\classes\debug

这里写图片描述“`

2.利用javah命令产生.h头文件

打开Android studio的Terminal终端,进入项目的app/src/main目录:


这里写图片描述

使用命令javah生成h文件:

javah -d jni -classpath D:\google\decompilation\workspace\ForceApkObj\app\build\intermediates\classes\debug com.biyou.forceapkobj.NativeTest

注:
 1.javah是命令
 2.-d jni :在Terminal终端命令行所以的目录(这时候是app/src/main)新建一个名为jni的文件夹。
 3.-classpath D:\google\decompilation\workspace\ForceApkObj\app\build\intermediates\classes\debug: 项目所有类文件生成的目录
 4.com.biyou.forceapkobj.NativeTest:类名


然后在main目录底下会生成一个jni文件夹,里面会有一个com_biyou_forceapkobj_NativeTest.h文件

这里写图片描述

新建.c文件

这里写图片描述

编写c代码:

#include <com_biyou_forceapkobj_NativeTest.h>//返回一个字符串JNIEXPORT jstring JNICALL Java_com_biyou_forceapkobj_NativeTest_getString        (JNIEnv *env, jclass jobj) {    return (*env)->NewStringUTF(env,"Hello World");}


配置buid.gradle

defaultConfig {        .....        ndk {            moduleName "Hello"//指定生成的so文件名            abiFilters "armeabi", "armeabi-v7a", "x86"//cpu的类型        }    }

注意:这里的moduleName要与NativeTest.java里面的System
.loadLibrary(“xxx”)一致。

调jni的getString()方法

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        TextView content = new TextView(this);        content.setText(NativeTest.getString());        setContentView(content);    }}
阅读全文
0 0
原创粉丝点击