Android NDK制作so库

序言:该篇文章记录Android studio怎么使用NDK制作so库过程

最开始用Android Studio 3点几的版本和2020年3月份最新版本的Android studio,配置的时候老是出一些无法解决的错误,搞的心态爆炸。最终选择Android 4.0版本
SDK Platforms:Android 6.0(API 23)
SDK Build-Tools: 27.0.3
NDK 版本:21.0.6113669

一. 配置NDK环境

(1)点击1处进行NDK下载,勾选3处可以查看NDK的具体版本号
在这里插入图片描述
(2)NDK下载后的位置
SDK位置在:D:\AS\SDK
NDK位置在:D:\AS\SDK\ndk,我这里下载21.0.6113669
![在这里插入图片描述](https://img-blog.csdnimg.cn/c176d5389c37490cbec053856bf01d36.png

(3)配置环境变量
a. 打开电脑控制面板---->系统和安全---->系统---->高级系统设置---->环境变量
在这里插入图片描述
b.在系统变量里点击新建,创建一个NDK的环境变量
变量名就自己定义了,我这里定义为NDK_PATH,变量值为NDK的下载路径![在这里插入图片描述](https://img-blog.csdnimg.cn/8b88e4bbfc4c4d7f829222c6b271dcbf.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAd2VpeGluXzQxOTE0MTc5,size_19,color_FFFFFF,t_70,g_se,x_16

注意:NDK的路径为含有build等文件的根目录,另外,如果可能还存在版本的问题,最开始配置23这个版本,NDK配置还是失败。
在这里插入图片描述
c.配置Path变量,新建一个变量值,增加%NDK_PATH%
在这里插入图片描述
d.在cmd下输入ndk-build,说明ndk环境配置成功
在这里插入图片描述

二. Android studio下制作so库过程

1.AS下新建一个TEST工程,在创建后的工程下创建一个JNI类
在这里插入图片描述
JNI.java里内容(JNI类里包含一个返回类型为String类型的sayHello方法)

package com.example.test;

public class JNI {
    public static native String sayHello(); 
}

2.在main文件夹下创建一个jni文件夹,jni文件夹下包含一个Android.mk,一个头文件,和一个C源文件
在这里插入图片描述
3. 制作jni文件夹下的头文件
(1)点击Android studio File---->Settings---->Tools----->External Tools
在这里插入图片描述
(2)创建一个Javah的快捷工具

Program:  javah
Arguments:  -v -jni -d D:\AS\WORK\TEST\app\src\main\jni $FileClass$   //这里的路径指头文件的存放位置
Working directory: $SourcepathEntry$

(3)右击JNI.java这个文件,选择External Tools下的javah,会自动生成com_example_test_JNI.h
(4)自己在jni文件夹下创建一个c文件(我取名为jni.c),文件里的内容如下

#include "jni.h"
#include "com_example_test_JNI.h"

JNIEXPORT jstring JNICALL Java_com_example_test_JNI_sayHello(JNIEnv* env,jclass object){
    return (*env)->NewStringUTF(env,"测试 jni");
}

(5)在jni文件夹下创建Android.mk文件,文件内容如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#so库的名称
LOCAL_MODULE := JNITest
#需要用到的原材料
LOCAL_SRC_FILES := jni.c
include $(BUILD_SHARED_LIBRARY)

4.配置build.gradle,在该文件下加上ndk这段内容

defaultConfig {
        applicationId "com.example.test"
        minSdkVersion 23
        targetSdkVersion 31
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        ndk{
            moduleName "JNITest"
            abiFilters "armeabi","armeabi-v7a","x86"
        }
    }

5.生成so库文件,在Android studio下打开Terminal,进入jni文件夹下,输入ndk-build,会在app->src->main->obj->local下生成so库文件
在这里插入图片描述
在这里插入图片描述
6.在main文件夹下创建jniLibs文件夹,将编译生成的.so库armeabi-v7a整个文件夹拷贝到jniLibs文件下
7.在java里调用.so文件
JNI.class包含so库

   package com.example.test;

public class JNI {
    static{
       System.loadLibrary("JNITest");
    }
    public  native String sayHello();
}

MainActivity里调用sayHello函数

public class MainActivity extends AppCompatActivity {
    private TextView text;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text = findViewById(R.id.test);
        text.setText(new JNI().sayHello());
    }
}

结果:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值