在Android上搭建一个NDK项目

首先New Project,选择Native C++,点击Next。

填入项目名称和包名,点击Next。

这里我们选择Cmake默认的C++版本。

创建好的项目目录,里面比我们正常的Android项目多了一个cpp目录

打开MainActivity。里面定义了一个jni方法stringFromJNI()

在init方法里面load了一个firstndkdemo的native lib。

打开cpp目录里面有一个Cmakelists.txt, 这里面cmake_minimum_required指定了cmake的版本。

project方法指定了native lib的名字,也就是MainActivity中init方法load的lib。

add_library方法指定了一个c++文件:native-lib.cpp

target_link_libraries方法是用来指定一个目标文件(可执行文件或者库文件)需要链接的库文件的。这个方法可以让你在编译和链接阶段,正确地解析和链接依赖的库文件。你可以指定库文件的名称,也可以指定库文件的路径。你还可以指定链接的范围,比如PUBLIC、PRIVATE或者INTERFACE,来控制库文件的传递性。

复制代码
cmake_minimum_required(VERSION 3.22.1)


project("firstndkdemo")

add_library(${CMAKE_PROJECT_NAME} SHARED
        # List C/C++ source files with relative paths to this CMakeLists.txt.
        native-lib.cpp)

target_link_libraries(${CMAKE_PROJECT_NAME}
        # List libraries link to the target library
        android
        log)

再来看一下native-lib.cpp,毫无疑问这里面就是stringFromJNI方法的具体底层的实现。

cpp 复制代码
#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_firstndkdemo_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

这个方法给java层返回了一句话"Hello from C++"

直接运行程序,可以看到MainActivity中的textview获取到了c++方法返回的问候语。

忽略了一个事情,CMakeLists.txt的配置文件还需要在gradle里面指定一下

Kotlin 复制代码
    externalNativeBuild {
        cmake {
            path = file("src/main/cpp/CMakeLists.txt")
            version = "3.22.1"
        }
    }
相关推荐
Dovis(誓平步青云)10 分钟前
几个方案来回选不定?做一个随时切换的候选推荐页
android·java·服务器·开发语言·javascript·数据库·智能化
恋猫de小郭4 小时前
KMP 又改了编译流程, Separate Compilation 禁止了 `commonMain` 的依赖穿透
android·前端·flutter
执明wa4 小时前
Android RecyclerView 实战:点击频道栏切换对应内容
android·开发语言·windows·microsoft·android studio
新鲜势力呀5 小时前
PHP 定时数据同步实战:从第三方接口超时到异步同步 + 增量更新架构优化全过程
android
星间都市山脉6 小时前
RecoveryUI 圆角屏安全边距配置及代码调用链
android·java·linux·windows·ubuntu
打工仔折腾 AI7 小时前
DiPlay 实测:iPhone 绕过硬件盒子直连 BYD 车机的思路拆解
android·人工智能·后端·python·gradle·iphone·ai agent 实战
hengdonghui7 小时前
Writeup 4 NUAA 2017 robots
android·ctf·re
96245619 小时前
从“一键创建 ECS”到完整恢复状态机:ACK 抢占式节点恢复 Android 工具升级复盘
android
LCD液晶屏1 天前
京瓷液晶屏停产替代:杭州立煌科技工业 LCD 解决方案
android·科技