Ndk 生成.so(win7)

本文详细介绍了在Windows 7环境下使用NDK编译生成.so文件的步骤,包括NDK的安装、环境配置、Android Studio项目设置、.mk文件的编写以及使用gradle自动编译的方法。通过这些步骤,开发者可以成功地在自己的Android应用中集成本地C/C++代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提:

1.安装ndk

2.系统的环境配置

在系统的环境变量中添加变量ANDROID_NDK内容为ndk的安装目录,我的是

C:\Users\Administrator\AppData\Local\Android\Sdk\ndk-bundle

之后在path中添加%ANDROID_NDK%;

3、在studio的file->Project Structure中配置ndk的安装路径

这里写图片描述

也可以在local.properties中配置路径

这里写图片描述

4、配置三个常用命令,其它不需要

http://blog.majiajie.me/2016/03/27/%E5%A6%82%E4%BD%95%E4%BC%98%E9%9B%85%E5%9C%B0%E4%BD%BF%E7%94%A8NDK/
参考链接

5、配置gradle.properties

添加
android.useDeprecatedNdk=true

1、.mk编译

1、生成头文件

新建类,写native方法,右击类文件NDK->javah,生成jni目录,目录下有头文件

这里写图片描述

2、在jni下新建一个.cpp文件,进行函数实现

#include "com_tcxy_androidndk_Operator.h"
JNIEXPORT jstring JNICALL Java_com_tcxy_androidndk_Operator_getName(JNIEnv *  env, jobject obj)
{
    return env->NewStringUTF("Hello word !!!");
}

3、写两个.mk文件

这里写图片描述

Android.mk内容为

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

LOCAL_MODULE := mathwork
LOCAL_SRC_FILES := mathOpeartion.cpp
include $(BUILD_SHARED_LIBRARY)

Application.mk内容为

APP_ABI := all

然后右击jni文件选择NDK->ndk-build,生成libs和obj目录

这里写图片描述

4、修改module的build.gradle

在android{}内部添加

    sourceSets {
        main {
            jni.srcDirs = []   //禁止ndk自动编译
            jniLibs.srcDirs = ['src/main/libs']  //更改jniLibs默认地址
        }
    }

2、ndk自动编译

主要思想就是把.mk的任务交给gradle配置来实现。

先重做前文的1、2步

3、修改module的build.gradle

在defaultConfig {}内部添加

 ndk {
            moduleName "mathwork"          //生成的so名字
            abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库
        }

在android{}内部添加

    sourceSets {
        main {
            jni.srcDirs = ['src/main/jni']    //可直接删除这行,系统默认位置就是src/main/jni
            jniLibs.srcDirs = ['src/main/libs']
        }
    }

make 之后在app\build\intermediates\ndk\debug 中可以找到库文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值