Android Stduio下通过JNI接口调用C++库(一)

本文主要记录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库 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值