1. 程式人生 > >Ndk 生成.so(win7)

Ndk 生成.so(win7)

前提:

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、配置三個常用命令,其它不需要

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 中可以找到庫檔案