Android开发java调用C简单示例

2023-05-16

目录

  • 下载NDK和CMake
  • 新建NDK项目
  • 写入C++代码,并运行

本文使用的Android Studio版本是windows版Android Studio Bumblebee | 2021.1.1 Patch 2
先看下最终效果:

下载NDK和CMake

检查NDK和CMake是否已经下载了,这一步不难,具体步骤就不细说了。下载好了如下图:

新建NDK项目

  • File->New -> New Project…
  • 选择Native C++,点击Next
  • 填写项目名:JNIDemo3
  • 选择C++版本,Toolchain Default就好。点击Finish。
  • 已经自动生成了CMakeLists.txt和native-lib.cpp

写入C++代码,并运行

  • 在MainActivity中,声明一个native方法public native String getStringData();,按住alt+Enter,如下图:
  • 选择 Create JNI function for getStringData,会在native-lib.cpp文件中自动生成一个方法,如下:
extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_jnidemo3_MainActivity_getStringData(JNIEnv *env, jobject thiz) {
    // TODO: implement getStringData()
}
  • 打开C++代码提示

  • 打开C++代码提示后,会看到自动提示NewStringUTF函数

  • 增加代码如下

extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_jnidemo3_MainActivity_getStringData(JNIEnv *env, jobject thiz) {
    std::string name = "my name is James";
    return env->NewStringUTF(name.c_str());
}
  • 在MainActivity中调用这个函数
 tv.setText(getStringData());

MainActivity完整代码如下:

public class MainActivity extends AppCompatActivity {

    // Used to load the 'jnidemo3' library on application startup.
    static {
        System.loadLibrary("jnidemo3");
    }

    private ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        // Example of a call to a native method
        TextView tv = binding.sampleText;
        tv.setText(getStringData());
    }

    /**
     * A native method that is implemented by the 'jnidemo3' native library,
     * which is packaged with this application.
     */
    public native String stringFromJNI();

    public native String getStringData();
}

