【Android JNI】 C/C++ 标准输入输出打印至Android日志控制台

【Android】 C/C++ 标准输入输出打印至Android日志控制台

#if defined(__ANDROID__)
start_logger("yeasound_sdk-native");
#endif#if defined(__ANDROID__)
#include <stdio.h>
#include <unistd.h>
#include <android/log.h>
#include <android/native_activity.h>
#include <android/asset_manager_jni.h>
#include <android/asset_manager.h>
#endif#if defined(__ANDROID__)
extern "C" {static int pfd[2];static pthread_t thr;static const char *tag = "myapp";static void *thread_func(void *){ssize_t rdsz;char buf[128];while ((rdsz = read(pfd[0], buf, sizeof buf - 1)) > 0) {if (buf[rdsz - 1] == '\n') --rdsz;buf[rdsz] = 0;  /* add null-terminator */__android_log_write(ANDROID_LOG_DEBUG, tag, buf);}return 0;}int start_logger(const char *app_name){tag = app_name;/* make stdout line-buffered and stderr unbuffered */setvbuf(stdout, 0, _IOLBF, 0);setvbuf(stderr, 0, _IONBF, 0);/* create the pipe and redirect stdout and stderr */pipe(pfd);dup2(pfd[1], 1);dup2(pfd[1], 2);/* spawn the logging thread */if (pthread_create(&thr, 0, thread_func, 0) == -1)return -1;pthread_detach(thr);return 0;}
}
#endifJNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
{JNIEnv *env;if (vm->GetEnv(reinterpret_cast<void **>(&env), JNI_VERSION_1_6) != JNI_OK) {return JNI_ERR;}#if defined(__ANDROID__)start_logger("yeasound_sdk-native");
#endif/* --javaVM是虚拟机在JNI中的表示 --*/env->GetJavaVM(&g_jni_vm);if (g_jni_vm == nullptr) {return JNI_ERR;}jni_utils_set_global_vm(g_jni_vm);if(jni_cache_init() != YeasoundLib::YS_STATUS_SUCCESS){return JNI_ERR;}return JNI_VERSION_1_6;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/860697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024运维人该何去何从?

文章目录 概要写作背景当下运维行业现状未来的个人提升小结 概要 互联网自诞生之日起到今天&#xff0c;一直保持着高速发展的状态&#xff0c;每一次互联网的革新&#xff0c;都会带来一大批的机遇&#xff0c;而现在我会在这里讲的是2024年&#xff0c;作为一个it运维&#…

【踩坑】修复循环设置os.environ[‘CUDA_VISIBLE_DEVICES‘]无效

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 问题示例 for gpus in [0, 1, 2, 3, 4, 5, 6, 7]:os.environ[CUDA_VISIBLE_DEVICES] gpusprint(torch.cuda.get_device_name(0)) 始终将使用第…

Mac安装多版本node

Mac下使用n模块去安装多个指定版本的Node.js&#xff0c;并使用命令随时切换。 node中的n模块是&#xff0c;node专门用来管理node版本的模块&#xff0c;可以进行node版本的切换&#xff0c;下载&#xff0c;安装。 1.安装n npm install -g n 2.查看版本 n --version 3.展…

C# —— 子类访问父类

创建子类对像时候 默认调用父类的无参数的构造函数&#xff0c;不会调用带参数构造函数 创建子类对象的时候可以调用父类的带参数的构造函数&#xff0c;在子类的构造函数后面:base()调用父类的构造 动物类 父类 class Animal {public string Name { get; set; }public cha…

游戏心理学Day25

游戏心理学的基本研究方法 科学解释的本质 实证观察和自我纠正是科学方法的两个特征无论是&#xff0c;观察还是系统的观察都可能导致理论的产生理论又反过来影响市政形成一种循环和自我纠正科学中使用的最基本的要素是数据和理论。 现代科学家强调数据的重要性&#xff0c;把…

动作捕捉与数字人实训室,引领动漫专业创新发展

如今&#xff0c;随着全身动作捕捉设备在动漫行业中的应用越来越重要&#xff0c;传统的教学模式与市场需求逐渐脱节&#xff0c;原有的教学方式和思路急需进行调整。高校通过搭建动作捕捉与数字人实训室&#xff0c;可以使得教学质量和效率大大提升&#xff0c;让学生能够接触…

如何采集拼多多的商品或店铺数据

怎么使用简数采集器批量采集拼多多的商品或店铺相关信息呢&#xff1f; 简数采集器暂时不支持采集拼多多的商品或店铺相关数据&#xff0c;只能采集页面公开显示的信息&#xff0c;谢谢。 简数采集器采集网站文章资讯等数据特别简单高效&#xff1a;只需输入网站网址&#xf…

由浅入深,走进深度学习(补充篇:神经网络基础)

在编程实战中&#xff0c;基础是最重要的&#xff0c;所以为了巩固基础&#xff0c;哈哈哈~ 不说废话了&#xff0c;大家喜欢就往下看看&#xff0c;也是我自己的一些总结&#xff0c;方便以后自己看~ 我觉得还是动手敲一遍&#xff0c;会有不一样的感受~ 相关内容&#xff…

全景vr交互微课视频开发让学习变得更加有趣、高效

在数字化教育的浪潮中&#xff0c;3D虚拟微课系统操作平台以其独特的魅力和创新的功能&#xff0c;成为吸引学生目光的焦点。这个平台不仅提供了引人入胜的画面和内容丰富的课件&#xff0c;更通过技术革新和制作方式的探索&#xff0c;将课程制作推向了一个全新的高度。 随着技…

HarmonyOS NEXT Developer Beta1配套相关说明

一、版本概述 2024华为开发者大会&#xff0c;HarmonyOS NEXT终于在万千开发者的期待下从幕后走向台前。 HarmonyOS NEXT采用全新升级的系统架构&#xff0c;贯穿HarmonyOS全场景体验的底层优化&#xff0c;系统更流畅&#xff0c;隐私安全能力更强大&#xff0c;将给您带来更高…

基于Cisco的校园网络拓扑搭建

特此说明&#xff1a;请先看评论区留言哦~ 一、基础配置 1.新建拓扑图 2.服务器配置 3.PC端配置 4.核心交换机配置 a.CORE-S1 Switch>enable Switch#configure terminal Switch(config)#hostname CORE-S1 CORE-S1(config)#vlan 10 CORE-S1(config-vlan)#vlan 20 CO…

【zabbix】zabbix 自动发现与自动注册、proxy代理

1、配置zabbix自动发现&#xff0c;要求发现的主机不低于2台 zabbix 自动发现&#xff08;对于 agent2 是被动模式&#xff09; zabbix server 主动的去发现所有的客户端&#xff0c;然后将客户端的信息登记在服务端上。 缺点是如果定义的网段中的主机数量多&#xff0c;zabbi…

第1章,物联网模式简介

物联网模式简介 物联网&#xff08;IoT&#xff09;在最近几年获得了巨大的吸引力&#xff0c;该领域在未来几年将呈指数级增长。这一增长将跨越所有主要领域/垂直行业&#xff0c;包括消费者、家庭、制造业、健康、旅游和运输。这本书将为那些想了解基本物联网模式以及如何混…

俄罗斯Yandex广告(Yandex ads)怎么做?Yandex广告搭建与效果优化技巧设置终极指南

您可以在Yandex推广中使用移动应用广告来覆盖数百万搜索和Yandex广告网络受众&#xff0c;从而提高应用的盈利能力。为了获得最佳效果&#xff0c;请在设置广告系列时遵循我们的建议。 入门 在 Yandex Direct 中创建广告活动。转到营销活动向导 → 应用安装和应用内转化&…

三叉神经痛多发于哪些部位,手术治疗会引起颅内感染吗?

三叉神经痛&#xff0c;一种突发的阵发性疾病&#xff0c;主要影响面部、口腔及下颌的特定区域。在日常无发作时期&#xff0c;患者与常人无异&#xff0c;但一旦发作&#xff0c;其疼痛之剧烈&#xff0c;常令人难以忍受。这种疼痛常表现为突发性的剧烈、短暂、如闪电般的抽痛…

【C语言】--常见类型和概念

❤️个人主页: 起名字真南 &#x1f495;个人专栏:【数据结构初阶】 【C语言】 目录 第一个C语言程序main函数printf函数库函数关键字字符和ASCII码字符串和\0转义字符 第一个C语言程序 #include<stdio.h> int main() {printf("Hello World\n");return 0; }ma…

React useId Hook

React 中有一个 useId hook&#xff0c;可以生成一个唯一 ID&#xff0c;这个有什么用处呢&#xff0c;用个 UUID 是不是可以替代呢&#xff1f;如果我们只考虑客户端&#xff0c;那么生成唯一 Id 的方法比较简单&#xff0c;我们在 State 中保存一个计数器就好&#xff0c;但是…

windows 安装 Kubernetes(k8s)

windows 安装 docker 详情见&#xff1a; https://blog.csdn.net/sinat_32502451/article/details/133026301 minikube Minikube 是一种轻量级的Kubernetes 实现&#xff0c;可在本地计算机上创建VM 并部署仅包含一个节点的简单集群。 下载地址&#xff1a;https://github.…

GPT-5时代的曙光:AI技术引领未来工作与生活的新篇章

前言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已成为推动社会进步的强大引擎。作为AI领域的杰出代表&#xff0c;OpenAI的GPT系列模型不断刷新着人们对AI智能的认知。近日&#xff0c;OpenAI首席技术官米拉穆拉蒂在达特茅斯工程学院的采访中透露&am…

深入理解装饰者模式(Decorator Pattern)及其实际应用

引言 在软件开发中&#xff0c;我们经常需要向现有的类添加新功能&#xff0c;同时又不希望改变其结构。装饰者模式&#xff08;Decorator Pattern&#xff09;为这种需求提供了灵活且强大的解决方案。本篇文章将详细介绍装饰者模式的概念、应用场景、优缺点&#xff0c;并通过…