本文主要记录Android Studio下通过JNI接口调用C++库(Mac平台)
一、下载Android Studio并安装
下载地址:https://developer.android.com/studio
二、下载jdk并安装
下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk13-downloads-5672538.html
输入完成后输入java -version可以看见版本号
三、打开Android Studio创建一个新的项目
四、选择Empty Activity工程,然后点击完成
五、下载NDK,如果编译器没有自动下载NDK,需要手动下载NDK
六、在Android Studio里面配置javah,Preferences-->Tools-->External Tools
然后点击+号,添加javah
具体内容如下
Program:$JDKPath$\bin\javah
Arguments:-v -jni -d $ModuleFileDir$/src/main/jni $FileClass$
Working directory:$SourcepathEntry$
然后点击OK-->Apply这样就配置成功了。后面在java class上面点击右键,然后选择Extern Tools-->javah就可以生成JNI文件了
七、新增一个Module取名为verify,选择Android Library,然后点击确定
这个时候就新增加了一个模块
八、在新建的模块下面新建一个java class文件,名字为VerifyTest,代码如下
package com.example.verify;
public class VerifyTest {
static{
System.loadLibrary("verify_android");
}
public native String getValue();
}
九、生成jni文件,然后在src目录下面新建一个目录命名为cpp,然后建立一个c++头文件和源文件,并且将jni目录下面的.h文件里面的内容拷贝到我们新建.h文件,这个时候可以将jni目录删除了,然后.cpp文件更改为以下内容
#include "verify_test.h"
#include <string>
JNIEXPORT jstring JNICALL Java_com_example_verify_VerifyTest_getValue
(JNIEnv *env, jobject obj){
std::string value = "hello";
return env->NewStringUTF(value.c_str());
}
十、在verify下面新建CMakeLists.txt文件,内容如下
cmake_minimum_required(VERSION 3.4.1)
include_directories(
${CMAKE_SOURCE_DIR}/src/main/cpp
)
add_library(
verify_android
SHARED
src/main/cpp/verify_test.cpp)
find_library(
log-lib
log)
target_link_libraries( # Specifies the target library.
verify_android
${log-lib})
十一、修改verify下面的build.gradle文件,添加红色框里面的内容
externalNativeBuild {
ndk {
abiFilters "armeabi-v7a", "arm64-v8a"
}
cmake {
cppFlags "-std=c++11 -frtti -fexceptions"
arguments "-DANDROID_STL=c++_shared"
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
十二、修改app下面的build.gradle,添加下面一行内容
implementation project(':verify')
十三、修改app下面的MainActivity类,内容如下
package com.example.jnitest;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.example.verify.VerifyTest;
public class MainActivity extends AppCompatActivity {
private VerifyTest mVerifyTest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("###","start verify");
mVerifyTest = new VerifyTest();
Log.d("###",mVerifyTest.getValue());
Log.d("###","end verify");
}
}
十四、然后打印下面三条内容就表示成功了
十五、上面只是讲到Android如何调用JNI接口,还没有使用到C++库,下一篇会记录如何调用C++的so库