直接运行,可以看到文章开头的效果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android开发java调用C简单示例 的相关文章

  • QT5 QTabWidget 隐藏Tab 或 显示Tab 正确的解决方案

    前言 xff1a 因为业务原因 xff0c 需要根据场景动态隐藏某个tab和显示某个tab xff0c 本着能不动手就不动手的原则我翻遍各大搜索引擎看到大部分人给出的解决方案的只是草草的说隐藏的时候remove xff0c 显示的时候再加回
  • 二进制开发常用正则备忘录

    一 xff1a 简要 本着以后项目能ctrl 43 c和ctrl 43 v的原则 xff0c 放到这里头备忘 二 xff1a 正则 xff08 1 xff09 xff1a 验证hex字符串 a fA F0 9 2 0 9a fA F 2 a
  • 解决Nginx各种错误

    1 xff1a 现象 修改配置后 xff0c 重启nginx发现起不来 xff0c 错误 xff1a open 34 var run nginx pid 34 failed 13 Permission denied 解决办法 xff1a s
  • 在线小游戏:人生重开模拟器

    原版游戏地址 xff1a Life Restart github xff1a GitHub VickScarlet lifeRestart 直 次 第三方版本 xff1a 天命版 xff08 解锁全天赋 xff0c 开局十天赋 xff09
  • Spring Boot/Spring Cloud解决中文乱码

    乱码的描述 xff08 废话 xff09 xff1a 中文都成了乱码 我在网上找了很多解决方案 xff0c 但是基本上都没解决我的问题 xff0c 直到翻了一下午的帖子找到了一个解决我项目乱码的一个解决方案 一般乱码问题基本上都是运行环境或
  • java使用graphql client

    在项目中引用graphql client 目前这个graphql client只支持post的graphql server 使用maven构建依赖关系 lt dependency gt lt groupId gt org mountclou
  • openssh 9.0p1版本和openssl1.1.1o版本部署实操

    准备 获取openssh 9 0p1版本软件包和openssl1 1 1o版本 如果设备可以连外网 xff0c 直接从服务器上wget获取 wget no check certificate https www openssl org so
  • Java使用ffmpeg多线程处理视频转码等任务框架-可获取任务进度-可同步或异步执行

    更新日志 v1 1 xff1a 升级命令模块 xff0c 支持in流和error流的日志读取 v1 2 xff1a 开放FFTerminal中的输入输出流的权限 xff0c 可以get使用 xff0c 方便对控制台的扩展 使用 lt dep
  • FPS游戏-罗技鼠标-通用的压枪宏

    郑重提示 这个宏不支持G HUB xff0c 只支持老款的鼠标驱动 xff08 因为当时G HUB刚出来全是bug就没用G HUB搞 xff0c 现在水平上去了也不想更新了哈哈 xff09 介绍 技术不行 xff0c 啥都白扯 本宏的开发用
  • 特殊字符对照表

    新的特殊字符编码对照表渲染后的字符编码十六进制渲染的十六进制编码十进制编码Java描述备注 amp x20 amp x20 amp 32 39 u0020 39 ordinary space amp xa2 amp xa2 amp 162
  • USB设备的bulk-only批量传输

    任何USB传输只能由主机发起 主机发送IN或OUT的请求只需一个令牌包 xff0c 这个包含在USBH BulkSendData 和USBH BulkReceiveData 函数中 xff0c 不需要编程者操心 为了详细一点的说明这些 xf
  • 基于stm32f407通过USB配置CH340

    1 在设备枚举的case ENUM SET CONFIGURATION 设置配置 状态后 xff0c 配置CH340的波特率 xff0c 然后跳过CBW和CSW协议 xff1b 直接采用批量传输的方式进行数据传输
  • FreeRTOS的多任务处理

    本文转载的原文路径为 xff1a https www cnblogs com yangguang it p 7233591 html 1 FreeRTOS 多任务调度支持 时间片段 xff0c 抢占式 和 和做式 任务侁先级可以在调度器启动
  • 单片机产生随机数

    在C语言中 为了生成随机数 xff0c 可以使用如下两个函数 xff1a void srand unsigned int seed int rand void 利用srand和rand 配合使用产生伪随机数序列 根据随机数种子rand 函数
  • C语言中 结构体成员冒号和的库函数

    C语言中的结构题成员 用冒号 xff1a struct sha204h temp key uint8 t value 32 unsigned int key id 4 unsigned int source flag 1 unsigned
  • 关于ATSHA204a的使用流程

    ATSHA204含有一个EEPROM 和 一个 SRAM EEPROM 包含 1个 Data Zone 512Bytes xff1a 一般用来存储密钥的 1个 configration Zone 88Bytes xff1a 用来设置Data
  • stm32L476RG,通过串口打印信息

    调试STM32L476RG时 xff0c 想要通过串口打印信息方法 xff1a 1 通过官方的历程 xff0c 移植USART的程序 xff0c 位置STM32Cube FW L4 V1 13 0 Projects NUCLEO L476R
  • k8s 1.18.20版本部署

    身为k8s初学者 xff0c 在掌握k8s理论知识的同时 xff0c 也需要掌握一下实际部署k8s的过程 xff0c 对于理论的学习起到一定的帮助作用 罗列了一下相关步骤 xff0c 请各位参考 xff1a 一 环境准备 三台虚机 xff1
  • java后端对接外部系统(HttpClient HttpPost)

    前言 最近遇到一个需求对接外部系统 xff0c 我们自己的系统发送请求 xff0c 根据请求内容的不同调用不同的外部系统 举例 xff1a 我们是做互联网医院的 xff0c 根据医生开处方选择药店的不同 xff0c 调用各药店自己的系统 x
  • “轻松搞定CMake”系列之find_package用法详解

    本文是 轻松搞定CMake 系列博客中的一篇 xff0c 该篇文章的主要目的是详细讲解一下CMake中搜包命令find package的使用和原理 其他更多文章请参考 xff1a 轻松搞定CMake 系列博客概述 文章目录 1 find p

