JNI学习笔记之AS+Cmake+NDK配置自动编译出so并集成流程

简介: 创建Android工程这里开始我不勾选supportC++选项,而是我想在一个非NDK工程上添加配置,使之成为NDK工程编写Java代码还是一个简单的例子package com.

创建Android工程

这里开始我不勾选supportC++选项,而是我想在一个非NDK工程上添加配置,使之成为NDK工程

编写Java代码

还是一个简单的例子

package com.newtrekwang.ndkpractice;

public class JNIUtils {
      
    public static native String getStringFromC();
}

编写C/C++源码

在src/main下创建一个cpp文件夹,文件夹名字任取,不过IDE默认cpp存放c/c++源码

image.png

gradle配置c/c++源文件路径

在app Module的gradle里的android域添加sourceSets域,像这样

sourceSets{
 main {
            jni.srcDirs=["src/main/cpp"] //指定c/c++源码位置
        }
}

gradle配置CMakeLists.txt文件的位置

在app Module的gradle里的android域添加externalNativeBuild域,像这样

  externalNativeBuild{
        cmake{
            path "src/main/cpp/CMakeLists.txt"
        }
    }

CMakeLists.txt内容如下

cmake_minimum_required(VERSION 3.4.1)
add_library(hello
            SHARED
             hello.c)

然后gradle同步一下,接着就可以在JNIUtils的getStringFromC那儿,Alt+Enter直接跳到hello.c文件叫你编写C层的getStringFromC实现。

然后写完hello.c

#include <jni.h>

JNIEXPORT jstring JNICALL
Java_com_newtrekwang_ndkpractice_JNIUtils_getStringFromC(JNIEnv *env, jclass type) {
    char* result="Hello from C!";
    return (*env)->NewStringUTF(env, result);
}

然后没什么特殊的配置的话,就可以编译项目生成libhello.so了

具体ExternalNativeBuild域的配置可以查ExternalNativeBuild

image.png

defaultConfig域的属性

ExternalNativeCmakeOptions

ExternalNativeNdkBuildOptions

最后,编译出的so文件会在build目录下

Android Studio 2.2 更方便地创建JNI项目-CMake

目录
相关文章
|
2月前
|
项目管理 微服务
云效常见问题之将多个微服务应用集成到一次研发流程中发布上线如何解决
云效(CloudEfficiency)是阿里云提供的一套软件研发效能平台,旨在通过工程效能、项目管理、质量保障等工具与服务,帮助企业提高软件研发的效率和质量。本合集是云效使用中可能遇到的一些常见问题及其答案的汇总。
31 0
|
4月前
|
存储 测试技术 持续交付
自动化测试与持续集成/持续交付(CI/CD):优化软件开发流程的利器
自动化测试与持续集成/持续交付(CI/CD)是现代软件开发中至关重要的环节,通过将自动化测试与持续集成/持续交付相结合,可以实现开发流程的高效优化,提高软件质量和交付速度。本文将探讨自动化测试与CI/CD的概念、原理及其在软件开发中的重要性,以及如何实施这些技术以提升团队的协作效率和软件交付质量。
61 1
|
5月前
|
Java 开发工具 git
spring boot 集成 ctrip apollo 实现动态配置更新
spring boot 集成 ctrip apollo 实现动态配置更新
52 1
|
6天前
|
分布式计算 DataWorks 关系型数据库
DataWorks操作报错合集之DataWorks集成实例绑定到同一个vpc下面,也添加了RDS的IP白名单报错:数据源配置有误,请检查,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
22 0
|
7天前
|
存储 分布式计算 DataWorks
MaxCompute产品使用合集之大数据计算MaxCompute dataworks可以批量修改数据集成任务的数据源配置信息吗
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
14天前
|
传感器 Java 开发工具
[NDK/JNI系列03] Android Studio集成NDK开发环境
[NDK/JNI系列03] Android Studio集成NDK开发环境
14 0
|
2月前
|
算法 Unix Linux
【Linux 库管理工具】深入解析pkg-config与CMake的集成与应用
【Linux 库管理工具】深入解析pkg-config与CMake的集成与应用
81 0
|
2月前
|
Devops 开发工具 数据安全/隐私保护
Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)
Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)
71 0
|
4月前
|
IDE 前端开发 JavaScript
【C#】C# 开发环境配置(Rider 一个.NET 跨平台集成开发环境)
【1月更文挑战第26天】【C#】C# 开发环境配置(Rider 一个.NET 跨平台集成开发环境)
|
4月前
|
机器学习/深度学习
零基础入门语义分割-地表建筑物识别 Task6 模型集成-学习笔记
零基础入门语义分割-地表建筑物识别 Task6 模型集成-学习笔记
38 1

热门文章

最新文章