AndroidStudio JNI生成so过程

第1步:新建一个Android Studio 工程 JniHelloWorld。新建一个MyJni.java文件。
这里写图片描述

MyJni.java

public class MyJni {

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

public native static String getString();

}

1
2
3
4
5
6
7
8
9

第2步:然后点击一下 make project 会在app的build目录下面生成.class文件。
这里写图片描述

第3步,在app/src/main文件夹下新建一个jni文件夹,然后打开Android Studio的终端,cd到这个目录,然后输入下面的指令

javah -jni -classpath D:\github\JniHelloWorld\app\build\intermediates\classes\debug com.brotherd.jnihelloworld.MyJni

1
2

就会在这个jni文件夹下生成一个.h文件,com_brotherd_jnihelloworld_MyJni.h,文件内容如下。

/* DO NOT EDIT THIS FILE - it is machine generated /
#include <jni.h>
/
Header for class com_brotherd_jnihelloworld_MyJni */

#ifndef _Included_com_brotherd_jnihelloworld_MyJni
#define _Included_com_brotherd_jnihelloworld_MyJni
#ifdef __cplusplus
extern “C” {
#endif
/*

  • Class: com_brotherd_jnihelloworld_MyJni
  • Method: getString
  • Signature: ()Ljava/lang/String;
    */
    JNIEXPORT jstring JNICALL Java_com_brotherd_jnihelloworld_MyJni_getString
    (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

在jni目录下新建一个c/c++source file ,取名test.c 实现上面.h文件中的方法。

#include “jni.h”
#include “com_brotherd_jnihelloworld_MyJni.h”

JNIEXPORT jstring JNICALL Java_com_brotherd_jnihelloworld_MyJni_getString
(JNIEnv *env, jclass jz){

return (*env)->NewStringUTF(env,“this is the first time for me to use jni”);

}

1
2
3
4
5
6
7
8
9

接着在jni文件夹下新建Android.mk和Application.mk文件。
Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := MyJni
LOCAL_SRC_FILES := Test.c
include $(BUILD_SHARED_LIBRARY)

1
2
3
4
5
6

Application.mk

APP_ABI := all

1

第4步,关联下载好的ndk包,我的解压好的路径是C:\android-ndk-r14b
这里写图片描述

然后在终端进入到jni目录,输入指令 ndk-build,就会生成相应的so文件。

这里写图片描述

第5步,调用so文件。
在app的bulid文件中加入如下代码,然后build project

android {

sourceSets {
main() {
jniLibs.srcDirs = [‘src/main/libs’]
jni.srcDirs = [] //屏蔽掉默认的jni编译生成过程
}
}
}

1
2
3
4
5
6
7
8
9

在MainActivity中调用

public class MainActivity extends AppCompatActivity {

private TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    textView = (TextView) findViewById(R.id.textView);
    textView.setText(MyJni.getString());
}

}

1
2
3
4
5
6
7
8
9
10
11
12
13

运行效果图

这里写图片描述

结尾:现在对JNI还是一窍不通,有时间再看看,先记录一下。
————————————————
版权声明:本文为CSDN博主「leilifengxingmw」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/leilifengxingmw/article/details/71598687

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值