android studio配置ndk开发

网上很多资料都比较旧,我查了一些资料,并且试了一下,总结了一个最简单的配置ndk开发的方法,步骤如下:

1. 在SDK Tools中勾选安装CMake、LLDB、NDK
image.png
2. 配置External Tools,省去了自己敲命令

参数讲解

    javah   用于生成头文件
    Program:$JDKPath$/bin/javah
    Parameters:-d ../jni -jni $FileClass$
    Working directory:$SourcepathEntry$\..\java
    ndk-build   用于构建so包
    注意:MAC/Linux用ndk-build,没有.cmd后缀
    Program:D:\adt\sdk\ndk-bundle\ndk-build.cmd
    Parameters:什么都不用填
    Working directory:$ModuleFileDir$\src\main
image.png

我的javah配置是

Program:/usr/bin/javah
Parameters:-d ../jni -jni $FileClass$
Working directory:$SourcepathEntry$/../java
image.png

我的ndk-build配置是

Program:$ANDROID_HOME/ndk-bundle/ndk-build
Working directory:$ModuleFileDir$/src/main
3. 在工程的local.properties文件中配置NDK的目录
ndk.dir=/Users/user/Library/Android/sdk/ndk-bundle
sdk.dir=/Users/user/Library/Android/sdk
4. 创建CMakeLists.txt
#定义cmake支持的最小版本号
cmake_minimum_required(VERSION 3.4.1)


add_library( # 设置生成so库的文件名称,例如此处生成的so库文件名称应该为:native-lib.so
             native-lib

             # 设置生成的so库类型,类型只包含两种:
             # STATIC:静态库,为目标文件的归档文件,在链接其他目标的时候使用
             # SHARED:动态库,会被动态链接,在运行时被加载
             SHARED

             # 设置源文件的位置,可以是很多个源文件,都要添加进来,注意相对位置
             src/main/jni/hello.cpp )

# 从系统里查找依赖库,可添加多个
find_library( # 例如查找系统中的log库liblog.so
              log-lib

              # liblog.so库指定的名称即为log,如同上面指定生成的libnative-lib.so库名称为native-lib一样
              log )
# 配置目标库的链接,即相互依赖关系
target_link_libraries( # 目标库(最终生成的库)
                       native-lib

                        # 依赖于log库,一般情况下,如果依赖的是系统中的库,需要加 ${} 进行引用,
                        # 如果是第三方库,可以直接引用库名,例如:
                        # 引用第三方库libthird.a,引用时直接写成third;注意,引用时,每一行只能引用一个库
                       ${log-lib} )

文件中的native-lib是我生成的so文件的名字,
src/main/jni/hello.cpp是我实现的native方法所在的类,注意路径不要写错,我的文件所在路径是这样的

image.png

5. 在模块的build.gradle文件中添加
android {
    compileSdkVersion 26
    buildToolsVersion "26.0.0"
    defaultConfig {
        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
    }
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
}
6. 创建native方法
package com.test;
public class NativeHelper  {
    static {
        System.loadLibrary("native-lib");
    }
    public native String stringFromJNI();
 
}
7. 编写cpp文件
#include "stdio.h"
#include "jni.h"
#include "string"
extern  "C"
JNIEXPORT jstring JNICALL Java_com_test_NativeHelper_stringFromJNI
        (JNIEnv *env,
jobject jobject1){
    return env->NewStringUTF("hello world from cpp");
}

然后项目就可以运行了


参考链接:https://www.jianshu.com/p/1e14dcc81c3c
参考链接的文章不太详细,我改了改,写了上文

你可能感兴趣的:(android studio配置ndk开发)