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

目录
相关文章
|
19天前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
39 1
|
21天前
|
jenkins 持续交付 网络安全
利用 Jenkins 实现持续集成与持续部署-代码拉取终端的配置
【8月更文挑战第30天】在Jenkins服务器中,git和Gitee是常用的代码拉取终端。Git作为分布式版本控制系统,具备出色的灵活性和可扩展性;而Gitee则在国内网络环境下表现更佳,适合团队协作。Git配置包括安装、设置用户信息及生成SSH密钥等步骤;Gitee配置也类似,需注册账号、创建仓库、配置基本信息并设置远程仓库地址。开发人员提交代码后,可通过Webhook、定时轮询或事件监听等方式触发Jenkins动作,确保持续集成和部署高效运行。正确配置这些触发机制并通过测试验证其有效性至关重要。
42 2
|
21天前
|
jenkins 持续交付
jenkins学习笔记之六:共享库方式集成构建工具
jenkins学习笔记之六:共享库方式集成构建工具
|
17天前
|
jenkins 持续交付 网络安全
利用 Jenkins 实现持续集成与持续部署-代码拉取终端的配置
安装Git、配置用户信息、生成SSH密钥以及在Gitee上创建项目仓库等。
43 0
|
19天前
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
37 0
|
21天前
|
jenkins 持续交付
jenkins学习笔记之九:jenkins认证集成github
jenkins学习笔记之九:jenkins认证集成github
|
21天前
|
安全 jenkins 持续交付
jenkins学习笔记之八:jenkins认证集成gitlab
jenkins学习笔记之八:jenkins认证集成gitlab
|
21天前
|
jenkins Devops 持续交付
jenkins学习笔记之七:jenkins集成LDAP用户认证
jenkins学习笔记之七:jenkins集成LDAP用户认证
|
2月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
169 6
|
2月前
|
Java 关系型数据库 MySQL
如何实现Springboot+camunda+mysql的集成
【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
190 4