随机推荐

  • 一遍成功的ROS主从机详细配置

    ROS支持多机互通 xff0c 可以设置一台主机 xff0c 多台从机 xff0c 主机中运行roscore xff0c 启动master节点 xff0c 从机直接运行其他节点 xff0c 在配置好的机器之间就可以互相通信了 xff0c 就
  • pip install列出待安装包的所有版本

    问题描述 一般我们在使用pip Install命令安装Python软件包的时候 xff0c 会想知道能安装的包版本的是多少 xff0c 这样方便自己选择可能的兼容版本进行安装 xff0c 在pip某个版本之前获取待安装包的所有版本命令比较简
  • ImportError with scipy.misc cannot import toimage错误解决

    问题描述 在使用如下代码时出现错误 xff1a span class token keyword import span scipy span class token punctuation span misc scipy span cla
  • AttributeError: module ‘requests‘ has no attribute ‘get‘

    问题描述 执行python程序时报错 xff1a AttributeError module span class token string 39 requests 39 span has no attribute span class t
  • Ubuntu下dpkg -i 安装deb报错 trying to overwrite shared

    问题表述 Ubuntu 22 04下 xff0c 执行下述命令时报错 xff1a 命令 xff1a span class token function sudo span dpkg i libglapi mesa 22 0 5 0ubunt
  • 4k高分屏Windows10下软件字体过小解决办法

    在Windows10下使用Matlab xff0c 由于是4k显示屏 xff0c 本来以为Matlab会出现字体过小的情况 xff0c 结果并没有出现什么问题 字体显示一切正常 xff0c 然而在打开Simulink时 xff0c Matl
  • Eigen矩阵运算开源库使用完全指南

    Eigen库是一个开源的矩阵运算库 xff0c 其利用C 43 43 模板编程的思想 xff0c 构造所有矩阵通过传递模板参数形式完成 由于模板类不支持库链接方式编译 xff0c 而且模板类要求全部写在头文件中 xff0c 从而导致导致Ei
  • “轻松搞定CMake”系列之CMakeLists文件编写语法规则详解

    文章目录 基本语法规则常见CMakeLists txt中指令剖析从VS项目配置过程理解CMakeLists内容CMake中常用变量汇总常用CMakeLists文件模板基础模板使用OpenCV库CMakeLists文件模板使用PCL库CMak
  • Centos7 XFS(dm-0):Internal error XFS_WANT_CORRUPTED_GOTO

    在k8s的道路上我们都是小白 xff0c 每天启动虚机都会遇到各种各样的问题 xff0c 这不 部署的k8s虚机启动发现操作系统启动异常 xff0c 提示如下报错信息 XFS xff08 dm 0 xff09 Internal error
  • 招聘笔试行测题之图形推理题解题思路汇总

    在一些公司的招聘过程中 xff0c 多少都会在笔试过程中遇到行测题 xff0c 这些行测题如果没有事先做过一些针对性的训练 xff0c 还是会感觉挺费劲的 xff0c 本博客主要汇总行测题中的图形推理题的一些解题思路 xff0c 供大家参考
  • ROS之tf空间坐标变换完全详解

    本博文主要汇总了自己在使用ROS中tf坐标变换包时查找的一些参考资料和博客 xff0c 包括了tf和部分tf2的使用 xff0c 在此感谢本博文中出现的所有的博客链接 xff01 参考资源 xff1a ROS官网详细介绍 xff1a htt
  • Word2016写论文之尾注功能——参考文献自动编号与引用(包括方括号去除方法)

    本系列文章主要详细介绍本人在使用Word2016写论文过程所用到的各种操作 xff0c 这些操作都非常的实用 xff0c 能够大为减少论文排版的工作量 其中很多方法也都是参考网上一些优秀博客的 xff0c 经过本人的实践成功之后才记录在此
  • vnc 设置不同用户登录

    a 在root用户下切换到其他用户 xff0c 以wolf用户为例 xff1a su wolf b 设置vnc连接密码 xff1a vncpasswd c 启动vnc服务 xff1a vncserver
  • 推荐几款常用的性能测试工具

    对内容不感兴趣拉到最后领取今天的外卖红包 常用的性能测试工具 对于开发人员来说 xff0c 首选是一些开源免费的性能 xff08 压力 xff09 测试软件 xff0c 例如 ab xff08 ApacheBench xff09 JMete
  • kubeadmin 快速部署k8s集群

    安装要求 在开始之前 xff0c 部署Kubernetes集群机器需要满足以下几个条件 xff1a 一台或多台机器 xff0c 操作系统 CentOS7 x 86 x64硬件配置 xff1a 2GB或更多RAM xff0c 2个CPU或更多
  • GetCurrentDirectory、SetCurrentDirectory和GetModuleFileName

    一 学习 GetModuleFileName xff1a 方法一 xff1a 想要访问执行程序 exe 路径下的文件 xff0c 有以下几个步骤 xff1a 1 先通过函数GetModuleFileName获取执行程序的绝对路径 TCHAR
  • C++定义全局类对象

    可能我这个全局类的说法不是很准确 xff0c 不过其实就是变量的扩展延伸 比如你想把一个类让全部的CPP都能用 xff0c 而不是一个变量 xff0c 那么需要这样定义 xff1a 假设有一个预编译头stdafx h 在stdafx h中加
  • Linux服务器VG扩容、LV扩容

    测试环境中K8s集群部署过程中发现磁盘大小太小 xff0c 需要对现有虚机的磁盘进行扩容 xff0c 计划 步骤1 虚机增加一块磁盘 步骤2 将磁盘添加到原有vg组中 步骤3 通过vg中资源给原有磁盘挂载目录进行lv扩容 实施步骤 xff1
  • Openstack云平台脚本部署之Neutron网络服务配置(九)

    目录 一 简介 二 部署脚本 2 1 网络节点独立部署 2 2 控制节点与网络节点融合部署 2 3 脚本详细介绍 三 参考文档 四 源码 五 系列文章 一 简介 Openstack网络服务Neutron主要负责网络连接任务 xff0c 包括
  • Android开发java调用C简单示例

    目录 下载NDK和CMake新建NDK项目写入C 43 43 代码 xff0c 并运行 本文使用的Android Studio版本是windows版Android Studio Bumblebee 2021 1 1 Patch 2 先看下最